抽奖系统---测试报告

一:项目概述

1.项目背景

为解决现有抽奖形式的诸多痛点,适配企业数字化运营需求,因此开发了以抽奖活动为核心场景的Spring Boot项目,旨在通过该项目提供一个全面、可靠、易于维护的专业抽奖平台。

2.项目结构

  • 管理员模块:登录、注册
  • 普通用户模块:用户列表、普通用户注册
  • 奖品模块:奖品列表、奖品创建
  • 活动模块:活动列表、创建活动
  • 抽奖模块:抽奖活动、中奖者页面展示

3.采用技术

项目采用Spring Boot框架,基于Java语言开发,使用MyBatis作为持久层框架,MySQL存储业务数据,Redis实现缓存服务,RabbitMQ处理异步消息队列,JWT进行身份认证,前端采用HTML/CSS/JavaScript实现,整体构建高并发抽奖系统。

4.测试环境

  • 操作系统:Windows 11
  • 浏览器:Chrome
  • 测试工具:Selenium、JMeter、postman

二:测试用例

三:功能测试

1:手动测试

1.1登录页面测试

1.1.1密码登录

测试场景一:手机号和密码都为不填
预期结果:系统提示手机号、密码为空

测试场景二:手机号格式不正确和密码填写正确
预期结果:弹窗提醒"登录失败登录方式不存在"

测试场景三:手机号填写错误格式正确和密码填写正确
预期结果:弹窗提醒"登录失败身份错误"

测试场景四:手机号正确,密码格式错)
预期结果:系统提醒"密码长度至少为6个字符"

测试场景五:手机号正确,密码错误(密码格式正确)
预期结果:弹窗提醒"登录失败密码错误"

测试场景六:手机号正确,密码正确
预期结果:跳转到活动中心页

1.1.2验证码登录

测试场景一:手机号和验证码都为空
预期结果:系统提示"请输入手机、验证码"

测试场景二:手机号错误和验证码正确
预期结果:弹窗提醒"登录失败身份错误"

测试场景三:手机号格式错误和验证码正确
预期结果:弹窗提醒"登录失败手机号格式错误"


测试场景四:手机号正确和验证码不正确
预期结果:弹窗提醒"登录失败验证码校验失败"

1.2 人员管理测试

1.2.1 人员管理列表测试

测试场景:打开人员管理列表页面,后显示所有的人员信息(包括管理员和非管理员信息)

1.2.2 普通人员创建测试

测试场景一:所有都为空时候
预期结果:系统提示请输入相关的信息

测试场景二:邮箱格式错误,其他正确
预期结果:系统提示请输入有效的邮箱地址

测试场景三:手机号格式错误,其他正确
预期结果:弹窗提示"注册失败!手机号格式错误"

测试场景五:全部正确
预期结果:创建成功最终跳转人员列表页面

1.2.3 管理员人员注册测试

测试场景一:当输入的密码不符合要求时候
预期结果:系统提示:密码长度至少6位的字符

测试场景二:输入的手机号码已存在时候
预期结果:系统提示:注册失败!手机号已存在

测试场景三:输入的都符合要求
预期结果:系统提示:注册成功去登陆,点击确定跳转到活动列表页面

1.3 奖品管理测试

1.3.1 奖品列表测试

测试场景一:点击奖品列表
预期结果:正常显示奖品列表

1.3.2 奖品创建测试

测试场景一:全部空着提交
预期结果:弹窗"创建奖品失败"

测试场景二:奖品名称不填其它都填
预期结果:系统提示:创建奖品失败

测试场景三:所有都正常填写
预期结果:弹窗提示:奖品创建成功

1.4活动页面测试

1.4.1活动列表测试

测试场景一:点击活动列表,显示所有活动信息
预期结果: 点击已完成的活动后可以查看中奖名单。

测试场景二:点击活动列表,显示所有活动信息
预期结果: 点击未完成的活动后,可以继续进行抽奖。

1.4.2 新建活动测试

