用例的设计方法

Posted on Wed, 25 Dec 2024 10:02:34 +0800 by LiangMingJian


什么是测试用例

测试用例是测试工程师为软件程序设计一种情况,要求软件程序在这种情况下,必须能够正常运行,并且达到程序所设计的预期结果。

测试用例都是可执行的

设计用例最基本的要求是——可以执行且没有歧义。因此,用例在设计时不能包含一些似是而非的词语,比如是不是,要不要,有没有。换句话说,就是用例要么包含是,要么包含不是,比如:

  • 装盐的袋子不能漏。
  • 衣服的颜色是红的。
  • 衣服的材料是 80% 的棉,20% 的涤纶。

用例的 3A 原则

在设计用例时,应当遵循用例设计的 3A 原则,即用例中应包括以下 3 部分内容:

  • Arrange:初始化测试对象或者准备测试数据。
  • Act:调用被测方法。
  • Assert:断言。

用例的设计方法

等价类设计法

解释:依据需求将输入划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的整个等价类测试通过,这样就可以通过较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。

弊端:等价类只考虑输入域的分类,没有考虑输入域的组合。

类别

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

示例:超市买水果

  • 有效等价类:苹果,香蕉,桃子。
  • 无效等价类:青菜,大米,饮料。

边界值设计法

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

示例

  • 输入框长度为 1-11,边界值取值:0,1,11,12。
  • 运动员参赛项目为 1-3 项,边界值取值:0项,1 项,3 项,4 项。
  • 查询页面有 999 行,每 50 行一页,边界值取值:0 行,1 行,50 行,51 行,999 行。

因果图设计法

解释:因果图是一种简化的逻辑图,能直观的表明程序输入条件(原因)和输出动作(结果)间的相互关系。因此,因果图法特别适用于被测试程序具有多种输入条件,程序的输出又依赖于输入条件的情况。

因果图设计测试用例的步骤

  • 分析所有可能的输入和可能的输出
  • 找出输入与输出之间的关系
  • 画出因果图
  • 把因果图转化成判定表
  • 把判定表对应到每一个测试用例

示例:淘宝双十一打折优惠活动,订单提交时,金额大于 300 的,有红包优惠。

A.首先通过分析所有可能的输入和可能的输出,可以得到如下结果:

  • 输入:订单已提交,订单金额大于300,有红包
  • 输出:优惠,不优惠

B.然后进行第二步,找出输入域输出之间的关系,通过分析得出以下对应关系:

  • 订单已提交,订单金额大于300,则优惠
  • 订单已提交,订单金额小于等于300,无红包,不优惠
  • 订单已提交,订单金额小于等于300,有红包,优惠
  • 订单已提交,有红包,优惠
  • 订单未提交,不优惠

C.为了方便画出因果图和判定图,对所有输入和输出编号:

  • 1:订单已提交
  • 2:订单金额大于300
  • 3:有红包
  • 21:优惠
  • 23:不优惠

D.画因果图,画判定表,得测试用例:

正交法

解释:正交法的目的在于减少用例数量,使用尽量少的用例,覆盖输入的两两组合。

正交法设计测试用例的步骤

  • 分析有哪些因素(变量)
  • 每个因素有哪几个水平(变量的取值)
  • 选择一个合适的正交表
  • 把变量的值映射到表中
  • 把每一行的各因素水平的组合作为一个测试用例
  • 加上你认为可疑且没有在表中出现的用例组合

示例:用户注册

1.因素:姓名,邮箱,密码,确认密码,验证码。 2.水平:填写,不填写。

3.计算:表中的因素数 C=5,表中至每个因素数的水平数 T=2,行数取最少的一个,即试验次数 ( N ) 最少的一个,试验次数公式 L=N(TC)=(2-1)*5+1=6(25)。 4.生成测试用例。

场景设计法

解释:现在的软件程序几乎都是使用事件触发来控制流程。事件触发时形成场景,同一事件不同的触发顺序和不同的处理结果就形成事件流。场景设计法可以生动地描绘出事件触发时的情景,有利于测试用例更容易理解和执行。

示例:用户注册。

事件流:开始—>用户注册—>用户阅读协议—>是否同意协议—是—>填写信息—>发送验证信息—>激活—>注册成功—>结束。

错误猜测法

解释:基于经验和直觉,找出程序中你认为会出现的错误,有针对性地设计测试用例。

示例:用户注册。

  1. 移除和替换输入中的特殊字符和空格。
  2. 正确识别密码中的大小写。
  3. 密码发送不应该使用明文。

常见的测试用例设计

功能测试:

  1. 输入正确的账号和密码,点击提交按钮,能正常登录;
  2. 输入错误的账号或错误的密码,登录失败,有相应的提示信息;
  3. 登录成功后能跳转到正确的页面;
  4. 账号和密码,如果太短或者太长,禁止提交,提示修改密码(密码安全性检测);
  5. 账号和密码中有特殊字符(如空格),和其他非英文的情况,传输时进行过滤;
  6. 账号和密码前后有空格时,传输时自动过滤;
  7. 密码不以明文显示(星号、圆点等);
  8. 验证码文字不扭曲过度,辨认难度不大,刷新正常;
  9. 输入密码时,若大写键盘开启,应当出现提示;
  10. 不输入任何内容,点击提交按钮,提示信息空输入,禁止提交(非空校验);

UI测试:

  1. 布局合理,文字和按钮正确排列;
  2. 文本输入框和按钮的长度,高度符合要求;
  3. 界面的设计风格与UI的设计风格统一;
  4. 界面中的文字简洁易懂,没有错别字;

安全性测试:

  1. 登录成功后生成的 Cookie 有 HttpOnly( 如果 Cookie 中设置了 HttpOnly 属性,那么将无法通过 JavaScript 读取,能有效的防止 Cookie 被窃取,增加Cookie 的安全性 );
  2. 账号和密码通过 POST 并加密的方式,发送给 Web 服务器;
  3. 账号和密码的验证,应该是用服务器端验证,而不能单单是在客户端用 JavaScript 验证;
  4. 账号和密码的输入框,应该屏蔽 SQL 注入攻击;
  5. 账号和密码的输入框,应该禁止输入脚本;
  6. 存在错误登录的次数限制( 防止暴力破解 );
  7. 支持多用户在同一机器上登录;
  8. 单用户在多台机器上允许登录;

可用性测试:

  1. 输入账号,密码后按回车,可以登录;
  2. 输入框可以使用 Tab 键切换;

兼容性测试:

  1. 各种主流的浏览器下能显示正常( IE,Firefox,Chrome,Edge );
  2. 移动设备上能正常工作;
  3. 不同的分辨率下显示正常;