测试实战【用例设计】自己写的项目+功能测试(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

五、总结

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

相关推荐
weixin_523185322 分钟前
SimpleDateFormat为什么线程不安全?源码级解析与解决方案
java·开发语言·安全
神仙别闹2 分钟前
基于C语言处理机调度算法的实现
服务器·c语言·算法
Chase_______5 分钟前
【Java杂项】Java 中的 null:空指针、自动拆箱与集合边界详解
java·开发语言
草莓熊Lotso6 分钟前
【Linux网络】深入理解 TCP 协议(二):序号机制、流量控制与连接管理
linux·运维·服务器·网络·c++·tcp/ip
程序猿乐锅7 分钟前
【JAVASE | 第十九篇】Java 注解入门
java
techdashen8 分钟前
Rust 项目管理动态 — 2026 年 2 月
开发语言·后端·rust
Shawn_Shawn8 分钟前
Apache Doris Ai Function学习
后端·llm
布朗克1689 分钟前
28 网络编程——Socket、TCP/UDP与HttpClient
java·网络·tcp/ip·udp
Python私教9 分钟前
我准备用 AI 二开 shadcn-admin,做一个可交付的后台管理系统模板
后端
云飞云共享云桌面1 小时前
SolidWorks服务器+云飞云共享云桌面 = 10人共享方案
linux·运维·服务器·网络·制造