异步抽奖系统测试报告

目录

一、项目简介

1.1项目背景

1.2功能模块

二、测试

一)功能测试

二)自动化测试

1.准备工作

2.登录模块测试

3.人员模块测试

4.奖品模块测试

5.活动模块测试

6.测试的结果

​编辑


一、项目简介

1.1项目背景

(1)异步抽奖系统是基于Spring Boot框架开发的一个轻量级抽奖管理系统,部署于云服务器以实现远程访问与高效运行。系统通过前后端分离架构,支持快速配置抽奖活动、管理奖品及用户信息,并提供抽奖结果公示功能,旨在为用户提供一个灵活、可靠的活动管理工具。

(2)但是该项目用户信息,奖品图片等信息配置为静态数据,无法动态上传或修改;并且缺乏动态抽奖策略(如实时概率调整)、删除抽奖活动等功能;而奖品剩余数量、用户参与次数等关键数据未与前端实时同步,以静态文本展示。

(3)该抽奖系统支持用户和奖品的管理、活动创建和配置、抽奖逻辑、数据库存储和部署等功能。

1.2功能模块

(1)人员业务模块:管理员注册、登录,以及普通用户的创建。

(2)活动业务模块:活动管理及活动状态管理。

(3)奖品业务模块:奖品管理与奖品分配,还包括奖品图的上传。

(4)通知业务模块:发送短信、邮件等业务,例如验证码发送,中奖通知。

(5)抽奖业务模块:完成抽奖动作,以及抽奖后的结果展示。

二、测试

一)功能测试

1.测试用例

2.测试界面

 管理员登录注册页面:

异步抽奖系统测试报告_第1张图片

系统主界面: 

异步抽奖系统测试报告_第2张图片

 中奖页面:

功能测试结果:测试用例100%通过 

二)自动化测试
1.准备工作

(1)在IDEA创建Maven项目,安装驱动管理,导入pom.xml相关依赖



    4.0.0

    org.example
    seleniumAutoTest
    1.0-SNAPSHOT

    
        
            io.github.bonigarcia
            webdrivermanager
            5.8.0
            test
        
        
            org.seleniumhq.selenium
            selenium-java
            4.0.0
        
        
        
            org.junit.platform
            junit-platform-suite
            1.9.1
        
        
        
            org.junit.jupiter
            junit-jupiter-engine
            5.9.1
            test
        

        
        
            org.junit.jupiter
            junit-jupiter-params
            5.9.1
        
        
        
            org.junit.jupiter
            junit-jupiter-api
            5.9.1
        
    
    
        17
        17
    

(2)创建一个类来初始化和释放浏览器驱动

package LotteryTest;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class InitAndEnd {
    protected static WebDriver webDriver = null;

    //初始化
    @BeforeAll
    static void init() {
        WebDriverManager.chromedriver().setup();
        //增加浏览器配置,创建驱动对象要强制指定允许访问所有的链接
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        webDriver = new ChromeDriver(options);
    }
    //结束
    @AfterAll
    static void end() {
        webDriver.quit();
    }
}
2.登录模块测试

(1)登录成功测试:输入正确的账号和密码,判断页面是否进行了跳转

(2)登录失败测试:输入错误的账号密码,判断提示框是否提示“登录失败!密码错误”

(3)登录异常测试:不输入账号密码,点击登录,判断是否会提示“请输入账号"/”请输入密码"

