设计测试用例

发布于:2025-09-15 ⋅ 阅读:(17) ⋅ 点赞:(0)

设计测试用例

编写测试用例的方式

通过excel表格来编写/管理测试用例

在这里插入图片描述
现在excel的方式不咋用了,但是笔试的时候需要你用excel格式来答题

通过思维导图来编写/管理测试用例

在这里插入图片描述

excel方式与思维导图方式的区别

excel方式需要你给出测试用例的要素,就是下图中用红框框出来的部分,而思维导图方式则不需要给出要素
在这里插入图片描述

如何设计测试用例呢

设计测试用例的万能公式:功能测试+界面测试+性能测试+兼容性测试+易用性测试+安全测试

功能测试

验证产品的功能能否正常实现:

  • 正确的输入——正确的输出
  • 非法输入——输出非法提示

界面测试

什么是界面?凡是用户肉眼能看见的部分都叫做这款产品的界面
界面测试的目的就是保证用户良好的使用体验

性能测试

  • 测试产品在极端条件下功能能否正常运行
  • 测试产品在极端条件下的处理速度

兼容性测试

确保我们的产品在不同浏览器/不同操作系统上都能正常运行

易用性测试

测试这款产品好不好上手

安全测试

  • 检查数据库中用户私密信息有没有加密存储

  • SQL攻击测试(SQL注入)
    在这里插入图片描述

    • 当用户名被输入为 or 1=1 时,完整的 SQL 查询语句变成了select * from user where username = 'or 1=1' and password = 123;
    • 在 SQL 语法里, 1=1 是一个永远为真的条件 。
      由于使用了 or 逻辑运算符,只要 or 两边的条件有一个为真,整个条件就为真。所以不管输入的密码是否正确,也不管用户名是否存在,因为 or 后面的 1=1 恒成立,这条 SQL 语句就会返回 user 表中的所有用户信息 。
  • 越权访问测试
    当前用户没有权限访问这个资源,但是我如果访问到了,说明你这个软件的用户权限管理这一块有BUG

水杯测试案例

我的产品是一个水杯,我现在想请你对我的产品做个测试,请你设计测试用例
在这里插入图片描述

弱网测试

什么是弱网测试?

弱网是啥意思?就是网络状况不好的情况。弱网测试,就是检测产品在弱网状态下的各种性能能否符合我们规定的标准

常见的网络状况:

  1. wifi
  2. 5G
  3. 4G
  4. 3G、2G

具体检测的东西包括
在这里插入图片描述

如何进行弱网测试?

其实问题就是我们测试人员如何去构建这些弱网环境。
问题的答案也很简单,在测试的时候,我们主要通过一些抓包工具来构造弱网,这里推荐使用fiddler,步骤也很简单

1)打开fiddler中的弱网设置选项(这个选项打开之后,就支持手动设置网速了)
在这里插入图片描述

2)打开fiddler脚本编辑器
在这里插入图片描述
3)ctrl+f 查找m_simulatemodem
在这里插入图片描述
4)手动修改配置中的上行速率和下行速率

比如下图中,原来是上行速率是300ms/KB,下行速率是150ms/KB,现在我都改成了1550ms/KB,相当于原来我传1KB,需要300ms,现在需要1550ms,设置保存之后,传输速率就变慢了!

在这里插入图片描述

安装卸载测试

对于客户端/移动端软件,我们还要测试我们的产品在电脑/手机上能否成功安装,能否成功卸载,具体来说要测试:

  • 安装方面

    1. 安装包是否可以安装
    2. 卸载之后是否可以继续安装、重复安装…
    3. 软件更新时能否成功安装
  • 卸载方面

    1. 安装完成后能否成功卸载
    2. 安装一半后能否成功卸载
    3. 卸载一次后继续安装能否成功卸载
    4. 卸载一半停止后是否还可以继续卸载……

编写具体测试用例

前面所有的测试,都是为了给你提供一个设计测试用例的角度/方向,你根据前面这些角度,给出的只能是大致的框架,他并没有给出具体的测试用例。比如下图
在这里插入图片描述
下面我们就来说明,如何在这个框架的基础上,得出最终具体的测试用例

