测试目标
项目背景
这是一款可供企业使用的抽奖平台,支持活动创建、人员管理、奖品分配、多轮抽奖流程及实时通知。系统可以承载大量的抽奖请求,保障数据一致性与高并发性能,满足企业营销活动需求。
项目结构
- 管理员模块:登录、注册
- 普通用户模块:用户列表、普通用户注册
- 奖品模块:奖品列表、奖品创建
- 活动模块:活动列表、创建活动
- 抽奖模块:抽奖活动、中奖者页面展示
测试环境
- 操作系统:Windows11
- 浏览器:Chrome
- 测试工具:Selenium、JMeter、postman
测试用例
功能测试
手动测试
登录页面测试
测试场景一:手机号和密码都不填
预期结果:系统提示手机号、密码为空
测试场景二:手机号格式不正确和密码填写正确
预期结果:弹窗提示"登陆失败登录方式不存在"
测试场景三:手机号填写错误和密码填写正确
预期结果:弹窗提醒"登录失败!用户信息为空"
测试场景四:手机号正确,密码错误(密码格式错误)
预期结果:系统提醒"密码长度至少为6个字符"
测试场景五:手机号正确,密码错误(密码格式正确)
预期结果:弹窗提醒"登录失败密码错误"
测试场景六:手机号正确,密码正确
预期结果:跳转到活动中心页

注册管理员用户页面测试
测试场景一:所有都为空
预测场景:系统提示为空
测试场景二:邮箱格式错误,其他正确
预测场景:系统提示请输入有效的邮箱地址
测试场景三:手机号格式错误,其他正确
预期场景:弹窗提醒"注册失败手机号错误"
测试场景四:密码格式错误,其他正确
预测场景:系统提示密码长度至少为6个字符
测试场景五:邮箱被使用过
预测场景:系统提示邮箱被使用

测试场景六:手机号被使用过
预测场景:系统提示手机号被使用

测试场景七:全部正确
预测场景:弹窗"注册成功,点击确定",成功跳转登录页

用户列表页面测试
测试场景一:点击人员列表
预测场景:正常显示人员列表
注册普通用户页面测试
测试场景一:姓名、邮箱和手机号都为空
预期结果:系统提示姓名、邮箱、手机号为空
测试场景二:邮箱格式错误,手机号正确填写
预期结果:系统提示"请输入有效的邮箱地址"
测试场景三:邮箱格式正确、手机号格式不正确
预期结果:弹窗提示"手机号格式问题"
测试场景四:邮箱被使用过
预期结果:系统提示邮箱被使用过

测试场景五:手机号被使用过
预期结果:系统提示手机号被使用过
测试场景六:全部填写正确
预期结果:跳转到人员列表页

奖品列表页测试
测试场景一:点击奖品列表
预测场景:正常显示奖品列表
创建奖品页面测试
测试场景一:全部空着提交
预测场景:弹窗"创建失败"
测试场景二:只填写奖品名称、其他不填
预测场景:弹窗"创建失败"
测试场景三:填写奖品名称、奖品图片,其他不填
预测场景:弹窗"创建失败"
测试场景四:只填写奖品名称、奖品图片、奖品价格,其他不填
预测场景:弹窗"创建失败"
测试场景五:全部正常填写
预测场景:弹窗"创建成功"

活动页面测试
测试场景一:点击活动列表
预测场景:正常显示活动列表
创建活动页面测试
测试场景一:都空着
预测场景:系统提示为空
测试场景二:填写活动名称和奖品描述,未圈选奖品和人员
预测场景:弹窗提醒"请至少选择一个奖品"
测试场景三:填写活动名称和奖品描述,圈选奖品,未圈选人员
预测场景:弹窗提醒"请至少选择一个人员"

测试场景四:填写活动名称和奖品描述,圈选奖品,圈选人员(圈选人员人数比奖品少)
预测场景:弹窗提醒"创建失败!活动关联奖品及人员数量设置异常"

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


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