package LotteryTest;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Login extends InitAndEnd {
    @Order(1)
    @ParameterizedTest
    @CsvSource(value = {"15111111111,123456789"})
        //登录成功界面测试
    void loginSuccess(String phone, String password) throws InterruptedException {
        //进入登录页面
        InitAndEnd.webDriver.get("http://116.205.190.134:8080/blogin.html");
        sleep(1000);
        //输入账号(手机号/邮箱号)
        InitAndEnd.webDriver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phone);
        //输入密码
        InitAndEnd.webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        sleep(1000);
        //点击登录
        InitAndEnd.webDriver.findElement(By.cssSelector("#loginForm > button")).click();
        sleep(1000);
        //获取当前页面的url
        String currentUrl = InitAndEnd.webDriver.getCurrentUrl();
        //判断当前页面的url是否为登录完成后的主界面
        Assertions.assertEquals("http://116.205.190.134:8080/admin.html",currentUrl);
        sleep(1000);
    }
    @Order(2)
    @ParameterizedTest
    @CsvSource(value = {"15111111111,123455789"})
    //登录失败
    void loginFailed(String phone, String password) throws InterruptedException {
        //进入登录页面
        webDriver.get("http://116.205.190.134:8080/blogin.html");
        sleep(1000);
        //填写手机号与密码
        webDriver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phone);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        sleep(1000);
        //点击登录
        webDriver.findElement(By.cssSelector("#loginForm > button")).click();
        sleep(1000);
        //获取提示框内容
        String text = webDriver.switchTo().alert().getText();
        System.out.println("alertText: " + text);
        //断言提示框内容是
        Assertions.assertEquals("登录失败!密码错误",text);
        //确定提示框
        webDriver.switchTo().alert().accept();
        sleep(1000);
    }
    @Order(3)
    @Test //无参数
    void loginError() throws InterruptedException {
        //进入登录页面
        webDriver.get("http://116.205.190.134:8080/blogin.html");
        sleep(1000);
        //点击登录
        webDriver.findElement(By.cssSelector("#loginForm > button")).click();
        sleep(1000);
        //获取手机号提示
        String phoneError = webDriver
                .findElement(By.cssSelector("#phoneNumber-error")).getText();
        System.out.println("phoneError: " + phoneError);
        Assertions.assertEquals("请输入您的手机号",phoneError);
        //获取密码提示
        String passwordError = webDriver
                .findElement(By.cssSelector("#password-error")).getText();
        System.out.println("passwordError: " + passwordError);
        Assertions.assertEquals("请输入密码",passwordError);
    }
}
3.人员模块测试

(1)用户的注册的测试:判断是否是注册页面,如果是输入注册的用户信息,点击注册,看跳转的用户列表的第一个是不是新注册的用户

注意:

<1>需要提前登录以后才能进行测试

<2>如果要操作 iframe 内部的元素,必须先切换到该 iframe

<3>sleep(1000)可能不太够,页面还没加载出来,可以设置为3s

package LotteryTest;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class User extends InitAndEnd {

    @BeforeEach
    void login() throws InterruptedException {
        Login login = new Login();
        login.loginSuccess("15111111111","123456789");
    }

    @ParameterizedTest
    @CsvSource(value = {"王五,17770654922,[email protected]"})
    void registerSuccess(String name,String phone,String mail) throws InterruptedException {
        //点击注册用户按钮
        webDriver.findElement(By.cssSelector("#register")).click();
        sleep(3000);//时间不够加载不出来

        //进入iFrame
        inIFrame("contentFrame");

        //获取标题
        String title = webDriver.findElement(By.cssSelector("body > div > h2")).getText();
        System.out.println("title: " + title);
        Assertions.assertEquals("填写注册信息",title);

        //填写注册信息
        webDriver.findElement(By.cssSelector("#name")).sendKeys(name);
        webDriver.findElement(By.cssSelector("#phoneNumber")).sendKeys(phone);
        webDriver.findElement(By.cssSelector("#mail")).sendKeys(mail);
        //点击注册
        webDriver.findElement(By.cssSelector("#registerForm > button")).click();
        sleep(1000);

        //获取标题
        String newTitle = webDriver.findElement(By.cssSelector("body > div > h2")).getText();
        System.out.println("title: " + newTitle);
        Assertions.assertEquals("人员列表",newTitle);

        //获取第一个用户的名字,并进行判断
        String getName = webDriver.findElement(By
                        .cssSelector("#userList > tr:nth-child(1) > td:nth-child(2)"))
                .getText();
        System.out.println("userName: " + getName);
        Assertions.assertEquals("王五",getName);

        //退出iFrame
        outIFrame();
    }


    //如果要操作 iframe 内部的元素,必须先切换到该 iframe
    private void inIFrame(String id){
        webDriver.switchTo().frame(id);
    }
    private void outIFrame(){
        webDriver.switchTo().defaultContent();
    }

}
4.奖品模块测试

