软件测试中通用数据生成方法
软件测试中非常重要的一个工作就是生成和维护测试数据,而这个工作恰恰是繁琐、重复而极易出错的。无疑找到一种通用的数据生成方法是极具意义的。本文阐释了如何使用脚本语言 PHP,加上简单的 ini 配置文件来达到这个目的的。
测试数据的生成和维护在测试中是非常重要的一环。很多用例实际上就是在修改所测程序的输入数据以确保程序的逻辑是按照自己的预期进行地。
比如我们测试一个用户登录系统,我们需要测试正常用户名 + 正常密码、正常用户名 + 错误密码、错误用户名 + 错误密码等基本的用例。在执行用例之前,就需要事先在数据库中设置好相应的数据,比如有一条记录为正常用户名 + 正常密码,然后我们在登陆界面输入该用户名和密码,预期结果为正常登陆。
不同的程序有不同格式的输入数据。但不管格式千变万化,我们总可以把它们归结为基于行和列的格式,就像数据库中的表一样。一行为一条记录,每一条记录都有相同的字段组成,每一个字段有自己的数据格式,字段和字段之间可能有分隔符。
我们可以在执行每一个用例时,手工修改数据,然后再执行用例。但这样存在一些问题。
1. 重复,数据重用性差。当前用例所需的数据很有可能在下个用例中被破坏了。
2. 效率低,尤其是当数据格式比较复杂,而且又需要大量数据的时候。
3. 不灵活。但数据发生变动的时候,数据的维护成本会很高。
4. 容易出错。
那有没有一种方法来解决这个问题呢?答案是肯定的。下面我们一起来实现一个简单的工具来解决这个问题。
需要实现的基本功能
首先我们来列举一下这个工具需要实现的基本功能:
1. 通用性:能够描述各种不同格式的数据。
2. 扩展性:当需要新的数据格式时,可以任意扩展。
3. 易用性:配置文件不易复杂。
4. 跨平台:我们需要一款可以在windows、linux、FreeBSD等系统下面运行的工具。
我们选择的开发工具
我们选择的开发工具是 PHP,配置文件采用了 ini 格式的文件。
之所以选择 PHP,是因为 PHP 是解释性脚本语言,其弱类型的特点以及强大的数组、字符串处理功能,十分适合我们这种应用场合。而且 PHP 有着良好的扩平台性,使用 PHP 开发的脚本基本上不用修改就可以在各个平台下面运行。
之所以选择 ini 格式的文件来作为配置,是因为 ini 文件相比较于 xml 而言比较简单。而且程序处理起来也非常的方便。在 PHP 中使用 parse_ini_file 的内置函数就可以解析整个 ini 文件。
配置语法
首先我们需要来定义一下我们的配置语法。前面讲到,数据是由行和列组成,每一列中有若干字段,每一个字段有自己的数据类型,有自己的前缀,字段和字段之间还有分隔符。我们最终的配置语法格式如下:
清单一:example.ini
[field1]
datatype="list, range=[10-20]"
prefix="int_"
postfix=" "
[field2]
datatype="list, range=[A-Z, a-z]"
prefix="char_"
postfix=" "
[field3]
prefix=""
datatype="list, range=[abc,123,xyz, 100-110]"
postfix=" "
[field4]
prefix=""
datatype="list, range=[100-200:2]"
postfix=" "
我们来解释一下语法的格式:
1. 字段名使用[]引起来。后面使用 key=value 的形式来定义这个字段的属性。
2. 字段有三个基本的属性:datatype 指定字段的取值范围,prefix 设定字段的前缀,postfix 则设定字段的后缀。
3. datatype 中最基本的数据类型就是 list,一个无所不包的列表。你所需要指定的就是这个字段的取值范围参数 range。
4. range 参数可以采用 1-10 这样的区间表达,也可以用逗号“ , ”来连接多个区间或者元素。区间还可以指定递增的步长。
上面的 example.ini 文件中定义了四个字段,字段和字段之间使用两个空格分隔,第一个字段的取值范围为 10-20,前缀为 int_,第二个字段取值范围是大小写英文字母,前缀为 char_,第三个字段取值范围是混合的,第四个字段则从 100 到 200,递增步长为 2 。