等价类

等价类分类:

  • 有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能
  • 无效等价类:根据需求说明书,不满足需求的集合。

举个例子:
在这里插入图片描述

缺点:等价类只考虑输入域的分类,没有考虑输入域的组合,需要其他的设计方法和补充。

边界值

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。边界值分析法通常作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

边界值包含:边界值+次边界值

啥叫次边界值呢?看下面的例子

1)有效范围是[6,15]
边界值:6 15(有效)
次边界值:5 16(无效)

2)有效范围是(6,15)
边界值:6 15(无效)
次边界值:7 14(有效)

边界值即给定返回的左数据和右数据

选择次边界值的时候需要根据边界值的有效无效情况来定

  1. 若边界值为有效等价类中的数据,则次边界值为无效等价类中的边界
  2. 若边界值为无效等价类中的数据,则次边界值为有效等价类中的边界

综合考虑等价类和边界值,对应的测试用例可以这样设计
在这里插入图片描述

场景法

这个主要是站在用户的角度,模拟用户使用这个软件的一系列流程操作。以每一个执行流为一个测试用例。比如:对于注册功能,我们先模拟出用户注册可能的几个执行流
在这里插入图片描述

确定基本流和备用流后,编写测试用例:

  1. 基本流:点击注册入口 同意协议,输入正确的信息,点击注册,成功激活
  2. 备用流:点击注册入口 不同意协议,重新点击注册入口 同意协议,输入正确的信息,点击注册,成功激活
  3. 备用流:点击注册入口 不同意协议,点击注册入口 不同意协议,输入错误的信息后重新输入正确的信息,点击注册,成功激活

在新活动上线的时候,我们还要确保新活动的上线对于老活动的正常运行没有影响。比如下面的例子中,如果把第一个if语句直接改成第二个if语句,那么5月份的活动就没有办法正常进行了,这就说明新活动的上线,对于老活动有影响,这就是不符合我们要求的。
在这里插入图片描述

正交表法

看下面的例子,按照我们一般人的测试思路,光是测试两种属性的不同组合。就需要设计4个测试用例。如果要测试五种属性的不同组合,需要设计32个不同的测试用例。那如果要设计10种属性的不同组合,我们可能就需要设计1000多个测试用例,这对于我们来说还是太繁琐了。
在这里插入图片描述
为了减少不同属性组合的测试用例数目,我们引入了正交表法。正交表就是通过数学的组合知识,在保证测试覆盖率的前提下,尽可能减少测试用例的数量,精简过之后形成的表格,相比全组合测试,正交表可减少70%-90%的用例量。

正交表满足下面的性质:

  1. 正交表的每列中不同数值出现的次数均等
  2. 在任意两列中,同一行的两个数值组成的有序数对出现的次数也是均等的

说了半天,你还是没告诉我正交表是咋来的呀,光告诉我他好,你不告诉我怎么做正交表,这不是糊弄人吗?

对于数学专业的同学来说,他们设计正交表肯定是小case,但是测试工程师,大部分都不是数学专业的,你让他们设计正交表,肯定有点难度。因此懂数学的程序员大佬们也开发出来了一款专门用于生成正交表的软件,你只需要输入相应的问题背景信息,运行可执行程序,它就能自动给你生成一份针对你给的问题的正交表。下面我们就来演示一下

(1)下载allpairs工具包
在这里插入图片描述
(2)在excel中输入正交表的因素和水平信息
在这里插入图片描述
(3)在allpairs.exe同级目录下创建一个txt文件
在这里插入图片描述
(4)选中excel表格中的输入信息,ctrl+c ctrl+v,粘贴到我们的txt文件中,然后直接保存
在这里插入图片描述
在这里插入图片描述
(5)打开命令行,在pair文件目录下输入指令allparis.exe test01.txt > res-test01.txt
在这里插入图片描述
(6)然后打开pair文件目录下的res-test01.txt,下面画红框的就是我们要的正交表
在这里插入图片描述
(7)根据正交表编写测试用例,同时补充遗漏的重要测试用例(下图中最后一条就是后面补充的)
在这里插入图片描述
有人会说,为啥要先在excel中写,然后再粘到txt文件中呢?你为啥不直接在txt文件中写呢?

