关于测试用例设计的常用方法

51 阅读8分钟

对于测试工程师来讲,其实需要参与的是这个软件研发的流程,主要包括测试分析,测试设计,测试执行和测试评估四大过程,其中分析又是设计的基础,执行实在设计的基础之上,最后的评估则是需要依赖执行的结果。

下面我主要是想介绍下最近学到的京东物流开发者写的六脉神剑之测试设计的常用方法,感觉收获颇丰,我来做个自我总结

等价类划分

这个应该是属于最多最普遍的方法之一,对于大部分的文本输入框,都会对输入的内容做限制,包括长度和数字,字符以及特殊字符的限制,比如通常的密码输入框中的会限制不少于8位不大于18位,包含数字加字母,这个时候我们就可以使用等价类划分的方式来进行设计,等价类包含有效等价类和无效等价类

  1. 有效等价类:8-18位数字加字母
  2. 无效等价类:纯数字,纯字母

边界值划分

还是上面的例子:密码输入框中的会限制不少于8位不大于18位,包含数字加字母,对于这个我们还需要考虑到边界值,比如8到18位,[8,18],通常由于大部分的代码错误逻辑判断都会出现在边界上,所以这个时候我们需要测试边界值和次边界值,即7,8,9,17,18,19这几种情况都需要测试,这样才能比较全面的覆盖到各种情况,正在的情况在上面的有效等价类中已经提及

因果判定法

对于等价类划分和边界值法主要是针对各个条件,输入输出之间是相互独立没有依赖关系的情况下使用,如果各个条件之间有依赖关系则通常会使用因果判定法来进行设计。 比如: 自动贩卖机的测试 1、若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖可乐〗的按钮,则相应的饮料就送出来。 2、若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来; 3、若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币; 4、橙汁与可乐均为5角钱一瓶。

输入条件是投币5角钱,1元钱 操作:点击橙汁,点击可乐 输出条件是:出橙汁,出可乐,饮料不送出退钱

image.png

这个方法的本质其实就是将所有的输入和输出列出来,然后根据输入和输出之间的依赖关系进行排列组合,但是这个方法有个弊端,就是当你的输入和输出非常多的时候,排列组合的数量会非常巨大,这个时候需要采用正交法来进行设计

正交法

应用场景: 多条件组合用例设计,但是不适用依赖和联动(比如省市区那样的下拉框)。常见于页面组合设置用例设计和兼容性组合用例设计。用最少的实验覆盖最多的操作,测试用例设计很少,效率高。正交性从全面试验中挑选出部分有代表性的点进行试验。

**Ln(mk) : ** 

Ln=mkLn=m^k

    L: 表示正交表

    n: 实验行数   且 n = (m-1)*k + 1

    k: 因素数 (输入 或 控件数量)

    m: 水平数 (输入的取值 或者 每个控件的下拉选项数量)

    标准正交表的每个因素的水平数相同.

混合正交表:

  Ln(m1k1m2k2m3k3.......)

Ln=m1k1m2k2m3k3...Ln=m1^k1m2^k2m3^k3...

    L: 表示正交表

    n: 实验行数   且 n = (m1-1)*k1 + (m2-1)*k2+(m3-1)*k3+.........+1

    m1k1: k1个控件有m1个选项

    m2k2: k2个控件有m2个选项

    m3k3: k3个控件有m3个选项

** 设计测试用例的步骤:**

1、确定因子(变量)

2、确定水平(变量的取值)

3、选择一个合适的正交表

4、把变量的值映射到表中

5、把每一行的各因素水平的组合作为一个测试用例

6、加上你认为可疑且没有在表中出现的用例组合

设计用例的时候分三种情况:

  • 因子和水平相符,且水平数(变量的取值)相同、因素数(变量)刚好符合某一正交表,则直接套用正交表,得到用例。

例子:对某个人进行条件查询,可以根据身份证,姓名和手机号三个条件查询,查询条件可以填写或者不填写

1. 因素数和水平数

