一、项目背景
被测对象是一个抽奖管理系统,部署在 http://1.14.192.17:8080/。支持管理员登录、人员管理、活动管理、奖品管理、抽奖与中奖记录等功能。
1、 测试范围
本次测试涵盖了抽奖系统的核心生命周期,具体包括:
• 功能测试:验证注册、登录、奖品创建、活动创建及抽奖等业务逻辑。
• 界面测试 (UI):检查注册,登录,奖品列表页面的布局与交互。
• 接口测试:利用 Postman 针对活动创建等核心接口进行协议级校验。
• 自动化测试:基于 Pytest + Selenium 实现核心高频场景的自动化回归。
2、 需求分析
- 登录/认证模块
-
密码登录:正常登录、错误密码、空字段、不存在的账号
-
邮箱验证码登录:验证码为空、未获取验证码直接输入
-
权限校验:未登录访问需认证接口(越权检测)
- 用户模块(管理员管理普通用户)
-
注册:正常注册(管理员/普通用户)、空字段、重复手机号/邮箱
-
安全边界:XSS 注入、超长名称、特殊字符
-
人员列表:分页查询、无权限访问
- 奖品模块
-
创建奖品:正常创建、名称为空、价格为负数(未校验 BUG)、图片上传
-
奖品列表:分页查询、page=0 边界(SQL 泄露 BUG)
- 活动链路
-
创建活动:正常创建、空字段、不存在的奖品/人员关联
-
活动列表:分页组件浏览
-
活动详情:正常查询、activityId=0/-1
- 抽奖核心链路
-
执行抽奖:缺少参数拒绝、不存在的活动 ID
-
中奖记录:正常查询、不存在的活动、越权访问
二、设计测试用例
1.功能测试---验证每个接口的请求/响应逻辑是否正确
2.界面测试---验证页面元素可见、表单填写、弹窗交互
-
兼容性--- 用 Selenium Grid 或不同 WebDriver 跑 Firefox/Edge,确认核心流程不因浏览器差异而失败
-
性能测试---抽奖活动场景下多人同时抽奖的并发情况,用 Locust 或 JMeter 压一下抽奖接口
-
安全性测试 ---隐私数据是否明文显示,参数未校验导致sql注入,越权操作等
接下来主要讲自动化测试项目基于 pytest 框架,采用接口自动化(API)+ 浏览器自动化(GUI) 双层覆盖策略。
1、功能测试
验证每个接口的请求/响应逻辑是否正确
1. 登录 /blogin.html
文件: test_blogin.py --- 2 个接口,15 条用例

2. 注册 /register
文件: test_register.py --- 1 个接口,10 条用例
3. 人员列表 /base-user/find-list
文件: test_list.py --- 1 个接口,2 条用例

4. 活动列表 /activity/find-list
文件: test_activity_list.py --- 1 个接口,3 条用例

5. 创建活动 /activity/create
文件: test_activity_create.py --- 1 个接口,10 条用例

6. 奖品列表 /prize/find-list
文件: test_prize_list.py --- 1 个接口,3 条用例

7. 创建奖品 /prize/create(multipart/form-data)
文件: test_prize_create.py --- 1 个接口,9 条用例

8. 抽奖相关(3 个接口)
文件: test_draw.py --- 3 个接口,11 条用例
/activity-detail/find GET 4个用例
/winning-records/show POST 4个用例

/winning-records/show POST 3个用例

2、界面测试
1. 登录页 blogin.html
文件: test_login.py --- 1 个页面,8 条用例

2. 活动管理
activities-list.html / create-activity.html
文件: test_activity.py — 2 个页面,5 条用例

3. 奖品管理 prizes-list.html / create-prizes.html

4. 抽奖页面 activities-list.html / user-list.html

三、测试统计
1.缺陷统计
发现的 BUG 汇总
1. 注册接口 XSS 脚本未过滤(存储型 XSS)
2. 活动/奖品列表 currentPage=0 暴露 SQL 语法错误和表结构
3. 活动详情 activityId=0/-1 暴露完整 SQL 异常堆栈
4. 邮箱+未获取验证码+输入验证码错误暴露 NPE 空指针异常
5. Emoji 名称导致 SQL 字符集异常
6. 超长名称暴露 SQL Data truncation
7. 不存在的活动 ID 抽奖返回 200
8. 奖品价格为负数未校验,可成功入库
