http://www.ibm.com/developerworks/cn/web/1410_dujing_matrixfortest/
在 Web 测试中,我们经常针对某个测试点进行多种场景测试,或者是重复性测试,或者与其他测试点交互测试模仿用户行为,这样就需要编写多条测试用例来完全覆盖。利用矩阵模式不仅可以缩小编写测试用例占用的时间和人力,而且对其测试结果易于追踪。
阵模式形象的可理解为表格,我们常用表格来记录复杂的数据,若将表格首行和首列的数据看成一个个简单的测试点,那除首行首列之外的表格里的数据就可以看成一个复杂测试用例期望执行的结果,那这个表就是一个容纳了很多测试用例的数据表。本文就矩阵模式在软件测试用例中的应用进行阐述,以帮助您了解如何巧妙的利用矩阵模式这种简单手段,更高效的记录测试用例,尤其是复杂场景的测试用例
矩阵模式对测试用例的重要性
在软件测试中,编写测试用例是必不可少的一环。理论上测试人员会根据产品设计文档等将测试点全部罗列出来,然后根据每个测试点设计不同的场景,逐一编写测试用例。但通过分析会发现某个测试点的场景很类似,编写的测试用例中有些步骤的重复率很高。而在实际测试中,这些重复性的步骤利用率并不高,有经验的测试人员无需逐条查看每一步骤,根据场景就可以执行类似测试用例。
针对这一情况,Ryan Davis 早在 2007 年就提出了矩阵模式,用矩阵模式记录测试用例,其实相当于把多条测试用例组合成一个复杂的产品检查清单,一方面节省了编写和维护测试用例的时间,提高工作效率;另一方面可以将传统的测试用例看起来简单化,增加易读性,直观的将功能点展现出来,方便测试人员全局追踪测试状态。
本文就矩阵模式在软件测试的应用展开,主要介绍矩阵模式在多个场景测试,重复性问题测试,交互测试的应用实例,以及改进的矩阵模式原理及其工具。
多个场景测试
在测试中经常会针对某一测试点设计不同的场景进行测试,以达到模拟用户使用的真正效果。比如数据输入测试,如密码输入域,一般会限制至少 6 位等条件。针对密码输入长度至少 6 位这一测试点,至少需测试以下四种场景:
- 不输入;
- 小于 6 位;
- 等于 6 位;
- 大于 6 位;
按照传统测试用例编写方式需要编写四条类似的测试用例,而且这四条的测试步骤几乎一样。如下表 1-表 4 所示:
表 1.密码输入域长度测试用例-不输入
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. No input in password field | |
3.Submit | Alert “password is not allowed blank” |
表 2.密码输入域长度测试用例-小于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with less than 6 digit in password filed | |
3.Submit | Alert “password length must be more than or equal 6 digit” |
表 3.密码输入域长度测试用例-等于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with 6 digit in password filed | |
3.Submit | Success |
表 4.密码输入域长度测试用例-大于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with more than 6 digit in password filed | |
3.Submit | Success |
分析这四个测试用例,发现除了第二步输入的参数不同之外,其余步骤都一样。我们可以把这一参数抽离出来,通过矩阵模式可以将测试用例简化表示,如下表 5 所示:
表 5.密码输入域长度测试用例
Test point | Expected result | Execute result |
---|---|---|
不输入 | Alert “password is not allowed blank” | |
小于 6 位 | Alert “password length must be more than or equal 6 digit” | |
等于 6 位 | Success | |
大于 6 位 | Success |
比较发现利用矩阵模式简单明了地将密码输入域长度的测试点列出来,为测试人员节省了编写测试用例的时间。理论上这种形式的测试用例不能够完全称为完整的测试用例,没有像传统的测试用例那样,将每一步骤都详细列出来,但实际上反而更适用,尤其是当某一测试点有一定数量级的测试场景需要测试时,或者某个测试用例有多个测试点时,通过矩阵模式制定这种形式的测试用例还是很值得的。
重复性问题测试
重复性问题是指对同一个测试点一直进行测试。如在某些软件中,有很多对象的属性是一样的,如 table,shape,chart 等,它们都有 color fill 属性,color 又可分为三种类型:theme color,standard color,custom color。按照传统的测试用例记录方法,测试人员必须针对每一个对象的 color fill 编写测试用例。如下表 6-8 所示:
表 6.Table Fill
Test steps | Expected result |
---|---|
1.Insert a table | Can insert normally |
2.Set theme/standard/custom color for table | Success |
表 7.Shape Fill
Test steps | Expected result |
---|---|
1.Insert a shape | Can insert normally |
2. Set theme/standard/custom color for shape | Success |
表 8.Chart Fill
Test steps | Expected result |
---|---|
1.Insert a chart | Can insert normally |
2. Set theme/standard/custom color for chart | Success |
分析这三个测试用例,我们可以将测试对象以及测试点抽离出来,通过矩阵模式可以将这些对象的 color fill 测试用例表示如下表 9 所示:
表 9.Table/Shape/Chart color Fill
Test object | Expected result | ||
---|---|---|---|
Theme color | Standard color | Custom color | |
Table | Success | Success | Success |
Shape | Success | Success | Success |
Chart | Success | Success | Success |
不难发现矩阵模式的测试用例形式上更加直观,更容易追踪测试状态。
交互测试
操作是用户使用软件很普遍的行为,而且用户不可能像测试人员一样根据测试步骤按部就班的操作,所以多种操作交互执行测试就变得非常重要。通过矩阵模式对这些常用场景进行不同的组合测试,可以达到一般用户使用的效果测试,更好的从用户角度发现产品缺陷。例如在办公软件中,Font style 是用户经常用到的,有 bold,italic,underline 等。利用矩阵模式可以将这三个属性进行组合测试,每种属性可以设置两种值,分别用 Y 和 N 来表示,如下表 10 所示:
表 10.Font style
No. | Bold | Italic | Underline | Expected result |
---|---|---|---|---|
1 | Y | Y | Y | |
2 | Y | Y | N | |
3 | Y | N | Y | |
4 | Y | N | N | |
5 | N | N | Y | |
6 | N | N | N | |
7 | N | Y | Y | |
8 | N | Y | N |
这种形式的测试用例将所有可能的组合都表示出来,达到百分之百的覆盖,提高了测试覆盖率。
改进的矩阵模式
不难从上面的多个场景测试,重复性问题测试以及交互测试中发现,所举的例子涉及的参数数量都比较少,如果一旦参数数量及其取值都达到一定数量级,就会产生太多的测试用例,这在实际的测试中是不可能做到的。如果可以保证一定的测试覆盖率的前提下,将这些测试用例压缩到一定比例,这将会大大的提高测试工作的效率。
在这里我们应用全对偶测试理论进行改进。全对偶的原则就是每个变量的每一个取值都必须与至少一个测试用例中其他变量的取值配对过一次。以交互测试中 Font style 举例说明,假设 bold,italic 和 underline 分别都有两个取值 Y,N,则两两配对如下表 11 所示:
表 11.All pairs
Variable 1 | Variable 2 | Value 1 | Value 2 | Appearance |
---|---|---|---|---|
Bold | Italic | Y | Y | Case 1 |
Bold | Italic | Y | N | Case 2 |
Bold | Italic | N | Y | Case 3 |
Bold | Italic | N | N | Case 4 |
Bold | Underline | Y | Y | Case 1 |
Bold | Underline | Y | N | Case 2 |
Bold | Underline | N | Y | Case 4 |
Bold | Underline | N | N | Case 2 |
Italic | Underline | Y | Y | Case 1 |
Italic | Underline | Y | N | Case 3 |
Italic | Underline | N | Y | Case 4 |
Italic | Underline | N | N | Case 2 |
通过全对偶方法将表 10 的测试用例压缩,用矩阵模式表示的测试用例如下表 12 所示:
表 12.Font style
No. | Bold | Italic | Underline | Expected result |
---|---|---|---|---|
1 | Y | Y | Y | |
2 | Y | N | N | |
3 | N | Y | N | |
4 | N | N | Y |
每个配对都在表 12 的测试用例中出现过一次,出现的情况可以参考表 11 的 Appearance 列。
为了利用全对偶方法产生组合测试用例,James Bach 使用 Perl 语言开发了一个全对偶工具,下面介绍一下如何使用这个工具产生组合测试用例。
第一步,无需安装,直接下载并解压到某个路径。下载地址:http://www.satisfice.com/tools/pairs.zip。
第二步,新建一个excel
文件,在excel
文件中列出测试用例的变量及其取值,如下图1
所示。并将其拷贝到text
文件中保存到与工具一样的路径下面并假设命名为Variable.txt
。这个文件可以随便命名,但不允许有空格存在名字中间。
图 1.Variable.txt
第三步,在 Dos 窗口下运行命令。切换到工具所在路径,输入 allpairs.exe Variable.txt > TestCase.txt 并回车。其中 Variable.txt 是第二步创建的,TestCase.txt 是用来存储产生的组合测试用例的文件,同样名字可以随便命名,但不允许名字中间有空格。
执行结束后,产生的组合测试用例及其每一个配对在测试用例中出现的情况都在 TestCase.txt 文件中,如下图 2 所示,其中 pairings 列是用来记录每一个测试用例包含的唯一配对数量,appearance 列是用来记录每一个配对出现的次数,cases 列是用来记录每一个配对出现在哪一个产生的测试用例中。
图 2.TestCase.txt
总结
利用矩阵模式的思想以及全对偶工具对测试用例进行编写和组织,能非常简单高效的覆盖产品功能测试点,增加了测试用例执行结果的可追踪性,尤其对于复杂的测试用例,可以一目了然的看到测试用例的测试点,全局的追踪测试状态,提高了工作效率。