有三个因素:姓名、身份证号、手机号码。每个因素有两个水平:

姓名:填、不填

身份证号:填、不填

手机号码:填、不填

2、 选择正交表

表中的因素数>=3

表中至少有三个因素的水平数>=2

行数取最少的一个 结果:L4(2^3) 上述的结果根据正交表查询出来,查询地址如下: support.sas.com/techsup/tec…

image.png

image.png

变量映射: 姓名:1填写,2不填写;

身份证号:1填写,2不填写;

手机号码:1填写,2不填写;

根据上述的设计的测试用例如下: 用例1:填写姓名(1),填写身份证(1),填写手机号(1) 用例2:填写姓名(1),不填写身份证(2),不填写手机号(2) 用例3:不填写姓名(2),填写身份证(1),不填写手机号(2) 用例4:不填写姓名(2),不填写身份证(2),填写手机号(1)

增补用例: 不填写姓名,不填写身份证,不填写手机号

最后的用例由8个(2^3)减少到5个

  • 水平数(变量的取值)与某正交表相同,但因素数(变量)却不相同,则取因素数最接近但略大于实际值的正交表表,套用之后,最后一列因素去掉即可 例子: 兼容性测试:

操作系统:win10、win11、win7

浏览器:chrome、Edge、firefox

杀毒软件:360、金山、Macfree

如果全部进行测试的话,3^3=27个组合,需要进行27次测试。

1、因素数和水平数: 因素数有3个,每个因素的水平数(取值)3个

2、选择正交表 表中的因素数>=3, 表中至少有三个因素的水平数>=3, 行数取最少的一个 n=(3-1)*4+1=9 L9(3^4) 查询表格图下

image.png 转换成对应的表格如下:

image.png

测试用例如下: 1、win10,chrome,360 2、win10,Edge,Macfree 3、win10,firefox,金山 4、win11,chrome,macfree 5、win11,Edge,金山 6、win11,firefox,360 7、win7,chrome,金山 8、win7,Edge,360 9、win7,firefox,Macfree

测试用例从27个减少到9个

  • 水平数不相同,因素(变量)与某正交表相同,但水平数(变量的取值)不相同 例子:

假设有一个系统有5个独立的变量(A,B,C,D,E)。变量A和B都有两个取值(A1 、A2和B1、B2)。变量C和D都有三个可能的取值(C1、C2、C3和D1、D2、D3)。变量E有六个可能的取值(E1、E2、E3、E4、E5、E6)。

① 因素数和水平数

有五个因素(变量):

A、B、C、D和E

两个因素有两个水平(变量的取值)、两个因素有三个水平,一个因素有六个水平:

A:A1、A2

B:B1、B2

C:C1、C2、C3

D:D1、D2、D3

E:E1、E2、E3、E4、E5、E6

② 选择正交表

表中的因素数(变量)>=5

表中至少有二个因素的水平数(变量的取值)>=2

至少有另外二个因素的水平数>=3

还至少有另外一个因素的水平数>=6 n =(2-1)*2+(3-1)*2 +(6-1)*1 =9 L49(7^8)

image.png 或者根据混合正交表的方法,大于6个的有1个则有1个6^1, 同时大于2的有5个,则另一个元素的值需要大于2^5, 在正交表中进行搜索如下

image.png

行数取最少的一个:L49(7^8)或者L18(3^6 6^1))

结果:L18(3^6 6^1)(如下图)

image.png

测试用例减少数:216→18

加上一些可疑的情况(设为n个)为18+n,它比原来也少多了

但是这个设计的过程确实很花时间,要根据具体情况来选择

场景法

根据具体的使用场景来进行验证流程,比如通常我们的oa审核,或者发稿审核的流程则主要是根据场景来进行设计,主流程和分支流程都要涉及,但是这个方法不足之处就是无法验证单个功能点

所以总的来说,没有任何一种方式可以完全的覆盖,需要结合多种方式才能更加全面的设计出测试用例。