(1)创建奖品测试:点击创建奖品按钮,判断当前页面是否是创建奖品的页面;然后填写奖品信息,创建奖品,判断提示框是否有“奖品创建成功"的提示,然后点击提示框的确定

package LotteryTest;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Prize extends InitAndEnd {

    @BeforeEach
    void login() throws InterruptedException {
        Login login = new Login();
        login.loginSuccess("15111111111","123456789");
    }

    @ParameterizedTest
    @CsvSource(value = {"企鹅,C:\\Users\\刘翼\\Pictures\\Saved Pictures\\OIP-C (1).jpg,87,企鹅玩偶"})
    void createPrizeSuccess(String name,String pwd,String value,String desc) throws InterruptedException {
        //点击创建奖品按钮
        webDriver.findElement(By.cssSelector("body > div.cont-box > div.sidebar > ul > li:nth-child(2) > ul > li:nth-child(2) > a")).click();
        sleep(1000);
        inIFrame("contentFrame");
        sleep(1000);
        //获取标题
        String title = webDriver.findElement(By.cssSelector("body > div > h2")).getText();
        System.out.println("title: " + title);
        Assertions.assertEquals("开始创建奖品",title);
        //填写信息
        webDriver.findElement(By.cssSelector("#prizeName")).sendKeys(name);
        webDriver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys(pwd);
        webDriver.findElement(By.cssSelector("#price")).sendKeys(value);
        webDriver.findElement(By.cssSelector("#description")).sendKeys(desc);
        sleep(1000);
        //点击创建奖品
        webDriver.findElement(By.cssSelector("body > div > button")).click();
        sleep(1000);
        //获取提示信息,并进行判断
        String text = webDriver.switchTo().alert().getText();
        System.out.println("alertText: " + text);
        Assertions.assertEquals("奖品创建成功!",text);

        webDriver.switchTo().alert().accept();
        sleep(1000);

        outIFrame();
    }

    //如果要操作 iframe 内部的元素,必须先切换到该 iframe
    private void inIFrame(String id){
        webDriver.switchTo().frame(id);
    }
    private void outIFrame(){
        webDriver.switchTo().defaultContent();
    }
}
5.活动模块测试

(1)创建活动测试:点击创建活动,填写活动信息,接着圈选奖品(个数,等级),圈选人员,点击创建,看提示框是否出现”创建成功“

(2)查看活动列表测试:点击活动列表,先判断标题是否是活动列表,再判断第一个活动名称是否匹配

(3)查看获奖列表测试:点击进入活动列表界面,点击查看中奖名单,切换句柄到中奖列表页,判断是否有“中奖名单”字样,最后回到主页面

(4)分享抽奖结果测试:进入分享结果都界面,判断是否有中奖名单,然后点击分享按钮,判断是否出现”链接已复制到粘贴板"

package LotteryTest;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.Select;

import java.util.Set;