测试场景一:当所有信息都不填写的时候
预期结果:系统会提示要输入相关的信息

测试场景二:填写了活动名称和奖品描述,但未圈选奖品和人员
预期结果:弹窗提示"请至少选择一个奖品"

测试场景三:填写活动名称和奖品描述,圈选奖品,未圈选人员
预期结果:弹窗提醒"请至少选择一个人员",人员数量大于等于奖品数量

测试场景四:填写活动名称和奖品描述,圈选奖品,圈选人员但圈选的人员数量小于奖品数量。
预期结果:弹窗提醒"创建失败!活动关联奖品及人员数量设置异常

测试场景五:填写活动名称和奖品描述,圈选奖品,圈选人员(且圈选人员人数比奖品多) 预期结果:弹窗提示创建成功,跳转活动列表

1.4.3 抽奖页面测试

测试场景:正常抽奖流程
预期结果:最终展示中奖者名单

2:自动化测试

2.1驱动类

java 复制代码
package common;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;

public class Utils {

    public static WebDriver driver = null;

    public WebDriverWait wait = null;

    public static String lotteryUrl = null;

    public Utils(String url) {
        WebDriver webDriver = createDriver();
        webDriver.get(url);
        wait = new WebDriverWait(driver , Duration.ofSeconds(30));
    }


    /**
     * 获取驱动,打开浏览器
     * @return
     */
    public WebDriver createDriver(){
        if(driver == null){
            ChromeOptions options = new ChromeOptions();
            // 允许访问所有链接
            options.addArguments("--remote-allow-origins=*");
            // 禁用一些可能导致问题的功能
            options.addArguments("--disable-blink-features=AutomationControlled");
            options.addArguments("--no-sandbox");
            options.addArguments("--disable-dev-shm-usage");
            
            try {
                // 优先使用 WebDriverManager,但指定使用缓存版本避免解析错误
                WebDriverManager.chromedriver().clearResolutionCache().setup();
            } catch (Exception e) {
                // 如果 WebDriverManager 失败,Selenium 4.6+ 会自动使用内置的 Selenium Manager
                System.out.println("WebDriverManager 失败,使用 Selenium 内置驱动管理: " + e.getMessage());
            }
            
            driver = new ChromeDriver(options);
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }

        return driver;
    }

    /**
     * 保存截图
     * @param str
     * @throws IOException
     */
    public void ScreenShot(String str) throws IOException {
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");
        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());


        String filename = "./src/test/java/images/"+dirTime+"/"+str+"-"+fileTime+".png";

        File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(file , new File(filename));
    }

    /**
     * 退出浏览器
     */
    public static void quit(){
        if (driver != null) {
            driver.quit();
            driver = null;
        }
    }
}

2.2 注册测试类

java 复制代码
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;

public class RegisterTest extends Utils {
    public static String url = "http://127.0.0.1:8080/register.html?admin=true";
    public RegisterTest() {
        super(url);
    }

    public void checkRegisterPage() throws InterruptedException {
        // 检验元素
        checkRegisterElement();

        //  异常注册
        checkAbnormalRegister("" ,"666@qq.com" , "16166666666" , "12345678");
        checkAbnormalRegister("mq" ,"" , "16166666666" , "12345678");
        checkAbnormalRegister("mq" ,"666@qq.com" , "" , "12345678");
        checkAbnormalRegister("mq" ,"666@qq.com" , "16166666666" , "");

        // 错误注册
        checkErrorRegister("mq" ,"666" , "16166666666" , "12345678");
        checkErrorRegister("mq" ,"666@qq.com" , "1616666666" , "12345678");
        checkErrorRegister("mq" ,"666@qq.com" , "16166666666" , "1234");

        // 正常注册
        clearText();
        driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("mq");
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("654@qq.com");
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("16166666666");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    private void checkErrorRegister(String username , String email , String phone , String password) throws InterruptedException {
        clearText();
        driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys(username);
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys(email);
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(phone);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
        if(phone.length() < 11){
            Thread.sleep(1000);
            Alert alert = driver.switchTo().alert();
            alert.accept();
        }
    }

    private void checkAbnormalRegister(String username , String email , String phone , String password) {

        clearText();

        if(!username.equals("")){
            driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys(username);
        }

        if(!email.equals("")){
            driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys(email);
        }


        if(!phone.equals("")){
            driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(phone);
        }

        if(!password.equals("")){
            driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        }
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
    }

    private void checkRegisterElement() {
        // 姓名
        driver.findElement(By.xpath("//*[@id=\"name\"]"));
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]"));
        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]"));
        // 密码
        driver.findElement(By.xpath("//*[@id=\"password\"]"));
        // 注册
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button"));
    }

    public void clearText(){
        // 姓名
        driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
        // 密码
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
    }
}