主要是因为allpairs对txt文件格式要求非常严格,你自己手打,很容易打错。如果这么干,你执行exe文件时就会有下面的报错。

判定表法

什么是判定表?

在这里插入图片描述

使用判定表法的实例

假如说我们注册账号时有如下规则:
用户输入的账号中包含admin字符,或者通过内部链接进入注册页面,提交注册按钮成为管理员身份;反之无管理员身份。

现在我们要根据这条规则设计测试用例,此时就可以用判定表法,具体的使用步骤如下

(1)找到有哪些输入和输出条件
输入:账户包含admin字符,内部链接进入注册页面,提交注册按钮
输出:管理员/无管理员
在这里插入图片描述

(2)找到输入和输出条件之间的关系
账号包含admin字符 || 内部链接进入注册页面 + 提交注册按钮 => 管理员
不包含admin字符 || 非内部链接进入注册页面 || 未点击注册按钮 => 无管理员身份

事件 记号
账号包含admin字符 a事件
内部链接进入注册页面 b事件
提交注册按钮 c事件
管理员身份 Y
无管理员身份 N

在这里插入图片描述
(3)给出判定表
在这里插入图片描述

(4)根据判定表编写测试用例
a. 账号包含admin,非内部注册链接,点击注册按钮,为管理员身份
b. 账号包含admin,内部注册链接,不点击注册按钮,非管理员身份
c. 账号不包含admin,内部注册链接,点击注册按钮,为管理员身份
d. 账号包含admin,内部注册链接,点击注册按钮,为管理员身份
e. 账号包含admin,非内部注册链接,不点击注册按钮,非管理员身份
f. 账号不包含admin,非内部注册链接,点击注册按钮,非管理员身份
g. 账号不包含admin,非内部注册链接,不点击注册按钮,非管理员身份

错误猜测法

举个例子:张三要去卖瓜

用例1:因为张三这人不实诚,所以你要小心他缺斤少两
用例2:因为张三这人粗心,所以你要小心他的瓜被压坏了
用例3:因为张三这人小气,所以你要小心不要把他惹哭了

在上面这个例子中,我们会根据张三的一些特性从而得出一些打交道时需要注意的点。测试的时候很多属性都会有一些测试时需要值得特别注意的点。比如:

测试项 经常需要注意的点
密码 是否加密,是否具备安全性
获取用户输入 是否存在SQL注入的情况
软件存在多版本 多个版本都要测试
活动(每月存在且奖励不同) 兼容前面月份的活动

项目测试博客格式

在这里插入图片描述

测试用例设计练习

请你给命令行指令zip设计测试用例

在这里插入图片描述

测试一个网页的接口

假如说老板给你布置一个任务,让你测试公司某个网站的接口功能是否正常,这时候你具体该测什么呢 ?

不同的请求方式:

  1. 测试以GET方式请求接口,是否可以返回预期响应数据
  2. 测试以POST方式请求接口,是否可以返回预期响应数据

参数组合(如果接口需要拼参数的情况下):

  1. 空参数
  2. 多参数
  3. 少参数
  4. 参数对应的值为空/过长/特殊字符…

不同的参数格式:

  1. url拼参
  2. form-data格式
  3. raw格式等等

接口性能:

  1. 一千万个请求同时发起,是否能够返回响应
  2. 并发情况下响应时间是否在大众接受范围内

具体测试一个网站的接口,我们可以通过POSTMAN软件来做,下面就是一个实例

首先我们先复制一下当前网页要测试接口的curl
在这里插入图片描述

复制完之后将这个curl导入postman
在这里插入图片描述
把我们在网页中复制的curl粘进去
在这里插入图片描述
最终就可以形成这样一个界面,这就算导入成功了
在这里插入图片描述
有人这时候就会问,你费那么大事复制的curl和我在浏览器地址栏复制的url有啥区别呢?

