软件测试
Day01
认识软件及测试
- 什么是软件:控制计算机硬件工作的工具
- 什么是软件测试:使用技术手段验证软件是否满足使用需求
- 软件测试目的:减少软件bug,保障软件质量
测试主流技能
- 功能测试
-
按测试文档的每个用例数据,得到实际结果,与预期结果对比
-
功能测试主要验证程序的功能是否满足需求
- 自动化测试
- 使用工具或代码执行批量测试输入,最终再生成个报告
- 好处是效率更高
- 接口测试
- 使用工具或代码对
服务端提供的接口测试
- 性能测试
- 使用工具或代码,模拟多人使用软件,
查找服务器缺陷
常见的测试分类7种
一共有7种,可以分成阶段和代码可见度划分两类
按测试阶段划分
有四个阶段
- 单元测试
针对程序源代码
进行测试(一般是开发自己做),条件是否判断正确等;
- 测每一块砖
- 集成测试
又叫接口测试,针对模块之间访问地址进行测试
- 测砖与砖之间
- 系统测试
对整个系统进行测试,包括功能、非功能(兼容、文档)等测试
- 验收测试
特殊项目,站在不同视角(内测,alpha测,beta测,灰度测试)
内测、公测、使用不同人群来发扬项目缺陷(免费劳动力)
按代码可见度划分
- 黑盒测试
源代码不可见,UI功能可见(是系统测试)
- 灰盒测试
部分源代码可见,UI功能不可见(是集成/接口测试)
- 白盒测试
全部代码可见,UI功能不可见(还是单元测试)
模型-质量模型(评价指标)
从哪些角度进行评价
衡量一个优秀软件的维度
从功能、性能、兼容、易用、安全
等8个指标
- 功能
需求:10个功能、功能详情
测试:功能数量为10个、功能正确实现(按需求说明书)、错误处理情况(引导性,报错内容)
- 性能
需求:预估每日在线人数20w
测试:服务器每秒处理请求数(20w在线服务器需求的处理数)、服务器硬件配置是否满足
- 兼容性
需求:浏览器、APP可以用
测试:chrome, edge, ie 几个内核服务器、操作系统(win7, 8, 10, 11, Mac, linux, android)、手机(分辨率、品牌、系统、网络、其它)
- 易用性
简洁(对比竞品)、友好、流畅、美观,对比竞品
- 可靠性(鲁棒性)
无响应(无响应)、卡顿(响应慢)、死机(系统崩溃)
- 安全
信息传输与信息存储,传输加密、存储加密
比如最近google的数据库泄露,因为密码明文存储
- 可移植性
网站数据迁移,比如原来预计40w用户,但现在需要扩张到200w,需要将服务器升迁,需要方便数据迁移
- 可维护性
代码的可维度性,核心代码要分离、有说明(网线打标、不纠缠)
软件测试流程6步骤
需求评审、计划编写、用例设计、用命执行、缺陷管理、测试报告
- 需求评审
让测试和开发都保持一致的需求理解
,要知道哪些核心功能(要有优先级)
- 计划编写
测什么、谁来测、怎么测
- 用例设计
验证项目是否符合需求的操作文档
- 用例执行
项目模块开发完成开始执行用例文档实施测试
- 缺陷管理
对缺陷进行管理的过程,这个状态的结束时,bug一定被修复了
- 测试报告
实施测试结果文档
需求->计划->用例设计->用例执行->bug管理->测试报告
测试用例
什么是用例、什么是测试用例、用例的作用、用例编写格式、用例练习
- 什么是用例
用户使用的案例(它是个简称)
是否能开机:打开手机按下电源键3秒钏,看是否能开机
验证内在:打开手机设置查看内在是否为64G
验证屏幕:打开手机在白屏背景下检查屏幕是否有黑色点
检查运行速度:打开手机下载游戏,测试是否流畅
- 什么是测试用例
为测试项目而设计
的执行文档
- 测试用例的作用
- 防止漏测(没有执行文档,一定会漏测)
- 实施测试的标准
- 用例设计编写格式
用例编号、用例标题、项目/模块、优先级、前置条件、测试步骤、测试数据、预期结果 一共8个
- 用例编号: 项目_模块_编号
- 用例标题:预期结果(测试点)
- 模块/项目:所属项目或模块
- 优先级:用例的重要程序或影响力P0~P4(P0最高),
用户频率用得最高的
才是核心功能 - 前置条件:有哪些前置操作
- 测试步骤:描述操作步骤
- 测试数据:操作步骤需要用的数据,没有可以为空
- 预期结果:期望达到的结果
练习
需求:QQ登录(4条)
1、账号为空
2、账号未注册
3、密码为空
4、密码错误
答案
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
QQ_登录_01 | 登录失败(账号为空) | 登录 | P1 | 打开登录页面、保持网络正确 | 1、输入账号;2、输入密码;3、点击登录 | 账号:空;密码:12345 | 登录失败,提示账号不可为空 |
QQ_登录_02 | 登录失败(账号未注册) | 登录 | P1 | 打开登录页面、保持网络正确、账号未注册 | 1、输入账号;2、输入密码;3、点击登录 | 账号:未注册的账号;密码:12345 | 登录失败,提示账号不存在 |
QQ_登录_03 | 登录失败(密码为空) | 登录 | P1 | 打开登录页面、保持网络正确、账号已注册 | 1、输入账号;2、输入密码;3、点击登录 | 账号:已注册的账号;密码:空 | 登录失败,提示密码不可为空 |
QQ_登录_04 | 登录失败(密码错误) | 登录 | P1 | 打开登录页面、保持网络正确、账号已注册 | 1、输入账号;2、输入密码;3、点击登录 | 账号:已注册的账号;密码:1234 | 登录失败,提示密码错误 |
测试用例写什么?
- 能对穷举场景设计测试点
等价类划分法
-
能对限定边界规则设计测试点
-
能对多条件依赖关系进行设计测试
省、市、区的依赖关系
- 能对项目业务进行设计测试点
Day02
学习目标
- 能对穷举场景设计测试点
- 能对限定边界规则设计测试点
- 能对多条件依赖关系进行设计测试点
- 能对于项目业务进行设计测试点
等价类划分法、边界值分析法、判定表法、场景法可以依次解决上面四个目标
等价类划分法(类型)
定义:在所有测试数据中,具有
某种共同特征
的数据集合进行划分(按年龄、性别)
分类
有效等价类:满足需求的数据集合
无效等价类:不满足需求的数据集合
从有效取一个,无效里取至少一个(若有效等价类是范围6~8的数字,那无效类有大小6和大于8)
步骤
- 明确需求
- 确定有效和无效等价类
- 提取数据编写测试用例
案例一(长度校验)
- 要求:6~10位自然数
步骤
- 明确需求:6~10位自然数
- 划分有效等价和无效等价:有效8位,无效(3位、12位)
- 数据编写测试用例:12312312(有效)、123(无效)、123123123123(无效)
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
QQ_01 | qq合法(8位自然数) | qq账号 | P0 | 打开qq程序 | 1、输入账号;2、点击认证 | 账号:12312312 | 账号合法 |
QQ_02 | qq不合法(3位自然数) | qq账号 | P1 | 打开qq程序 | 1、输入账号;2、点击认证 | 账号:123 | 账号不合法 |
QQ_03 | qq不合法(12位自然数) | qq账号 | P1 | 打开qq程序 | 1、输入账号;2、点击认证 | 账号:123123123123 | 账号不合法 |
案例一(类型校验)
- 要求:6~10位自然数
步骤
- 明确需求:6~10位自然数
- 划分有效等价和无效等价:有效8位自然数,无效8位非自然数、为空
- 数据编写测试用例:12312312(有效)、123123AB(无效)、空(无效)
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
QQ_04 | qq不合法(8位自然数) | qq账号 | P1 | 打开qq程序 | 1、输入账号;2、点击认证 | 账号:123123AB | 账号不合法 |
QQ_05 | qq不合法(8位非自然数) | qq账号 | P1 | 打开qq程序 | 1、输入账号;2、点击认证 | 账号:空 | 账号不合法 |
案例二
要求:
区号:空或三位数字
前缀码:非“0”且非“1”开关的三位数字
后缀码:四位数字
步骤
-
明确需求:长度、类型、规则
-
划分有效无效:
参数 | 说明 | 有效 | 有效数据 | 无效 | 无效数据 |
---|---|---|---|---|---|
区号 | 长度 | 空、3位数字 | 空;123 | 非3位数字 | 1234 |
前缀码 | 长度 | 3位 | 234 | 非3位 | 23 |
后缀码 | 长度 | 4位 | 1234 | 非4位 | 123 |
区号 | 类型 | 数字 | / | 非数字 | 12A |
前缀码 | 类型 | 数字 | / | 非数字 | 23A |
后缀码 | 类型 | 数字 | / | 非数字 | 123A |
区号 | 规划 | / | / | / | / |
前缀码 | 规划 | 非0且非1 | / | 0开头、1开头 | 012、123 |
后缀码 | 规划 | / | / | / | / |
需要10条用例(有效数据2条,无效数据8条)
- 数据编写测试用例
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
tel_01 | 合法(区号为空+其它正确) | qq账号 | P0 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:空;234;1234 | 电话合法 |
tel_02 | 合法(区号3位+其它正确) | qq账号 | P0 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;234;1234 | 电话合法 |
tel_03 | 不合法(区号4位+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:1234;234;1234 | 电话不合法 |
tel_04 | 不合法(非0非1前缀2位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;23;1234 | 电话不合法 |
tel_05 | 不合法(后缀3位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;234;234 | 电话不合法 |
tel_06 | 不合法(区号3位非数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:12A;234;1234 | 电话不合法 |
tel_07 | 不合法(前缀为非0且非1开头的非3位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;23A;1234 | 电话不合法 |
tel_08 | 不合法(后缀为非4位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;234;123A | 电话不合法 |
tel_09 | 不合法(前缀为0开头3位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;012;1234 | 电话不合法 |
tel_010 | 不合法(前缀为1开头3位数字+其它正确) | qq账号 | P1 | 打开验证程序 | 1、输入区号、前缀、后续;2、点击认证 | 账号:123;123;1234 | 电话不合法 |
重点:
- 正向用例:一条尽可能覆盖多条
- 逆向用例:每一条数据,都是一条单独用例
这里写个总结,快速地划分等价类,依然用上面的号码判断问题
正向 | 逆向 |
---|---|
空+3位前缀(非0非1)开头+后缀 | 四位数字+3位前缀(非0非1)开头+后缀 |
三位数字+3位前缀(非0非1)开头+后缀 | |
适用场景
- 需要有大量数据测试输入,但是没法穷举测试的地方
- 输入框
- 下拉列表
- 单选复选框
- 典型代表:页面的输入框类测试
边界值分析法(位数)
边界值说明
- 选取正好等于、刚好大于、刚好小于边界的值作为测试数据
- 上点:边界上的点(正好等于),两个点
- 离点:距离上点最近的点(刚好大于,刚好小于),四个点
- 内点:范围内的点(区间范围内的数据),内点一般取居中,与离点区分出来,一个点
按位数的角度,用例最多7条
用例设计步骤
- 明确需求
- 确定
有效和无效等价类
- 确定
边界范围值
- 提取数据编写测试用例
提示
- 边界值能解决位数限制问题,但无法解决类型问题,所以需要结合等价类
- 有关范围限制,最多7条用例(暂时未优化)
练习一
需求:通过边界值法验证标题长度的合法性
需求:标题长度大于0,小于等于30个字符
-
明确需求:标题长度大于0,小于等于30个字符
-
有效、无效等价类(只考虑类型)
有效:长度于[1~30]之间的字符
无效:长度于[1~30]之间的数字
- 边界范围
上点:0位和30位
离点:-1,1位,29位,31位 (因为-1是不可能的长度,可以删除)
内点:15位
如果全写一共9条,但-1这条不可能,而有效类和内点重复了,所以一共7条
- 编写测试用例
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
tel_01 | 不合法(标题为15位非字符串) | 标题 | P1 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:123451234512345 | 不合法 |
tel_02 | 不合法(标题为0位) | 标题 | P1 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:空 | 不合法 |
tel_03 | 合法(标题为30位字符串) | 标题 | P0 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:30个字符串 | 合法 |
tel_04 | 合法(标题为1位字符串) | 标题 | P0 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:A | 合法 |
tel_05 | 合法(标题为29位字符串) | 标题 | P0 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:29个字符串 | 合法 |
tel_06 | 不合法(标题为31位字符串) | 标题 | P1 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:31个字符串 | 合法 |
tel_07 | 合法(标题为15位字符串) | 标题 | P0 | 打开验证程序 | 1、输入标题;2、点击认证 | 账号:15个字符串 | 合法 |
练习二
需求:通过边界值法验证QQ号码合法性
要求:6~10位自然数
- 明确需求:6~10位自然数
- 有效、无效类划分:
- 有效类:6~10位自然数
- 无效类:6~10位包含非自然数
- 边界范围
- 上点:6位自然数、10位自然数
- 离点:5位自然数、7位自然数、9位自然数、11位自然数
- 内点:8位自然数
- 编写测试用例
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_登录_01 | 不合法(QQ号为6位非自然数) | QQ号验证 | P1 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:12345A | 不合法 |
qq_登录_02 | 合法(QQ号为6位自然数) | QQ号验证 | P0 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:123456 | 合法 |
qq_登录_03 | 合法(QQ号为10位自然数) | QQ号验证 | P0 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:1234567890 | 合法 |
qq_登录_04 | 不合法(QQ号为5位自然数) | QQ号验证 | P1 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:12345 | 不合法 |
qq_登录_05 | 合法(QQ号为7位自然数) | QQ号验证 | P0 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:1234567 | 合法 |
qq_登录_06 | 合法(QQ号为9位自然数) | QQ号验证 | P0 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:123456789 | 合法 |
qq_登录_07 | 不合法(QQ号为11位自然数) | QQ号验证 | P1 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:12345678901 | 不合法 |
qq_登录_08 | 合法(QQ号为8位自然数) | QQ号验证 | P0 | 打开验证程序 | 1、输入qq号;2、点击认证 | 账号:12345678 | 合法 |
上面的用例可以再次优化,有些用例数据在同一个范围内,比如7、8、9中,7和9包含在内点里了,可以不用考虑
结论:7个可以优化为5个点
上点:必选(不考虑区间开闭)
内点:必选(建议选择中间范围)
离点:开内闭外(考虑开闭区间,开区间选择内部离点,闭区间选择外部离点)
使用场景
- 在等价类的基础上针对有边界范围的测试数据输入的地方(重点关注边界)
- 常见词语描述:大小、尺寸、重量、最大、最小、至多、至少
- 有边界范围的输入框类测试
判定表法(条件)
针对依赖关系的需求
判定表定义及组成部分
- 定义:一种以表格形式表达多条件逻辑判断的工具
- 组成:
- 条件桩:列出问题中的所有条件,列出条件的次序不重要
- 动作桩:列出问题可能采取的操作,顺序不重要
- 条件项:列出问题对应的取值,所有可能情况下的真假值
- 动作项:列出条件项的、各种聚会情况下应该采取的动作结果
条件 | 是否欠费 | 是 | 是 | 否 | 否 |
---|---|---|---|---|---|
是否关机 | 是 | 是 | 是 | 是 | |
操作 | 是否允许主被叫 | 否 | 否 | 否 | 是 |
- 规则:
- 判断表中贯穿条件项和动作项的
一列就是一条规则
- 假设有n个条件,每个条件的聚会有两个(0,1), 全组合有2的n次方种规则
- 判断表中贯穿条件项和动作项的
步骤
- 明确需求
- 画出判定表
- 列出条件桩和动作桩
- 填写条件项、对条件进行全组合
- 根据条件项的组合确定动作项
- 简化、合并相似规则(有相同的动作)
- 根据规则编写测试用例
练习一
规则:
- 如果金额大于500元,又未过期,则发出批准单和提货单
- 如果金额大于500元,但过期了,则不发批准单与提货单;
- 如果金额小于等于500元,不论是否过期都发出批准单和提货单;
- 在过期的情况下不论金额大小还需要发出通知单
判断表
- 条件桩:是否大于500
- 条件桩:是否过期
- 动作桩:批准单
- 动作桩:提货单
- 动作桩:通知单
是否大于500 | 是 | 是 | 否 | 否 |
---|---|---|---|---|
是否过期 | 是 | 否 | 是 | 否 |
批准单 | 0 | 1 | 1 | 1 |
提货单 | 0 | 1 | 1 | 1 |
通知单 | 1 | 0 | 1 | 0 |
编写测试用例
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
order_01 | 通知单(大于500,过期) | 订单 | P0 | 打开验证程序 | 1、输入金额;2、输入是否过期;3、点击验证 | 金额:600;过期 | 只发通知单 |
order_02 | 批准单、提货单(大于500,未过期) | 订单 | P0 | 打开验证程序 | 1、输入金额;2、输入是否过期;3、点击验证 | 金额:600;未过期 | 只发批准单、提货单 |
order_03 | 批准单、提货单、通知单(不大于500,过期) | 订单 | P0 | 打开验证程序 | 1、输入金额;2、输入是否过期;3、点击验证 | 金额:400;过期 | 只发批准单、提货单、通知单 |
order_04 | 批准单、提货单(不大于500,未过期) | 订单 | P0 | 打开验证程序 | 1、输入金额;2、输入是否过期;3、点击验证 | 金额:400;未过期 | 只发批准单、提货单 |
练习二
需求:
- 输入的第一列字符必须是A或B
- 输入的第二列字符必须是个数字
- 如果第一列字符不正确,则给出信息L
- 如果第二列字符不正确,则给出信息M
- 如果两列字符输入正确,则修改文件成功
判定表
- 条件:第一列是A或B
- 条件:第二列是个数字
- 动作:输出L
- 动作:输出M
- 动作:修改文件成功
对应的判定表如下
第一列是A或B | 是 | 是 | 否 | 否 |
---|---|---|---|---|
第二列是个数字 | 是 | 否 | 是 | 否 |
输出L | 0 | 0 | 1 | 1 |
输出M | 0 | 1 | 0 | 1 |
修改文件成功 | 1 | 0 | 0 | 0 |
对应的测试用例如下
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
order_01 | 修改文件成功(第一列A第二列数字) | 文件 | P0 | 打开验证程序 | 1、输入字符串;2、点击验证 | A2 | 修改文件成功 |
order_02 | 输出M(第一列A第二列非数字) | 文件 | P1 | 打开验证程序 | 1、输入字符串;2、点击验证 | AA | 输出M |
order_03 | 输出L(第一列非A非B第二列数字 | 文件 | P1 | 打开验证程序 | 1、输入字符串;2、点击验证 | C2 | 输出L |
order_04 | 输出L输出M(第一列非A非B第二列非数字) | 文件 | P1 | 打开验证程序 | 1、输入字符串;2、点击验证 | CC | 输出L输出M |
使用场景
- 有多个输入条件,多个输出结果,输入条件之间有组合关系,输入条件和输出结果之间有依赖关系
- 判定表一般适用于条件组合数量较少的情况(四个条件以下)
- 如果条件太多,比如5个及以上,说明业务设计得有问题,如果一个条件出错其它都会出错,应该要把它拆分开;或者使用正交法
场景法
如果测试一个项目,先测试“业务”;
而对业务测试,使用场景法
- 需要使用流程图法
- 先测试业务,再测试单功能、单模块、单页面
流程图
业务用例是根据流程图来梳理,需要先了解流程图
作用:梳理业务用例
适用场景
测试业务用例,可以使用场景法
练习

下面是对应的流程图

应该先验证取钱金额再验证账户余额
用例编号 | 用例标题(预期结果+测试点) | 模块/项目 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
ATM_01 | 取款失败(验证银行卡失败) | ATM | P1 | 打开验证程序 | 1、插入卡 | 网卡 | 取钱失败;退卡 |
ATM_02 | 取款失败(密码错误3次) | ATM | P1 | 打开验证程序 | 1、插入卡;2、密码错误 | 银行卡、非银行卡密码 | 吞卡 |
ATM_03 | 取款失败(取钱金额不正确) | ATM | P1 | 打开验证程序; | 1、插入卡;2、密码正确;3、输入金额 | 银行卡、银行卡密码、金额 | 取钱失败;退卡 |
ATM_04 | 取款失败(账户余额不足) | ATM | P1 | 打开验证程序;卡余额为0 | 1、插入卡;2、密码正确;3、输入金额 | 银行卡、银行卡密码、金额1 | 取钱失败;退卡 |
ATM_05 | 取款失败(ATM余额不足) | ATM | P1 | 打开验证程序;卡余额充足;ATM余额为0 | 1、插入卡;2、密码正确;3、输入金额 | 银行卡、银行卡密码、金额100 | 提示故障 |
ATM_06 | 取款成功 | ATM | P0 | 打开验证程序;卡余额充足;ATM余额为充足 | 1、插入卡;2、密码正确;3、输入金额 | 银行卡、银行卡密码、金额100 | 提取成功 |
错误推荐法
定义:通过经验推测系统可能出现的问题
根据经验列举可能出现问题的清单,根据清单分析分析可能的原因
场景
- 间紧任务量大时,根据之前项目类似经验找出易出错的模块重点测试
- 实践宽裕通过该方法列出之前出现问题较多的模块再次测试
当所有用例都测试完了,bug都修复完了,如果此时离上线还有几个小时,此时使用错误推荐法,不要根据用例执行,使用经验来覆盖那些未测试到的功能和业务
先确定最核心的业务,把测试点列出来,先验证核心业务再测试功能测试单元测试等
Day03
学习目标
- 说出软件缺陷判定标准
- 说出项目中缺陷的管理流程
- 使用Excel对于缺陷进行管理
- 使用工具管理缺陷
缺陷的定义
软件在使用过程中存在的任何问题,都可以叫软件的缺陷,bug
缺陷的判定标准
软件未实现需求(规格)说明书中明确要求的功能-少功能
软件实现的功能超出需求(规格)说明书指明的范围-多功能
软件出现了需求(规格)说明书中指明不应该出现
的错误-显性功能错误
软件未实现需求(规格)说明书中虽未明确指明但应该实现
的要求-隐性功能错误
如果测试人员认为软件难以理解,不易使用,运行缓慢,用户体验不好,都为缺陷-不易使用
缺陷产生的原因
一个软件开发需要经过需求->设计->编码->运行->上线几个过程,而每个过程都可能出现错误或缺陷
- 需求阶段:需求描述不易理解、有歧义、错误(项目
- 设计阶段:设计文档存在错误或缺陷(架构师
- 编码阶段:代码出现错误
- 运行阶段:软件、硬件系统本身故障导致
软件缺陷的生命周期

在故障解决时,解决了A缺陷,可能会引发新的B/C缺陷,所以在故障解决里会引入其它缺陷
发现bug后,按故障分类->故障隔离->故障解决
对缺陷进行清除
缺陷的核心内容
重点:
缺陷的描述:发现缺陷后,如何描述,让别人看懂(缺陷标题、条件、复现步骤)
缺陷的提交:指派人、优先级、类型等
包含:缺陷的标题、缺陷的预置条件、缺陷的复现步骤、缺陷的预期结果、缺陷的实际结果、缺陷的必要附件
缺陷提交要素

严重程度:表示问题严重程度,严重(主功能、核心业务受到影响)
优先级:主要是解决时间的区别;严重问题一天内解决,如果是一些建议性问题(严重程度低的)可以推迟下个版本解决
状态:New新缺陷;Open表示开发已经接管;Closed缺陷已经完成
缺陷类型

其中功能错误、UI错误、兼容性问题
是最重要的三个
工程流程
设计用例->执行用例(执行测试)->缺陷(提交、验证、关闭)
缺陷定义:任何问题(Bug)
缺陷标准:多功能、少功能、显示功能错误、隐性功能错误、易用性
描述缺陷重点:缺陷标题、前置条件、复现步骤、预期结果、实际结果、附件备注
提交缺陷信息:指派人、缺陷编号、缺陷严重程序(严重、一般、建议)、优先级、缺陷类型
练习
测试一个注册页面

下面就是对这个测试页面进行的分析
缺陷编写
缺陷的跟踪流程

这里的黄色部分是测试;而绿色部分是开发人员
提交缺陷注意事项
可重现:缺陷可以复现
规范性:符合公司或项目要求
唯一性:一个缺陷只上报一个问题
问题:当你发现缺陷后,首先会怎么办?
回答:确定缺陷可以复现,以及确定是否为bug(是否有偶然性)
缺陷编写规范
准确:描述信息正确
具体:有细节且真实特定
简洁易懂:描述简单容量理解
次序清晰:描述缺陷过程有条件,有先后顺序
Day04
缺陷管理工具
下面是软件开发不同岗位的职责


- 可以使用excel或项目管理工具(禅道,JIRA)
练习


分析需求、提取测试点、设计用例、用例评审、执行用例、缺陷管理、测试报告
登录功能用例实现
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_001 | 登录成功 | 登录 | P0 | 1.打开登录页面;2.手机号已经注册 | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.勾选协议;7.点击登录 | 1. 手机号:注册手机号;2.验证码:正确 | 登录成功,跳转到个人主页;手机号文本框失去焦点,变绿色 |
qq_login_002 | 登录失败(手机号为空) | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.拖动滑块;4.输入验证码;5.勾选协议;6.点击登录 | 1. 手机号:空;2.验证码:1234 | 登录失败:提示手机号不能为空;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_003 | 登录失败(手机号11位非自然数 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.拖动滑块;4.输入验证码;5.勾选协议;6.点击登录 | 1. 手机号:1350000111A;2.验证码:1234 | 登录失败:提示输入正确手机号;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_004 | 登录失败(手机号10位自然数 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.拖动滑块;4.输入验证码;5.勾选协议;6.点击登录 | 1. 手机号:135000111A;2.验证码:1234 | 登录失败:提示手机号未注册;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_005 | 登录失败(手机号12位自然数 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.拖动滑块;4.输入验证码;5.勾选协议;6.点击登录 | 1. 手机号:13500000111A;2.验证码:1234 | 登录失败:提示手机号未注册;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_006 | 登录失败(手机号未注册 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.勾选协议;7.点击登录 | 1. 手机号:1350000111;2.验证码:1234 | 登录失败:提示手机号未注册;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_007 | 登录失败(验证码为空 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.勾选协议;7.点击登录 | 1. 手机号:1350000111;2.验证码: | 登录失败:提示验证码为空;手机号文本框推动焦点,变红;滑块按钮不可点 |
qq_login_008 | 登录失败(验证码为错误 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.勾选协议;7.点击登录 | 1. 手机号:1350000111;2.验证码:AAxx(错误) | 登录失败:提示验证码错误;手机号文本框推动焦点,变绿;滑块按钮不可点 |
qq_login_009 | 登录失败(验证码为过期 | 登录 | P1 | 1.打开登录页面;2.验证码超时 | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.勾选协议;7.点击登录 | 1. 手机号:1350000111;2.验证码:AAxx(错误) | 登录失败:提示验证码错误;手机号文本框推动焦点,变绿;滑块按钮不可点 |
qq_login_010 | 登录失败(未同意协议 | 登录 | P1 | 1.打开登录页面; | 1.输入测试手机号;2.点击发送验证码;3.点击滑块按钮;4.拖动滑块;5.输入验证码;6.不勾选协议;7.点击登录 | 1. 手机号:注册手机号;2.验证码:正确;3.不勾选协议 | 登录失败:提示请勾选协议;手机号文本框推动焦点,变绿;滑块按钮不可点 |
登录非功能用例实现
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_0011 | 显示和功能正常 | 登录 | P2 | 1.安装Chrome;2使用Chrome打开登录页面 | 1.查看登录页面显示不正常;2.登录成功 | 1.显示与UI;1. 手机号:注册手机号;2.验证码:正确 | 1.显示正常;2.登录成功,跳转到个人主页;手机号文本框失去焦点,变绿色 |
qq_login_0012 | 显示和功能正常 | 登录 | P2 | 1.安装FireFox;2使用FireFox打开登录页面 | 1.查看登录页面显示不正常;2.登录成功 | 1.显示与UI;1. 手机号:注册手机号;2.验证码:正确 | 1.显示正常;2.登录成功,跳转到个人主页;手机号文本框失去焦点,变绿色 |
后面重复测试其它浏览器
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_0016 | 显示与UI一致(布局) | 登录 | P3 | 1.打开登录页面;2.打开UI原型图 | 1.检查页面布局; | 1.产品原型布局数据 | 1.页面与原型UI一致 |
qq_login_0017 | 显示与UI一致(图片与文字) | 登录 | P3 | 1.打开登录页面;2.打开UI原型图 | 1.检查页面图片与文字 | 1.产品原型布局数据 | 1.页面与真实数据一致,无错字 |
滑块用例
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_0018 | 发送验证码成功(滑动到指定位置) | 滑块 | P0 | 1.打开滑块界面 | 拖动滑块到指定空缺位置 | 手机号,正确手机号 | 发送验证码成功 |
qq_login_0019 | 发送验证码成功(1次未滑动到指定位置) | 滑块 | P1 | 1.打开滑块界面 | 拖动滑块1次未到指定空缺位置 | 手机号,正确手机号 | 验证码获取失败,滑块抖动效果,回到初始位置 |
qq_login_0020 | 发送验证码成功(3次未滑动到指定位置) | 滑块 | P1 | 1.打开滑块界面 | 拖动滑块3次未到指定空缺位置 | 手机号,正确手机号 | 验证码获取失败,滑块抖动效果,回到初始位置 |
qq_login_0021 | 发送验证码成功(5次未滑动到指定位置) | 滑块 | P1 | 1.打开滑块界面 | 拖动滑块5次未到指定空缺位置 | 手机号,正确手机号 | 验证码获取失败,滑块抖动效果,回到初始位置 |
qq_login_0022 | 发送验证码成功(错误达6次重试) | 滑块 | P1 | 1.打开滑块界面 | 拖动滑块6次未到指定空缺位置 | 手机号,正确手机号 | 验证码获取失败,滑块抖动效果,错误达6次重试 |
- 按用户的字段:不同用户是否显示正常1,2,3,
- 按功能的个数分页是否正常,每页固定多少个,超页是否显示,