2.3 登陆测试

java 复制代码
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;

public class LoginTest extends Utils {

    public static String url = "http://127.0.0.1:8080/blogin.html";


    public LoginTest() {
        super(url);
    }

    /**
     * 检验密码登录
     */
    public void checkPasswordLogin() throws InterruptedException {


        wait.until(webDriver ->{
            JavascriptExecutor js = (JavascriptExecutor) webDriver;
            return "complete".equals(js.executeScript("return document.readyState"));
        });
        // 检验密码登录页面元素
        checkPasswordLoginElement();

        // ----------异常密码登录方式--------

        checkPasswordAbnormalLogin();

        // ----------错误密码登录方式--------

        //    手机号密码都错误

        // ----手机号格式不对
        checkPassWordErrorLogin("1234567890" , "123456");

        // ----手机号格式正确
        checkPassWordErrorLogin("12345678901" , "123456");

        //    账号错误,密码正确

        // ----手机号格式不对
        checkPassWordErrorLogin("1234567890" , "12345678");
        // ----手机号格式正确
        checkPassWordErrorLogin("12345678901" , "12345678");


        //    账号正确,密码错误
        // --- 密码格式不正确
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("17347303966");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("1234");
        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
        // ---- 密码格式正确
        checkPassWordErrorLogin("17347303966" , "111111");



        //  ----------正确密码登录方式--------

        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("16166666666");
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();


        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span"));

    }


    public void checkMessageLogin() throws InterruptedException {
        wait.until(webDriver ->{
            JavascriptExecutor js = (JavascriptExecutor) webDriver;
            return "complete".equals(js.executeScript("return document.readyState"));
        });
        // 校验元素
        checkMessageLoginElement();

        // 异常登录
        checkMessageAbnormalLogin();

        // 错误登录
        checkMessageErrorLogin();

        // 正确登录
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).sendKeys("16166666666");
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).sendKeys("12345678");
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();

        Thread.sleep(2000);

    }

    private void checkMessageErrorLogin() throws InterruptedException {
        // 手机号格式不对
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).sendKeys("1301443803");
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();
        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();

        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).clear();
        // 手机号格式对,验证码不对
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).sendKeys("17347303966");
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).sendKeys("12345");
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();
        Thread.sleep(1000);
        alert = driver.switchTo().alert();
        alert.accept();
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).clear();
    }

    private void checkMessageAbnormalLogin() {
        // 都空
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();


        // 验证码不空。手机号空
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).sendKeys("123456");
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]")).clear();

        // 验证码空。手机号不为空
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).sendKeys("17347303966");
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button")).click();
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]")).clear();

    }


    public void checkPasswordLoginElement(){
        // 密码登录
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[1]/span[1]"));
        // 验证码登录
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[1]/span[2]"));
        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]"));
        // 密码
        driver.findElement(By.xpath("//*[@id=\"password\"]"));
        // 登录
        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button"));
        // 注册
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[2]/a"));
    }

    public void checkMessageLoginElement() throws InterruptedException {
        // 跳转到验证码登录页
        driver.findElement(By.xpath("/html/body/div/div[2]/div[1]/span[2]")).click();

        Thread.sleep(1000);
        // 校验页面元素
        //  手机号
        driver.findElement(By.xpath("//*[@id=\"loginMobile\"]"));
        // 验证码框和获取验证码
        driver.findElement(By.xpath("//*[@id=\"verificationCode\"]"));
        driver.findElement(By.xpath("//*[@id=\"getVerificationCode\"]"));

        // 登录按钮
        driver.findElement(By.xpath("//*[@id=\"codeForm\"]/button"));

        // 注册按钮
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[2]/a"));
        Thread.sleep(1000);
    }



    public void checkPasswordAbnormalLogin() throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();

        // 手机号为空,密码不为空
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");

        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();

        Thread.sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();


        //手机号不为空,密码为空
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("12345678901");

        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();

        Thread.sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
    }
    public void checkPassWordErrorLogin(String phoneNumber , String password) throws InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(phoneNumber);
        driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"loginForm\"]/button")).click();
        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Thread.sleep(1000);
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"password\"]")).clear();
    }
}