区别就在于,curl里面不止是url,还有很多其他的信息,下面咱就来看看我们刚刚复制的curl里面到底是啥。通过下图我们可以很明显的看出,curl中多了很多报头,也包含http报文的正文信息。因此一个curl在效果上可以看做一个完整的http 报文。

curl 'https://eva2.csdn.net/v3/06981375190026432f77c01bfca33e32/lts/groups/dadde766-b087-42da-8e67-d2499a520ee7/streams/a0119567-bf91-4314-ab75-f683ba6c0c0a/logs' \
  -H 'Accept: */*' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Lts-Sdk-Request-Id: 26c57ecdb274452a9764b522d60e5c30' \
  -H 'Lts-Sdk-Version: 1.0.15' \
  -H 'Origin: https://blog.csdn.net' \
  -H 'Referer: https://blog.csdn.net/codezhu?type=blog' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-site' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0' \
  -H 'X-Sdk-date: 20250912T175132Z' \
  -H 'sec-ch-ua: "Not;A=Brand";v="99", "Microsoft Edge";v="139", "Chromium";v="139"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  --data-raw '{"labels":{},"logs":[{"contents":[{"pid":"blog","ref":"https://blog.csdn.net/codezhu?spm=1011.2415.3001.5343","curl":"https://blog.csdn.net/codezhu?type=blog","spm":"1001.2014","extra":"{\"x\":916,\"y\":568,\"ev\":\"move\"}","tos":49,"adb":0,"cCookie":"c_segment=4;c_sid=fee3358921061309fd47e9650cc3ecfe;c_ab_test=1;c_first_ref=default;c_first_page=https%3A//www.csdn.net/%3Fspm%3D1001.2100.3001.4476;c_session_id=10_1757696667924.686077;c_dsid=11_1757696668282.330614;c_bot_session=1757696671846556240ac6d2ec;c_bot_token=1001757696671846556240ac6d2ec43a0f1;c_bot_rules=-;c_bot_fp=577aa31beab1bf4c561072ed7e445612;c_pref=https%3A//blog.csdn.net/codezhu%3Fspm%3D1000.2115.3001.10640;c_ref=https%3A//blog.csdn.net/codezhu%3Fspm%3D1011.2415.3001.5343;c_page_id=default;","t":1757699492,"screen":"1536*864","urn":"1757699430843-b5cfe671-6c53-46e6-a36f-6700d3748c90","vType":"U010000","log_id":"7","sign":"8e9a0ff40ae5b3fb52b7c5fa59e5e26a","hca":"D1428B8EB1C6C99C","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0","cid":"10_37289135300-1735145530808-432660","uid":"codezhu","sid":"10_1757696667924.686077","dc_sid":"fee3358921061309fd47e9650cc3ecfe","did":"10_37289135300-1735145530808-432660","utm":"","un":"codezhu","fid":"20_93152087068-1724421155070-258575","__client_time__":1757699492251}]}]}'

你将curl导入postman,通过postman的解析,你就可以非常清晰地看到http请求报文中的各部分内容
在这里插入图片描述
导入之后,现在我再做接口测试就比较简单了。比如我现在想测试GET请求能不能正常工作,就改一下请求方法
在这里插入图片描述
响应的报文长这样,说明不能用GET请求
在这里插入图片描述

下面我们再测试一下b站的一个接口

在这里插入图片描述

导入curl之后发送POST请求,返回的报文长这样
在这里插入图片描述

发送get请求,就长这样,说明这个接口不能支持GET方法
在这里插入图片描述
如果你想测试未连接情况下的请求状况,那就把cookie关了,它再发送的时候,http请求报头中就没有cookie字段了
在这里插入图片描述
你想测试其他字段也一样,只需要勾选/不勾选对应的表项,就可以相应地在发送的请求报头中增加/减少一个字段

同时postman也支持你手动修改头部字段的值
在这里插入图片描述
可以说postman是我们在测试网页接口的过程中一个非常重要的伙伴。所以我们要非常熟练的运用它,这样才能取得较好的工作效率