import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Activity extends InitAndEnd {

    //分享结果是无需登录的,所以这里不需要加注解
    void login() throws InterruptedException {
        Login login = new Login();
        login.loginSuccess("15111111111","123456789");
    }

    @Order(1)
    @Test
    void createActivity() throws InterruptedException {
        login();
        //点击新建抽奖活动按钮
        webDriver.findElement(By.cssSelector("#createActivity")).click();
        sleep(1000);
        inIFrame("contentFrame");
        sleep(1000);
        //填写信息
        webDriver.findElement(By.cssSelector("#activityName")).sendKeys("年度晚会");
        webDriver.findElement(By.cssSelector("#description")).sendKeys("星光璀璨夜,共襄年度盛宴");
        //圈选奖品
        webDriver.findElement(By.cssSelector("#buttonPrizes")).click();
        webDriver.findElement(By.cssSelector("#prize-19")).click();
        Select select1 = new Select(webDriver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")));
        select1.selectByValue("FIRST_PRIZE");
        webDriver.findElement(By.cssSelector("#prize-22")).click();
        Select select2 = new Select(webDriver.findElement(By.cssSelector("#prizesContainer > div:nth-child(2) > select")));
        select2.selectByValue("SECOND_PRIZE");
        //点击确定
        webDriver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();

        //圈选人员
        webDriver.findElement(By.cssSelector("#buttonUsers")).click();
        webDriver.findElement(By.cssSelector("#user-45")).click();
        webDriver.findElement(By.cssSelector("#user-43")).click();
        webDriver.findElement(By.cssSelector("#user-41")).click();
        //点击确定
        webDriver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();

        //点击创建
        webDriver.findElement(By.cssSelector("#createActivity")).click();
        sleep(1000);
        //获取提示框内容,并进行断言
        String tip = webDriver.switchTo().alert().getText();
        System.out.println("alertText: " + tip);
        Assertions.assertEquals("创建成功!",tip);

        webDriver.switchTo().alert().accept();
        sleep(3000);
        outIFrame();
    }

    @Order(2)
    @Test
    void checkActivityList() throws InterruptedException {
        login();
        webDriver.findElement(By.cssSelector("#activitiesList")).click();
        sleep(1000);
        inIFrame("contentFrame");
        sleep(1000);
        //获取标题
        String title = webDriver.findElement(By.cssSelector("body > div > h2")).getText();
        System.out.println("title: " + title);
        Assertions.assertEquals("活动列表",title);
        //获取第一个活动标题
        String activity = webDriver.findElement(By
                .cssSelector("#activities > div:nth-child(1) > div.activity-info > h4")).getText();
        System.out.println("activity: " + activity);
        Assertions.assertEquals("年度晚会",activity);

        outIFrame();
    }


    @Order(3)
    @Test
    void checkWinnerList() throws InterruptedException {
        //进入活动列表页面
        Activity activity = new Activity();
        activity.checkActivityList();
        inIFrame("contentFrame");

        //点击查看中奖名单
        webDriver.findElement(By
                .cssSelector("#activities > div:nth-child(2) > div.inactive > p > a")).click();
        //切换到中奖列表页
        Set windowHandles = webDriver.getWindowHandles();
        String handle = webDriver.getWindowHandle();
        for (String w:windowHandles) {
            if (!w.equals(handle)){
                webDriver.switchTo().window(w);
                break;
            }
        }
        sleep(1000);

        String title = webDriver.findElement(By.cssSelector("#disc")).getText();
        System.out.println("title: " + title);
        Assertions.assertEquals("中奖名单",title);

        //切换回主页面
        webDriver.switchTo().window(handle);
        outIFrame();
    }

    @Order(4)
    @Test
    //分享中奖名单测试
    void shareWinnerList() throws InterruptedException {
        webDriver.get("http://116.205.190.134:8080/draw.html?activityName=%E5%B9%B4%E4%BC%9A%E6%8A%BD%E5%A5%96&activityId=25&valid=false");
        sleep(1000);
        String title = webDriver.findElement(By.cssSelector("#disc")).getText();
        System.out.println("title: " + title);
        Assertions.assertEquals("中奖名单",title);

        //点击分享结果按钮
        webDriver.findElement(By.cssSelector("#container > div.opt-box > span.btn.copy-btn")).click();
        sleep(1000);
        String tip = webDriver.switchTo().alert().getText();
        System.out.println("alertText: " + tip);
        Assertions.assertEquals("链接已复制到剪贴板",tip);
        webDriver.switchTo().alert().accept();
    }
}
6.测试的结果

(1)登录模块

异步抽奖系统测试报告_第3张图片

(2)人员模块

(3)奖品模块

异步抽奖系统测试报告_第4张图片

(4)活动模块

异步抽奖系统测试报告_第5张图片

你可能感兴趣的:(测试工具)