2.4 活动中心测试

java 复制代码
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;

import java.util.Set;


public class ActivityCenterTest extends Utils {

    public static String url = "http://127.0.0.1:8080/admin.html";
    public ActivityCenterTest() {
        super(url);
    }


    public void checkActivityCenterPage() throws InterruptedException {
        // 校验人员管理
        checkUserRegister();

        // 校验奖品管理
        checkPrizeRegister();

        // 校验活动管理
        checkActivityRegister();
    private void checkActivityRegister() throws InterruptedException {
        waitPage();
        driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click();

        checkActivityElement();

        // 异常创建
        checkAbnormalActivityCreation("" , "第二个测试" , "奖品" , "人员1");
        checkAbnormalActivityCreation("测试2" , "" , "奖品" , "人员1");
        checkAbnormalActivityCreation("测试2" , "第二个测试" , "" , "人员1");
        checkAbnormalActivityCreation("测试2" , "第二个测试" , "奖品" , "");


        // 正常创建
        clearActivityTest();
        driver.findElement(By.xpath("//*[@id=\"activityName\"]")).sendKeys("测试2");

        // 活动描述
        driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys("第二个测试");

        driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"prize-20\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[3]/button[2]")).click();

        driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"user-45\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();

        driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click();
        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();