中奖者展示页面测试
测试用例一:查看抽奖结束后的名单
预期结果:展示名单

自动化测试
驱动类
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 java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
public class Utils {
public static WebDriver driver;
public static WebDriver createDriver(){
if(driver == null){
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
// 允许访问所有的链接
options.addArguments("--remote-allow-orgins=*");
driver = new ChromeDriver(options);
// 等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
public Utils(String url){
// 调用driver对象
driver = createDriver();
// 访问url
driver.get(url);
}
public void getScreenShot(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());
//./src/test/image/2024-07-17/test01-17453020.png
String filename = "./src/test/image/"+ dirTime +"/"+ str + "-" +fileTime +fileTime+".png";
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// srcFile放到指定位置
FileUtils.copyFile(srcFile,new File(filename));
}
}
注册测试类
java
package tests;
import common.Utils;
import org.openqa.selenium.By;
public class RegisterPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/register.html?admin=true";
public RegisterPageTest() {
super(url);
}
// 正常注册
public void checkRegisterPage(){
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("125@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18111111112");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
driver.switchTo().alert().accept();
driver.quit();
}
}
异常注册测试类
java
package tests;
import common.Utils;
import org.openqa.selenium.By;
public class ErrorRegisterPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/register.html?admin=true";
public ErrorRegisterPageTest() {
super(url);
}
public void checkErrorRegisterPage(){
// 姓名为空
driver.findElement(By.cssSelector("#name")).sendKeys("");
driver.findElement(By.cssSelector("#mail")).sendKeys("126@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111131111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 邮箱为空
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111113111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 电话为空
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("126@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 密码为空
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("126@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111113111");
driver.findElement(By.cssSelector("#password")).sendKeys("");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
//邮箱被使用过
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("123@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111113111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 邮箱格式错误
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("123");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111113111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 电话被使用过
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("123");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1311111111111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearElement();
// 电话格式不正确
driver.findElement(By.cssSelector("#name")).sendKeys("张三");
driver.findElement(By.cssSelector("#mail")).sendKeys("123");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1211111111111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#registerForm > button")).click();
driver.quit();
}
// 清空输入的方法
public static void clearElement(){
driver.findElement(By.cssSelector("#name")).clear();
driver.findElement(By.cssSelector("#mail")).clear();
driver.findElement(By.cssSelector("#phoneNumber")).clear();
driver.findElement(By.cssSelector("#password")).clear();
}
}
登录测试
java
package tests;
import common.Utils;
import jdk.jshell.execution.Util;
import org.openqa.selenium.By;
public class LoginPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/blogin.html";
public LoginPageTest() {
super(url);
}
//正常登录
public void checkLogin(){
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18111111112");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#loginForm > button")).click();
}
}
异常登录测试
java
package tests;
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class ErrorLoginPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/blogin.html";
public ErrorLoginPageTest() {
super(url);
}
public void checkErrorLoginPage(){
//手机号为空
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#loginForm > button")).click();
clearElement();
//密码为空
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18111111112");
driver.findElement(By.cssSelector("#password")).sendKeys("");
driver.findElement(By.cssSelector("#loginForm > button")).click();
clearElement();
// 手机号格式错误
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1811111111");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#loginForm > button")).click();
try {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearElement();
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("12111111112");
driver.findElement(By.cssSelector("#password")).sendKeys("123456789");
driver.findElement(By.cssSelector("#loginForm > button")).click();
try {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearElement();
// 密码错误
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18111111112");
driver.findElement(By.cssSelector("#password")).sendKeys("12345678");
driver.findElement(By.cssSelector("#loginForm > button")).click();
try {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearElement();
driver.quit();
}
public void clearElement(){
driver.findElement(By.cssSelector("#phoneNumber")).clear();
driver.findElement(By.cssSelector("#password")).clear();
}
}
活动中心测试
java
package tests;
import common.Utils;
import jdk.jshell.execution.Util;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class ActivityCenterPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/admin.html";
public ActivityCenterPageTest() {
super(url);
}
// 正常添加工作人员
public void checkPersonnelManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("#register")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
driver.switchTo().frame("contentFrame");
driver.findElement(By.xpath("//*[@id=\"name\"]")).sendKeys("黄蓉");
driver.findElement(By.xpath("//*[@id=\"mail\"]")).sendKeys("234@qq.com");
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).sendKeys("13141111111");
driver.findElement(By.cssSelector("#registerForm > button")).click();
System.out.println(driver.getTitle());
driver.quit();
}
// 正常添加奖品
public void checkPrizeManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("body > div.cont-box > div.sidebar > ul > li:nth-child(2) > ul > li:nth-child(2) > a")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
driver.switchTo().frame("contentFrame");
driver.findElement(By.cssSelector("#prizeName")).sendKeys("相机");
driver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys("D:/PIC/prize.jpg");
driver.findElement(By.cssSelector("#price")).sendKeys("2200");
driver.findElement(By.cssSelector("#description")).sendKeys("索尼相机");
driver.findElement(By.cssSelector("body > div > button")).click();
driver.switchTo().alert().accept();
System.out.println(driver.getTitle());
}
// 活动管理测试
public void checkActivityManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("#createActivity")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
//活动名称和描述
driver.switchTo().frame("contentFrame");
driver.findElement(By.cssSelector("#activityName")).sendKeys("测试");
driver.findElement(By.cssSelector("#description")).sendKeys("测试测试");
//圈选奖品
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).clear();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).sendKeys("2");
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//圈选人员
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
//处理弹窗
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
}
}
异常活动中心测试
java
package tests;
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
public class ErrorActivityCenterPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/admin.html";
public ErrorActivityCenterPageTest() {
super(url);
}
public void checkErrorPersonnelManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("#register")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
driver.switchTo().frame("contentFrame");
// 名字为空
driver.findElement(By.cssSelector("#name")).sendKeys("");
driver.findElement(By.cssSelector("#mail")).sendKeys("235@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("13141111112");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearPersonalElement();
//邮箱为空
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("13141111112");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearPersonalElement();
//手机为空
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("235@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearPersonalElement();
//邮箱格式不正确
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("123");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("13141111112");
driver.findElement(By.cssSelector("#registerForm > button")).click();
clearPersonalElement();
//手机格式不正确
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("345@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("1314111111");
driver.findElement(By.cssSelector("#registerForm > button")).click();
try {
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPersonalElement();
//邮箱被使用过
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("123@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("13141111112");
driver.findElement(By.cssSelector("#registerForm > button")).click();
try {
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPersonalElement();
//手机被使用过
driver.findElement(By.cssSelector("#name")).sendKeys("李四");
driver.findElement(By.cssSelector("#mail")).sendKeys("321@qq.com");
driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("13111111111");
driver.findElement(By.cssSelector("#registerForm > button")).click();
try {
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPersonalElement();
}
//清空添加人员的方法
public void clearPersonalElement(){
driver.findElement(By.xpath("//*[@id=\"name\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"mail\"]")).clear();
driver.findElement(By.xpath("//*[@id=\"phoneNumber\"]")).clear();
}
// 测试异常添加奖品的方法
public void checkErrorPrizeManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("body > div.cont-box > div.sidebar > ul > li:nth-child(2) > ul > li:nth-child(2) > a")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
driver.switchTo().frame("contentFrame");
// 没有奖品名称
driver.findElement(By.cssSelector("#prizeName")).sendKeys("");
driver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys("D:/PIC/prize.jpg");
driver.findElement(By.cssSelector("#price")).sendKeys("2200");
driver.findElement(By.cssSelector("#description")).sendKeys("索尼相机");
driver.findElement(By.cssSelector("body > div > button")).click();
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPrizeElement();
// 没有照片
driver.findElement(By.cssSelector("#prizeName")).sendKeys("相机");
driver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys("");
driver.findElement(By.cssSelector("#price")).sendKeys("2200");
driver.findElement(By.cssSelector("#description")).sendKeys("索尼相机");
driver.findElement(By.cssSelector("body > div > button")).click();
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPrizeElement();
// 没有价格
driver.findElement(By.cssSelector("#prizeName")).sendKeys("相机");
driver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys("D:/PIC/prize.jpg");
driver.findElement(By.cssSelector("#price")).sendKeys("");
driver.findElement(By.cssSelector("#description")).sendKeys("索尼相机");
driver.findElement(By.cssSelector("body > div > button")).click();
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPrizeElement();
// 没有奖品描述
driver.findElement(By.cssSelector("#prizeName")).sendKeys("相机");
driver.findElement(By.cssSelector("#prizeImageUrl")).sendKeys("D:/PIC/prize.jpg");
driver.findElement(By.cssSelector("#price")).sendKeys("2200");
driver.findElement(By.cssSelector("#description")).sendKeys("");
driver.findElement(By.cssSelector("body > div > button")).click();
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearPrizeElement();
}
public void clearPrizeElement(){
driver.findElement(By.cssSelector("#prizeName")).clear();
driver.findElement(By.cssSelector("#prizeImageUrl")).clear();
driver.findElement(By.cssSelector("#price")).clear();
driver.findElement(By.cssSelector("#description")).clear();
}
// 异常活动管理测试
public void checkErrorActivityManagement(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("#createActivity")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
//没有活动名称
//活动名称和描述
driver.switchTo().frame("contentFrame");
driver.findElement(By.cssSelector("#description")).sendKeys("测试测试");
//圈选奖品
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).clear();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).sendKeys("2");
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//圈选人员
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
clearActivityElements();
//没有活动描述
//活动名称和描述
driver.findElement(By.cssSelector("#activityName")).sendKeys("测试");
driver.findElement(By.cssSelector("#description")).sendKeys("");
//圈选奖品
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).clear();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).sendKeys("2");
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//圈选人员
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
clearActivityElements();
//没有圈选奖品
driver.findElement(By.cssSelector("#activityName")).sendKeys("测试");
driver.findElement(By.cssSelector("#description")).sendKeys("测试测试");
//圈选奖品
//圈选人员
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
//处理弹窗
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearActivityElements();
//没有圈选人员
driver.findElement(By.cssSelector("#activityName")).sendKeys("测试");
driver.findElement(By.cssSelector("#description")).sendKeys("测试测试");
//圈选奖品
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).clear();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).sendKeys("2");
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//圈选人员
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
//处理弹窗
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearActivityElements();
//奖品数量 > 人员数量
driver.findElement(By.cssSelector("#activityName")).sendKeys("测试");
driver.findElement(By.cssSelector("#description")).sendKeys("测试测试");
//圈选奖品
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > select")).click();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).clear();
driver.findElement(By.cssSelector("#prizesContainer > div:nth-child(1) > input.form-control")).sendKeys("3");
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//圈选人员
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
//创建活动
driver.findElement(By.cssSelector("#createActivity")).click();
//处理弹窗
try {
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
// 处理弹窗
System.out.println("弹窗文本: " + alert.getText());
alert.accept(); // 或 alert.dismiss()
} catch (TimeoutException e) {
System.out.println("10秒内未检测到弹窗");
}
clearActivityElements();
driver.quit();
}
public void clearActivityElements(){
driver.findElement(By.cssSelector("#activityName")).clear();
driver.findElement(By.cssSelector("#description")).clear();
driver.findElement(By.cssSelector("#buttonPrizes")).click();
driver.findElement(By.cssSelector("#prize-20")).click();
driver.findElement(By.cssSelector("#prize-21")).click();
driver.findElement(By.cssSelector("#prizesModal > div > div.form-btn-box > button.btn.btn-primary")).click();
driver.findElement(By.cssSelector("#buttonUsers")).click();
driver.findElement(By.cssSelector("#user-44")).click();
driver.findElement(By.cssSelector("#user-42")).click();
driver.findElement(By.cssSelector("#user-41")).click();
driver.findElement(By.cssSelector("#usersModal > div > div.form-btn-box > button.btn.btn-primary")).click();
}
}
抽奖测试
java
package tests;
import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import java.util.Set;
public class LotteryPageTest extends Utils {
private static String url = "http://106.52.188.165:8081/admin.html";
public LotteryPageTest() {
super(url);
}
public void checkLotterySystem(){
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
driver.findElement(By.cssSelector("#activitiesList")).click();
wait.until(webDriver ->{
JavascriptExecutor js = (JavascriptExecutor) webDriver;
return "complete".equals(js.executeScript("return document.readyState"));
});
driver.switchTo().frame("contentFrame");
String preHandle = driver.getWindowHandle();
driver.findElement(By.cssSelector("#activities > div:nth-child(2) > div.active > p > a")).click();
Set<String> windowHandles = driver.getWindowHandles();
for (String curHandler:windowHandles){
if(curHandler != preHandle){
driver.switchTo().window(curHandler);
}
}
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.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.quit();
}
}
执行测试
java
import tests.*;
public class RunTest {
public static void main(String[] args) {
// 正常注册测试
// RegisterPageTest registerPageTest = new RegisterPageTest();
// registerPageTest.checkRegisterPage();
// 异常注册测试
// ErrorRegisterPageTest errorRegisterPageTest = new ErrorRegisterPageTest();
// errorRegisterPageTest.checkErrorRegisterPage();
// 正常登陆测试
LoginPageTest loginPageTest = new LoginPageTest();
loginPageTest.checkLogin();
// 异常登录测试
// ErrorLoginPageTest errorLoginPageTest = new ErrorLoginPageTest();
// errorLoginPageTest.checkErrorLoginPage();
// 活动中心测试
// ActivityCenterPageTest activityCenterPageTest = new ActivityCenterPageTest();
// 人员管理测试
// activityCenterPageTest.checkPersonnelManagement();
// 奖品管理测试
// activityCenterPageTest.checkPrizeManagement();
// 活动管理测试
// activityCenterPageTest.checkActivityManagement();
// 异常活动中心测试
// ErrorActivityCenterPageTest errorActivityCenterPageTest = new ErrorActivityCenterPageTest();
// 异常人员管理测试
// errorActivityCenterPageTest.checkErrorPersonnelManagement();
// 异常奖品管理测试
// errorActivityCenterPageTest.checkErrorPrizeManagement();
// 异常活动管理测试
// errorActivityCenterPageTest.checkErrorActivityManagement();
// 抽奖测试
LotteryPageTest lotteryPageTest = new LotteryPageTest();
lotteryPageTest.checkLotterySystem();
}
}
性能测试
使用Jmeter对项目进行测试
接口测试
管理员注册接口测试
普通用户注册接口测试
密码登录接口测试
获取活动列表接口测试
获取奖品列表接口测试
获取人员列表接口测试
获取抽奖活动页列表
获取中奖信息
展示中奖信息
负载测试
聚合报告
TPS
响应时间
活跃线程
性能报告







兼容性测试
测试场景一:在Edge浏览器中打开好运buff机
预期场景:正常打开






测试场景二:在MAC(UNIX操作系统下)中打开好运buff机
预期场景:正常打开





安全测试
长时间未操作,要求用户重新登录

手机号、账号密码进行加密存储
易用性测试
错误有引导,反馈清晰


测试总结
问题点
有些错误提示直接把异常抛给用户
错误提示不统一(一种弹窗,一种系统提示)

总结
本次测试总体来说还是比较顺利的,但是程序还有一些次要等级的bug需要处理
