蓝桥杯软件测试-十五届模拟赛2期题目解析
十五届蓝桥杯《软件测试》模拟赛2期题目解析
PS 需要第十五界蓝桥杯模拟赛2期功能测试模板、单元测试被测代码、自动化测试被测代码请加🐧:1940787338 备注:15界蓝桥杯省赛软件测试模拟赛2期
题目1:功能测试题目 1(测试用例)(12分)
【题目描述】
请使用 正交实验法 对【系统管理】–>【岗位管理】页面中 搜索组合条件 进行测试用例的设计(参照功能截图),请选用合适的正交表使组合条件达到全面覆盖。
并把用例填写在【模拟赛2期测试用例.xlsx】用例文件中的【题目1-正交法测试用例】中。如下图所示:
【功能模块】
- 一级功能:岗位管理
- 二级功能:搜索
【功能截图】
题目1:解题思路
首先,根据正交表规则,我们先确定,水平 和 因素,
在本道题中, 因素就是:岗位编码、岗位名称、岗位状态 也就是被考查的东西,叫因素
水平就有:填(1) 不填 (2) 这两个是 岗位编码和岗位名称的 水平 所有(1) 正常(2) 停用(3) 这是 岗位状态的水平 被考查的值 叫水平
其中 L 代表正交表 L 下角的数字“n”表示有 n 横行,简称行,即正交设计的数量 S 水平数 c 因素数 选择正交表时如果没有合适的 要往大的取,删除多的列即可。
在本道题中 Ln = 3^3 = 9
然后咱们找到最合适的正交表,有多的列,删去即可
第 1 步:请填写所选用的正交表: 1 2 3 4 1 1 1 1 1 2 1 2 2 2 3 1 3 3 3 4 2 1 2 3 5 2 2 3 1 6 2 3 1 2 7 3 1 3 2 8 3 2 1 3 9 3 3 2 1 第 2 步:请把【因素】和【水平】映射到正交表中。(请自行在表格中添加所需的行) 因素 / 用例 岗位编码 岗位名称 岗位状态 1 填 填 所有 2 填 不填 正常 3 填 不填 停用 4 不填 填 正常 5 不填 不填 停用 6 不填 不填 所有 7 不填 填 停用 8 不填 不填 所有 9 填 填 正常 题目2:功能测试题目 2(测试用例)(18 分):
【题目描述】
请根据需求描述,综合使用测试用例的设计方法对【系统管理】–>【岗位管理】–>【添加岗位】页面中的功能进行测试用例的设计。请设计足够的测试用例达到该方法的有效覆盖。
【功能模块】
- 一级功能:岗位管理
- 二级功能:添加岗位
【功能截图】
【添加岗位 需求描述】
功能点 需求描述 岗位名称 输入框 必填,1~6 位,中文\数字\它们的组合,不允许重复 岗位编码 输入框 必填,1~6 位,英文\数字\它们的组合,不允许重复 显示顺序 输入框 必填,输入整数,岗位列表按显示顺序进行排列 岗位状态 输入框 正常、停用。选择停用,在添加用户时则不可选该岗位 备注 输入框 0~200 字。 题目2:解题思路
根据等价类/边界值原则设置用例即可,设计20条就够了,不用超过20条
用例编号 一级功能 二级功能 前置条件 用例标题 操作步骤 测试数据 预期结果 用例优先级 GWGL-TJGW-001 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 正常添加岗位信息(所有项输入正确) 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称1 岗位编码:code1 显示顺序:1 岗位状态:正常 备注:备注1 添加成功 提示:操作成功 高 GWGL-TJGW-002 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 不输入【岗位名称】(为空),进行添加岗位 1. 输入为空的【岗位名称】(为空); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称: 岗位编码:code2 显示顺序:2 岗位状态:正常 备注:备注2 添加失败 提示:岗位名称必填 中 GWGL-TJGW-003 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入大于6位的【岗位名称】,进行添加岗位 1. 输入错误的【岗位名称】(7位字符); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:一二三四五六七 岗位编码:code3 显示顺序:3 岗位状态:正常 备注:备注3 添加失败 提示:岗位名称1~6 位,中文\数字\它们的组合 中 GWGL-TJGW-004 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入1位的【岗位名称】,进行添加岗位 1. 输入错误的【岗位名称】(1位字符); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:一 岗位编码:code3 显示顺序:3 岗位状态:正常 备注:备注3 添加成功 提示:操作成功 高 GWGL-TJGW-005 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入含有特殊字符的【岗位名称】,进行添加岗位 1. 输入错误的【岗位名称】(含有特殊字符); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:一二三$% 岗位编码:code4 显示顺序:4 岗位状态:正常 备注:备注4 添加失败 提示:岗位名称1~6 位,中文\数字\它们的组合 中 GWGL-TJGW-006 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入中文和数字组合的【岗位名称】,进行添加岗位 1. 输入错误的【岗位名称】(中文和数字组合); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:1二3四5六 岗位编码:code5 显示顺序:5 岗位状态:正常 备注:备注5 添加成功 提示:操作成功 高 GWGL-TJGW-007 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入重复(已存在)的【岗位名称】,进行添加岗位 1. 输入错误的【岗位名称】(已存在的); 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:1二3四5六 岗位编码:code6 显示顺序:7 岗位状态:正常 备注:备注6 添加失败 提示:【岗位名称】已存在 中 GWGL-TJGW-008 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 不输入【岗位编码】(为空),进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入错误的【岗位编码】(为空); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称8 岗位编码: 显示顺序:8 岗位状态:正常 备注:备注7 添加失败 提示:岗位编码必填 中 GWGL-TJGW-009 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入大于6位的【岗位编码】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入错误的【岗位编码】(7位字符); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称9 岗位编码:1234567 显示顺序:7 岗位状态:正常 备注:备注8 添加失败 提示:岗位编码1~6 位,英文\数字\它们的组合 中 GWGL-TJGW-010 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入含有特殊字符的【岗位编码】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入错误的【岗位编码】(含有特殊字符); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:1二3四5六 岗位编码:ab$5% 显示顺序:7 岗位状态:正常 备注:备注9 添加失败 提示:岗位编码1~6 位,英文\数字\它们的组合 中 GWGL-TJGW-011 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入英文和数字组合的【岗位编码】,进行添加岗位 1. 输入错误的【岗位名称】; 2. 输入错误的【岗位编码】(英文和数字组合); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称10 岗位编码:ab123 显示顺序:7 岗位状态:正常 备注:备注10 添加成功 提示:操作成功 高 GWGL-TJGW-012 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入1位【岗位编码】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入错误的【岗位编码】(1位字符); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称188 岗位编码:a 显示顺序:7 岗位状态:正常 备注:备注10 添加成功 提示:操作成功 高 GWGL-TJGW-013 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入重复(已存在)的【岗位编码】,进行添加岗位 1.输入正确的【岗位名称】; 2. 输入错误的【岗位编码】(已存在的); 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称11 岗位编码:ab123 显示顺序:7 岗位状态:正常 备注:备注11 添加失败 提示:【岗位编码】已存在 中 GWGL-TJGW-014 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 不输入【显示顺序】(为空),进行添加岗位 1. 输入错误的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入错误的【显示顺序】(为空); 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称12 岗位编码:ab124 显示顺序: 岗位状态:正常 备注:备注12 添加失败 提示:显示顺序必填 中 GWGL-TJGW-015 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入小数【显示顺序】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入错误的【显示顺序】(小数); 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称13 岗位编码:ab128 显示顺序:1.6 岗位状态:正常 备注:备注12 添加失败 提示:显示顺序需是整数 中 GWGL-TJGW-016 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入中文和英文【显示顺序】,进行添加岗位 1.输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入错误的【显示顺序】(中文和英文字符); 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称14 岗位编码:ab14 显示顺序:a哈 岗位状态:正常 备注:备注12 添加失败 提示:显示顺序需是整数 中 GWGL-TJGW-017 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入正确的(检查显示顺序正确性)【显示顺序】,进行添加岗位 1. 输入错误的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入错误的【显示顺序】(整数); 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称15 岗位编码:ab15 显示顺序:16 岗位状态:正常 备注:备注13 添加成功 提示:操作成功 岗位列表按显示顺序排序 高 GWGL-TJGW-018 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入超长的整数【显示顺序】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入错误的【显示顺序】(超长的整数); 4. 选择正确的【岗位状态】; 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称15 岗位编码:ab15 显示顺序:166666…等10万个数字 岗位状态:正常 备注:备注13 添加失败 提示:添加失败,请核实添加数据 中 GWGL-TJGW-019 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 选择正常【岗位状态】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择错误的【岗位状态】(正常); 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称17 岗位编码:ab7 显示顺序:17 岗位状态:正常 备注:备注17 添加成功 提示:操作成功 高 GWGL-TJGW-020 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 选择停用【岗位状态】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择错误的【岗位状态】(停用); 5. 输入正确的【备注】; 6. 点击【确定】; 岗位名称:名称18 岗位编码:ab8 显示顺序:18 岗位状态:停用 备注:备注18 添加成功 提示:操作成功 高 GWGL-TJGW-021 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入201位字符【备注】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入错误的【备注】(201位字符); 6. 点击【确定】; 岗位名称:名称19 岗位编码:ab9 显示顺序:19 岗位状态:正常 备注:备注19458…等201位字符 添加失败 提示:备注在0-200字之间 中 GWGL-TJGW-022 岗位管理 添加岗位 1. 成功登录系统 2. 打开系统管理-岗位管理 3. 点击【新增】 输入200位字符【备注】,进行添加岗位 1. 输入正确的【岗位名称】; 2. 输入正确的【岗位编码】; 3. 输入正确的【显示顺序】; 4. 选择正确的【岗位状态】; 5. 输入错误的【备注】(200位字符); 6. 点击【确定】; 岗位名称:名称20 岗位编码:ab20 显示顺序:20 岗位状态:正常 备注:备注19458…等200位字符 添加成功 提示:操作成功 高 题目3:功能测试题目 3(缺陷报告) (40分)
利用所学知识,请对蓝桥后台管理中的如下 3 个页面进行测试,寻找其中预埋的 14 个缺陷,包括但不限于功能缺陷和易用性界面缺陷。
并把发现的缺陷填写在指定的**【模拟赛2期缺陷报告.xlsx】**缺陷报告模板中。
【功能1:个人中心】
【功能2:岗位管理】
【功能3:添加岗位】
题目3:解题思路
在寻找bug 时,我们可以从以下点进行出发
- 输入框不对齐 — 美观性
- 按钮换行 — 美观性
- 建议搜索框支持模糊查询 – 建议
- 插入的数据不显示在最后 – 建议
- 按钮的图标注意检查 — 美观性
- 类似个数的输入框输入负数、小数 — 功能性
- 输入框会去除空格 — 建议
- 插入10条数据后的分页条显示 ----- 功能性
- 注意检查弹框的标题和文字 ----- 2级
参考答案
缺陷编号 功能名称 缺陷描述 操作步骤 预期结果 实际结果 缺陷级别 GRZX-BUG-001 个人中心 个人中心页面,在修改基本资料时,提示信息在左下角,不显眼 1. 登录系统->点击【头像】进入个人中心; 2. 修改【用户名称】; 3. 其他项输入正确; 4. 点击【保存】; 修改成功 在页面中上提示:信息更新成功 修改成功 在页面左下角提示:信息更新成功 2 GRZX-BUG-002 个人中心 个人中心页面,在修改基本资料时,性别修改不成功 1. 登录系统->点击【头像】进入个人中心; 2. 修改【性别】为女; 3. 其他项输入正确; 4. 点击【保存】; 修改成功 提示:信息更新成功 性别没有被更改 提示:信息更新成功 1 GWGL-BUG-001 岗位管理 岗位管理页面,选择【岗位状态】搜索时,不能筛选搜索 1. 登录系统->系统管理-岗位管理; 2. 【岗位状态】选择正常/停用; 3. 点击【搜索】; 查询出来的结果只有【岗位状态】是正常/停用的数据 查询的都是全部数据 1 GWGL-BUG-002 岗位管理 岗位管理页面,使用多个条件查询时查询失效 1. 登录系统->系统管理-岗位管理; 2. 输入页面中存在的【岗位编码】和【岗位名称】; 3. 点击【搜索】; 支持多个条件查询,且正确查询到数据 查询不到有数据 1 GWGL-BUG-003 岗位管理 岗位管理页面,搜索框不支持模糊查询 1. 登录系统->系统管理-岗位管理; 2. 输入页面中存在的【岗位编码】和【岗位名称】; 3. 点击【搜索】; 搜索框支持模糊查询,且能查询到相关数据 搜索框不支持模糊查询 2 GWGL-BUG-004 岗位管理 岗位管理页面,重置按钮没有反应 1. 登录系统->系统管理-岗位管理; 2. 搜索框输入数据; 3. 点击【重置】; 搜索框中的内容被清空 搜索框中的内容没有被清空 1 GWGL-BUG-005 岗位管理 岗位管理页面,岗位列表没有按照【显示顺序】进行排序 1. 登录系统->系统管理-岗位管理; 2. 查看列表数据; 岗位列表默认按照【显示顺序】进行升序排序 岗位列表默认按照【创建时间】进行升序排序 1 GWGL-BUG-006 岗位管理 岗位管理页面,在导出后的表格里,【显示顺序】列名称不正确 1. 登录系统->系统管理-岗位管理; 2. 点击【导出】; 3. 查看导出的数据; 正常显示所有列表数据 正常显示所有列表数据,但【显示顺序】列名称不对 2 GWGL-BUG-007 岗位管理 岗位管理页面,【修改】和【编辑】按钮功能相同,建议删去一个 1. 登录系统->系统管理-岗位管理; 2. 查看【修改】、【编辑】按钮; 两个按钮功能相同,只保留一个即可 相同功能的按钮同时存在 2 TJGW-BUG-001 添加岗位 添加岗位页面,【岗位名称】超过6位字符,也能添加成功 1. 登录系统->系统管理-岗位管理; 2. 点击【新增】; 3. 输入超过6位字符的【岗位名称】; 4. 其他项输入正确; 5. 点击【确定】; 添加失败 提示:【岗位名称】在1~6位 添加成功 提示:操作成功 1 TJGW-BUG-002 添加岗位 添加岗位页面,【岗位编码】输入中文/特殊字符也能添加成功 1. 登录系统->系统管理-岗位管理; 2. 点击【新增】; 3. 输入含有中文和特殊字符的【岗位编码】; 4. 其他项输入正确; 5. 点击【确定】; 添加失败 提示:【岗位编码】必须是英文/数组/组合 添加成功 提示:操作成功 1 TJGW-BUG-003 添加岗位 添加岗位页面,【岗位编码】输入中文时,不允许重复失效了 1. 登录系统->系统管理-岗位管理; 2. 点击【新增】; 3. 输入中文(已存在)的【岗位编码】; 4. 其他项输入正确; 5. 点击【确定】; 添加失败 提示:【岗位编码】已存在 添加成功 提示:操作成功 1 TJGW-BUG-004 添加岗位 添加岗位页面,【岗位状态】选择【停用】,添加用户时,也可以选择该岗位 1. 登录系统->系统管理-岗位管理; 2. 点击【新增】; 3. 【岗位状态】选择停用; 4. 其他项输入正确; 5. 点击【确定】; 6. 去添加用户页面,查看【岗位】下拉菜单; 【岗位】下拉菜单不可选择停用的岗位 【岗位】下拉菜单可以选择停用的岗位 1 TJGW-BUG-005 添加岗位 添加岗位页面,【备注】超过200个字符时,也可以添加 1. 登录系统->系统管理-岗位管理; 2. 点击【新增】; 3. 【备注】输入超过200个字符; 4. 其他项输入正确; 5. 点击【确定】; 添加失败 提示:备注在0~200个字 添加成功 提示:操作成功 1 题目4:单元测试(Java)语言
【题目描述】
请使用 基本路径法 为被测源代码 SendVerificationCode 类中的 isValid() 方法设计单元测试用例,并在 SendVerificationCodeTest 类中完成单元测试代码。
【源代码功能】
源代码实现的功能是:判断手机号码的合法性。
代码的 SendVerificationCode 类中包含一个方法:isValid()。
isValid() 方法用来判断 phoneNumber 是否为合法的手机号,逻辑如下:
- 校验 phoneNumber 的长度是否合法;
- 使用正则表达式校验 phoneNumber 是否符合手机号码的通用规则;
- 如果 phoneNumber 的长度合法且符合手机号码通用规则返回 true ,否则返回 false 。
被测源代码:
package cn.lanqiao; /** * 判断手机号码的合法性。规则如下: * 1. 校验 phoneNumber 的长度是否合法; * 2. 使用正则表达式校验 phoneNumber 是否符合通用手机号码的规则; * 3. 如果 phoneNumber 的长度合法且符合通用手机号码规则返回 true ,否则返回 false。 */ public class SendVerificationCode { public boolean isValid(String phoneNumber) { String pattern = "^1[3-9]\\d{9}$"; if (phoneNumber == null || phoneNumber.length() == 0 || phoneNumber.length() != 11) { return false; } else if (!phoneNumber.matches(pattern)) { return false;![image-20240527221214409](C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20240527221214409.png) } else { return true; } } }
题目4:解题思路
步骤1:首先,我们画出流程图
步骤2:根据流程图画出控制流图。
并且计算圈复杂度,我们可以得到,有5个测试用例即可完成基本路径覆盖
然后我们确定路径:
- 路径1:1 - 2 - 3 - 路径2:1 - 2 - 4 - 3 - 路径3:1 - 2 - 4 - 5 - 3 - 路径4:1 - 2 - 4 - 5 - 6 - 3 - 路径5:1 - 2 - 4 - 5 - 6 - 8
然后我们根据路径写出相应的测试用例:
然后根据我们的测试用例来编写测试代码
package cn.lanqiao.unit; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import cn.lanqiao.SendVerificationCode; /** * 单元测试 * 1. 请使用 基本路径法 对被测源码 SendVerificationCode 类中的 isValid 方法设计单元测试用例。 * 2. 请在下方 SendVerificationCodeTest 类中填写单元测试代码。 * 3. 基本路径法:又称独立路径测试,是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 */ public class SendVerificationCodeTest { static SendVerificationCode sendCode; @Before public void initSendVerificationCodeTest() { sendCode = new SendVerificationCode(); } @Test public void testIsValid01() { assertFalse(sendCode.isValid(null)); } @Test public void testIsValid02() { assertFalse(sendCode.isValid("")); } @Test public void testIsValid03() { assertFalse(sendCode.isValid("180")); } @Test public void testIsValid04() { assertFalse(sendCode.isValid("01234567891")); } @Test public void testIsValid05() { assertTrue(sendCode.isValid("13074961087")); } }
运行测试代码,可以看到,题目中给到的都被我们覆盖上了
题目5:自动化测试题目(Python 语言)
【题目描述】
请使用 Python 编程语言,结合 PO 模式(Page Object Model 的简写 页面对象模型 )思想 ,使用 Selenium 自动化测试工具补全如下多个 Python 类文件中 //TODO 处缺失的代码:
- Page1:login_page.py ,“登录”页面(已经写好,无需填写)
- Page2:post_management_page.py,“岗位管理” 页面
- Page3:add_post_page.py,“添加岗位” 页面
- web_case_test.py:测试用例代码文件
请按照用例步骤,在测试用例 web_case_test.py 文件中需通过调用 3 个 Page 类中的方法完成自动化测试代码。
参考代码
login_page.py
from selenium.webdriver.common.by import By from time import sleep """ * Page1-【登录】页面,登录页中的4个方法已经写好,无需改动。 * * 1. 输入【用户名】 * 2. 输入【密码】 * 3. 输入固定的【验证码】 * 4. 点击【登录】按钮 * """ class LoginPage: def __init__(self, driver): self.driver = driver # 输入【用户名称】的操作代码 def input_login_name(self, login_name): # 清空用户名输入框内容,防止脏数据 login_name_input = self.driver.find_element(By.XPATH, '//*[@id="signupForm"]/input[1]') login_name_input.clear() # 输入传入的 login_name 参数 login_name_input.send_keys(login_name) # 输入【密码】的操作代码 def input_login_password(self, password): # 清空密码输入框内容,防止脏数据 password_input = self.driver.find_element(By.XPATH, '//*[@id="signupForm"]/input[2]') password_input.clear() # 输入传入的 password 参数 password_input.send_keys(password) # 输入【验证码】的操作代码 def input_code(self, code): # 清空验证码输入框内容,防止脏数据 code_input = self.driver.find_element(By.XPATH, '//*[@id="signupForm"]/div[1]/div[1]/input') code_input.clear() # 输入固定的 666 验证码 code_input.send_keys(code) # 点击【登录】按钮的操作代码 def click_login_button(self): # 点击登录按钮 login_button = self.driver.find_element(By.XPATH, '//*[@id="btnSubmit"]') login_button.click() sleep(2)
post_management_page.py
from selenium.webdriver.common.by import By """ * Page2-【岗位管理页面】 * 需实现该页面中如下 7 个方法的操作代码(以下元素位置可参照题目附图) * * 1.获取登录后的【蓝桥超管】文本值 * 2.点击【系统管理】 > 点击【岗位管理】 的菜单路径 * 3.定位搜索项中的【岗位编码】输入框 ,并输入参数post_code * 4.点击【搜索】按钮方法 * 5.获取搜索结果的【分页显示信息文本值】 * 6.点击搜索列表【删除】按钮 * 7.点击【确认】删除的按钮 * 注意1:不要在 Page 页的方法中填写 iframe 的切换代码。 * 注意2:注意不要改动已经写好的方法名。 """ from time import sleep class PostManagementPage: def __init__(self, driver): self.driver = driver def get_username_text(self): # TODO 请实现 获取【蓝桥超管】文本值,注意在此方法中添加返回值 return self.driver.find_element(By.XPATH, '/html/body/div/div/div[1]/nav/ul/li[3]/a/span').text def click_post_manage_path(self): # TODO 请依次实现点击【系统管理】 > 点击【岗位管理】 的路径方法 self.driver.find_element(By.XPATH, '/html/body/div/nav/div[2]/div[1]/ul/li[3]').click() sleep(1) self.driver.find_element(By.XPATH, '/html/body/div/nav/div[2]/div[1]/ul/li[3]/ul/li[5]').click() def input_post_code_search(self, post_code): # TODO 请实现搜索条件【岗位编码】输入框的方法,post_code 为输入参数 self.driver.find_element(By.NAME, 'postCode').send_keys(post_code) def click_search_button(self): # TODO 请实现点击【搜索】按钮的方法 self.driver.find_element(By.XPATH, '/html/body/div/div/div[1]/form/div/ul/li[4]/a[1]').click() def get_page_numberText(self): # TODO 请实现 获取【分页显示信息文本值】的操作方法,注意在此方法中添加返回值 return self.driver.find_element(By.CLASS_NAME, 'pagination-info').text def click_delete_button(self): # TODO 请实现点击【删除】按钮的方法 self.driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div[1]/div[2]/div[2]/table/tbody/tr/td[8]/a[2]').click() def click_ok_button(self): # TODO 请实现点击【确认】删除的按钮的方法 self.driver.find_element(By.XPATH, '/html/body/div[3]/div[3]/a[1]').click()
add_post_page.py
from selenium.webdriver.common.by import By """ * Page3-【管理页面】 * 需实现该页面中如下 5 个方法的操作代码 * * 1.点击【+新增】元素操作方法 * 2.表单框输入【岗位名称】的方法 * 3.表单框输入【岗位编码】的方法 * 4.表单框输入【显示顺序】的方法 * 5.点击【确定】按钮的方法 * * 注意1:不要在 Page 页的方法中填写 iframe 的切换代码。 * 注意2:注意不要改动已经写好的方法名。 * * """ class AddPostPage: def __init__(self, driver): self.driver = driver def click_add_button(self): # TODO 请实现点击【+新增】元素操作方法 self.driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div[1]/div[1]/div[1]/div/a[1]').click() def input_post_name(self, post_name): # TODO 请实现表单框输入【岗位名称】的方法 self.driver.find_element(By.ID, 'postName').send_keys(post_name) def input_post_code(self, post_code): # TODO 请实现表单框输入【岗位编码】的方法 self.driver.find_element(By.ID, 'postCode').send_keys(post_code) def input_post_sort(self, post_sort): # TODO 请实现表单框输入【显示顺序】的方法 self.driver.find_element(By.ID, 'postSort').send_keys(post_sort) def click_ok_button(self): #TODO 请实现点击【确定】按钮的方法 self.driver.find_element(By.XPATH, '/html/body/div[4]/div[3]/a[1]').click()
test_web_case.py
import unittest from selenium import webdriver from selenium.webdriver.firefox.service import Service from time import sleep from cn.lanqiao.web.login_page import LoginPage from cn.lanqiao.web.post_management_page import PostManagementPage from cn.lanqiao.web.add_post_page import AddPostPage """ * 请按照操作步骤编写测试用例 * * 用例要求: * 1.合理使用元素等待时间。 * 2.请调用 Page 类中的方法实现操作步骤。 * 3.合理使用 iframe 切换,iframe 切换的代码填写在此文件中。 * 4.不要改动已经写好的方法名。 * """ class WebCaseTest(unittest.TestCase): # 浏览器初始化 def setUp(self): # 设置火狐驱动的路径,该路径不要随意改动 gecko_path = "C:\\LanQiaoTest\\project\\PythonLanqiaoTest\\driver\\geckodriver.exe" # 允许跨域访问 options = webdriver.FirefoxOptions() options.set_preference('security.fileuri.strict_origin_policy', False) options.set_preference('security.fileuri.origin_policy', '*') self.driver = webdriver.Firefox(service=Service(gecko_path), options=options) # 设置隐式等待 5 秒 self.driver.implicitly_wait(5) # 浏览器窗口最大化 self.driver.maximize_window() # 填写被测站点地址 self.driver.get("https://66552b93debba6d0473e9b5a.hz-iframe-svc.simplelab.cn/login") # 请再此方法中续写测试用例代码 def test_browser(self): # 创建LoginPage对象,供调用该类中的方法实现【登录】的操作代码 login_page = LoginPage(self.driver) # 点击登录账号输入框并输入账户-admin login_page.input_login_name("admin") # 点击登录密码输入框并输入密码-LQ15Mock2@2004 login_page.input_login_password("admin123") # 点击验证码输入框并输入-666 login_page.input_code("666") # 点击登录按钮 login_page.click_login_button() sleep(2) # 创建PostManagementPage对象 post_management_page = PostManagementPage(self.driver) # 创建PostManagementPage对象 add_post_page = AddPostPage(self.driver) # TODO 请参照题目中【用例步骤】补全以下代码,调用 3 个Page类中的方法实现。 usernameText = post_management_page.get_username_text() self.assertEqual('蓝桥超管', usernameText, '用户名不一致%s' % usernameText) post_management_page.click_post_manage_path() # 切换frame self.driver.switch_to.frame('iframe6') post_management_page.input_post_code_search('ceo') post_management_page.click_search_button() sleep(1) pageNumText = post_management_page.get_page_numberText() self.assertEqual('显示第 1 到第 1 条记录,总共 1 条记录', pageNumText, '分页数据不匹配%s' % pageNumText) post_management_page.click_delete_button() # 切换frame self.driver.switch_to.default_content() post_management_page.click_ok_button() # 切换frame self.driver.switch_to.frame('iframe6') add_post_page.click_add_button() # 切换frame self.driver.switch_to.default_content() sleep(2) self.driver.switch_to.frame(2) sleep(1) add_post_page.input_post_name('董事长') add_post_page.input_post_code('ceo') add_post_page.input_post_sort(1) # 切换 self.driver.switch_to.default_content() add_post_page.click_ok_button() # 浏览器退出 def tearDown(self): if self.driver: self.driver.quit() if __name__ == "__main__": unittest.main()