        driver.switchTo().defaultContent();
    }

    private void checkAbnormalActivityCreation(String activityName , String activityDescribe , String prize , String user) throws InterruptedException {
        clearActivityTest();
        // 活动名称
        driver.findElement(By.xpath("//*[@id=\"activityName\"]")).sendKeys(activityName);

        // 活动描述
        driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys(activityDescribe);

        // 圈选奖品
        if(!prize.isEmpty()){
            driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"prize-20\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[3]/button[2]")).click();
        }

        // 圈选人员
        if(!user.isEmpty()){
            driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"user-45\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();
        }

        // 创建活动
        driver.findElement(By.xpath("//*[@id=\"createActivity\"]")).click();

        if(!activityName.isEmpty() && !activityDescribe.isEmpty()){
            if(prize.isEmpty() || user.isEmpty()){
                Thread.sleep(1000);
                Alert alert = driver.switchTo().alert();
                alert.accept();
            }
        }
    }

    private void checkActivityElement() {
        driver.switchTo().frame("contentFrame");

        // 活动名称
        driver.findElement(By.xpath("//*[@id=\"activityName\"]"));

        // 活动描述
        driver.findElement(By.xpath("//*[@id=\"description\"]"));

        // 圈选奖品
        driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]"));

        // 圈选人员
        driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]"));

        // 创建活动
        driver.findElement(By.xpath("//*[@id=\"createActivity\"]"));
    }

    private void checkPrizeRegister() throws InterruptedException {
        waitPage();
        driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[1]/a")).click();
        driver.findElement(By.xpath("/html/body/div[2]/div[1]/ul/li[2]/ul/li[2]/a")).click();
        waitPage();
        // 检查元素
        checkPrizeElement();

        // 异常创建
        checkAbnormalCreation("手机","" , "" , "");
        checkAbnormalCreation("","" , "13999" , "");
        checkAbnormalCreation("手机","" , "" , "一部手机");
        checkAbnormalCreation("手机","" , "13999" , "");
        checkAbnormalCreation("","D:\\PIC\\725ea4c5-9c88-4f3e-8897-47ba39da03c6.jpg" , "" , "");

        // 正常创建
        clearPrizeTest();
        driver.findElement(By.xpath("//*[@id=\"prizeName\"]")).sendKeys("手机");
        // 奖品图片
        driver.findElement(By.xpath("//*[@id=\"prizeImageUrl\"]")).sendKeys("D:\\PIC\\725ea4c5-9c88-4f3e-8897-47ba39da03c6.jpg");
        // 奖品价格
        driver.findElement(By.xpath("//*[@id=\"price\"]")).sendKeys("13999");
        // 奖品描述
        driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys("一部手机");
        // 创建奖品
        driver.findElement(By.xpath("/html/body/div/button")).click();

        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    private void checkAbnormalCreation(String prizeName , String picUrl , String prizePrice , String prizeDescribe) throws InterruptedException {
        clearPrizeTest();
        driver.findElement(By.xpath("//*[@id=\"prizeName\"]")).sendKeys(prizeName);
        // 奖品图片
        if(picUrl != ""){
            driver.findElement(By.xpath("//*[@id=\"prizeImageUrl\"]")).sendKeys(picUrl);
        }
        // 奖品价格
        driver.findElement(By.xpath("//*[@id=\"price\"]")).sendKeys(prizePrice);
        // 奖品描述
        driver.findElement(By.xpath("//*[@id=\"description\"]")).sendKeys(prizeDescribe);
        // 创建奖品
        driver.findElement(By.xpath("/html/body/div/button")).click();
        Thread.sleep(1000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
    }

    private void checkPrizeElement() {
        driver.switchTo().frame("contentFrame");

        // 奖品名称
        driver.findElement(By.xpath("//*[@id=\"prizeName\"]"));
        // 奖品图片
        driver.findElement(By.xpath("//*[@id=\"prizeImageUrl\"]"));
        // 奖品价格
        driver.findElement(By.xpath("//*[@id=\"price\"]"));
        // 奖品描述
        driver.findElement(By.xpath("//*[@id=\"description\"]"));
        // 创建奖品
        driver.findElement(By.xpath("/html/body/div/button"));
    }

    private void checkUserRegister() throws InterruptedException {

        waitPage();
        driver.findElement(By.xpath("//*[@id=\"userList\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"register\"]")).click();
        waitPage();
        // 校验元素
        checkUserElement();

        // 异常创建
        checkAbnormalRegister("人员3", "" , "");
        checkAbnormalRegister("", "2341@qq.com" , "");
        checkAbnormalRegister("", "" , "13012312312");

        // 错误注册
        checkErrorRegister("人员3", "2341" , "13012312312");
        checkErrorRegister("人员3", "2341@qq.com" , "1301231231");

        // 正确注册
        clearUserTest();
        driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("人员4");
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("23412@qq.com");

        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("13012312312");
        // 注册
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();

        driver.switchTo().defaultContent();

    }

    private void checkErrorRegister(String name , String email , String phone ) throws InterruptedException {
        clearUserTest();
        // 姓名
        driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys(name);
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys(email);

        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(phone);
        // 注册
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();

        if(phone.length() < 11 && phone.length() > 0){
            Thread.sleep(1000);
            Alert alert = driver.switchTo().alert();
            alert.accept();
        }
    }

    private void checkAbnormalRegister(String name , String email , String phone) {
        clearUserTest();
        // 姓名
        driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys(name);
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys(email);

        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys(phone);
        // 注册
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button")).click();
    }

    private void checkUserElement() throws InterruptedException {
        waitPage();
        // 姓名
        //         //*[@id="name"]

        driver.switchTo().frame("contentFrame");
        driver.findElement(By.xpath("//*[@id=\"name\"]"));
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]"));

        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]"));
        // 注册
        driver.findElement(By.xpath("//*[@id=\"registerForm\"]/button"));


    }


    public void waitPage(){
        wait.until(webDriver ->{
            JavascriptExecutor js = (JavascriptExecutor) webDriver;
            return "complete".equals(js.executeScript("return document.readyState"));
        });
    }



    public void clearActivityTest(){
        driver.findElement(By.xpath("//*[@id=\"activityName\"]")).clear();
        driver.findElement(By.xpath("//*[@id=\"description\"]")).clear();
        String prizeText = driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).getText();
        if(prizeText.equals("圈选奖品(已选)")){
            driver.findElement(By.xpath("//*[@id=\"buttonPrizes\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"prize-20\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"prizesModal\"]/div/div[3]/button[2]")).click();
        }

        String userText = driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).getText();
        if(userText.equals("圈选人员(已选)")){
            driver.findElement(By.xpath("//*[@id=\"buttonUsers\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"user-45\"]")).click();
            driver.findElement(By.xpath("//*[@id=\"usersModal\"]/div/div[2]/button[2]")).click();
        }
    }

    // 清空注册人员文本框
    public void clearUserTest(){
        driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
        // 邮箱
        driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();

        // 手机号
        driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
    }

    // 清除奖品文本框
    public void clearPrizeTest(){
        driver.findElement(By.xpath("//*[@id=\"prizeName\"]")).clear();
        // 奖品图片
        driver.findElement(By.xpath("//*[@id=\"prizeImageUrl\"]")).clear();
        // 奖品价格
        driver.findElement(By.xpath("//*[@id=\"price\"]")).clear();
        // 奖品描述
        driver.findElement(By.xpath("//*[@id=\"description\"]")).clear();
    }
    // 退出活动中心页

    public void exit(){
        driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/span")).click();
    }

}

