测试实战【用例设计】自己写的项目+功能测试(1)

目录

一、项目介绍

本章节将对抽奖系统进行测试!下面启动!(项目当中的所有脑图都是以本章节为最终版)

1. 需求描述

  1. 包含管理员的注册与登录。
  2. 人员管理:管理员支持创建普通用户,查看用户列表
  3. 管理端支持创建奖品、奖品列表展示功能。
  4. 管理端支持创建活动、活动列表展示功能。
  5. 抽奖页面:
  6. 通知部分:抽奖完成需以邮件方式通知中奖者。
  7. 管理端涉及的所有页面,包括抽奖页,需强制管理员登录后方可访问。

2. 页面与接口

创建项目结构:

http://localhost:8080/register.html 注册页面

调用的注册接口:http://localhost:8080/register

http://localhost:8080/blogin.html 登录页面

调用的登录接口:http://localhost:8080/password/login

http://localhost:8080/admin.html 后台显示页面

调用活动列表接口:http://localhost:8080/activity/find-list?currentPage=1\&pageSize=10

调用新建活动接口:http://localhost:8080/activity/create

调用奖品列表接口:http://localhost:8080/prize/find-list?currentPage=1\&pageSize=10

调用创建奖品接口:http://localhost:8080/prize/create

调用人员列表接口:http://localhost:8080/base-user/find-list

调用注册用户接口:http://localhost:8080/register

二、功能测试

针对需求与接口进行功能的测试:

1. 脑图

2. 测试结果

注册结果:

登录结果:

成功创建活动:

成功创建奖品:

成功创建人员:

其他人获取结果显示:

由于动态变化的图没有办法展示会在自动化进行结果处理。

三、自动化测试

具体的测试在我的这偏博客当中,在此处会将最核心的抽奖功能进行测试,其他功能界面测试都由

链接: link

这篇博客介绍

1. 抽奖功能测试

关于界面元素测试在另一博客当中有展示,以下是关于本系统的核心测试部分

java 复制代码
package test;

import common.Util;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;
import java.util.List;
import java.util.Set;

public class WinnerPage extends Util {

    public static String url = URL;

    public WinnerPage() {
        super(url);
    }

    /**
     * 一篇博客抽奖
     */
    public void winnerPage() {
        System.out.println("一篇博客抽奖测试");
        driver.findElement(By.cssSelector("#activitiesList")).click();

        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("contentFrame")));

        // 2. 找到所有活动项(每个活动是一个div.activity-item)
        List<WebElement> activityItems = driver.findElements(By.cssSelector("#activities > div.activity-item"));

        // 记录点击前的窗口句柄(主窗口)
        String originalWindow = driver.getWindowHandle();

        // 3. 遍历每个活动,判断状态并决定是否点击
        for (WebElement item : activityItems) {
            // 定位当前活动项里的a标签(抽奖链接)
            WebElement link = item.findElement(By.cssSelector("div.active > p > a"));
            String linkText = link.getText().trim();

            System.out.println("活动状态:" + linkText);

            // 只点击"活动进行中,去抽奖"的活动
            if (linkText.contains("活动进行中,去抽奖")) {
                System.out.println("点击进行中的活动...");
                link.click();
                // 3. 等待新窗口出现,并切换过去
                wait.until(ExpectedConditions.numberOfWindowsToBe(2)); // 等待窗口总数变为2
                Set<String> allWindows = driver.getWindowHandles();
                for (String windowHandle : allWindows) {
                    if (!windowHandle.equals(originalWindow)) {
                        driver.switchTo().window(windowHandle); // 切换到新窗口
                        break;
                    }
                }
                // 这里可以加后续抽奖页面的测试逻辑
                driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();
                // 比如:driver.getWindowHandles() 处理新窗口
                driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();
                driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();
                driver.findElement(By.cssSelector("#container > div.opt-box > span.btn.next-btn")).click();

                driver.close(); // 关闭当前的新窗口
                driver.switchTo().window(originalWindow); // 切回主窗口
                break; // 如果只需要点击第一个进行中的活动,就break;如果要遍历所有,就去掉break
            } else if (linkText.contains("活动已完成")) {
                System.out.println("活动已完成,跳过...");
            }
        }


        // 4. 切回主页面
        driver.switchTo().defaultContent();

    }
}

四、性能测试

性能测试主要测试的是登录接口,人员列表显示,用户列表显示,奖品列表显示,具体信息在:

链接: link

五、总结

主要进行了功能测试,以及部分的接口测试,以及测试用例编写。

相关推荐
Sincerelyplz1 小时前
【WebSocket】消息丢失的补偿/补发机制
后端·websocket
茶杯梦轩1 小时前
从零起步学习并发编程 || 第八章:线程池实战(避坑指南与最佳实践)
服务器·后端·面试
洋洋技术笔记1 小时前
Spring Boot自动装配原理
java·spring boot
Java水解1 小时前
【Spring Cloud】优雅实现远程调用-OpenFeign
后端·spring cloud
wefg12 小时前
【Linux】信号的产生、保存、处理
linux·运维·服务器
iameyama2 小时前
Amazon Redshift 和 BigQuery 数据类型区别
java·开发语言
peng_YuJun2 小时前
openEuler 虚拟机从零到一:完整部署指南
linux·运维·服务器·vmware·openeuler
-孤存-2 小时前
Spring Bean作用域与生命周期全解析
java·开发语言·前端