三:性能测试

3.1接口测试

3.1.1管理员用户接口测试

3.1.2普通用户注册接口测试

3.1.3登录接口测试

3.1.4获取活动列表接口测试

3.1.5获取奖品列表接口测试

3.1.6获取人员列表接口测试

3.1.7获取抽奖活动信息接口测试

3.1.8获取抽奖信息接口

3.2负载测试

3.2.1聚合测试

3.2.2每秒事务数

3.2.3响应时间可视化

3.2.4活跃线程数

四:兼容测试

在Edge和chrome浏览器均可以正常打开页面

五:安全测试

1.长时间未操作,会叫你登录。

2.对数据库敏感信息内容进行了加密

六:易用性测试

出现错误时都有弹窗提示

七:总结

在这个项目中需要注意的:邮箱注册必须为qq邮箱,以及短信服务实现不了(阿里云申请个人自用的申请不了现在),后续改进项目用qq邮箱来实现模拟短信接受。以及图片传入的格式种类比较少。以及还缺少可以管理员可以直接删除活动/人员/奖品的功能实现。

相关推荐
老神在在0018 小时前
保姆级教程:Pytest + Allure 接口自动化测试从 0 到 1 完整指南(含环境搭建、用例编写、报告生成、报错排坑全流程)
pycharm·pytest·测试
甜甜圈圈子1 天前
在 Linux 中使用 CAN 通信:从配置到测试与代码实现
测试
测试员周周1 天前
【AI测试功能4】别再用传统等价类设计 AI测试用例了——语义覆盖的四种变体方法
人工智能·python·测试
老神在在0013 天前
测试方法与使用场景
单元测试·测试
Maỿbe4 天前
测试的基本认知
测试
humors2215 天前
十款顶级跑分与排名软件全解析
电脑·内存·测试·cpu·gpu·笔记本·硬盘
狼爷6 天前
JMeter 全指南:从性能测试入门到架构级实战
jmeter·测试
测试员周周7 天前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试
EulerBlind7 天前
接口自测-1777696985
测试