Ⅰ.18.2 如何实现Data-Driven Testing

Data-Driven Testing是一种将测试数据(输入,和期望输出)从只包含测试逻辑的测试脚本代码中区别开的方法。对于测试数据正常的实践是从一个文件或数据库中读取一项或记录,对于测试脚本使用数据来测试AUT,然后与期望值比较结果。

这种方法的一个好处是它使得修改测试而不修改测试案例的代码成为可能——相反的我们只是添加更多的测试中将要读取和处理的数据。对于那些有编码经验和无编码经验的测试工程师,它可以分离这些工程师创建测试的职责。那些有编码经验的可以创建测试脚本和编码测试逻辑,那些没有编码经验的可以创建和编辑用于测试AUT的测试数据。

Squish提供一个API 来处理测试数据(如testData),它使得创建数据驱动的测试更容易。这里我们将了解一下如何使用Squish的脚本API来读取和使用测试数据,假定已经导入或拷贝测试数据到testData路径下。

测试数据常常以tab格式包含数据。Squish可以读.tsv(以tab隔开值格式)文件,.csv(以逗号隔开值格式),和.xls(微软Excel表格格式——但非.xlsx格式)。.csv和.tsv文件,Squish假设它们使用UTF-8编码格式——测试脚本也使用这个编码格式。在.tsv文件中,以新的一行隔开记录,以tab隔开区域块。第一条记录用以描述列。这里有个.tsv数据文件的例子——addresses.tsv——用‘\t’描述tab,新的行以'\n'结尾。

First Name\tLast Name\tAddress\tEmail\tNumber\n
Max\tMustermann\tBakerstreet 55\[email protected]\t1\n
John\tKelly\tRhodeo Drv. 678\[email protected]\t2\n
Joe\tSmith\tQueens Blvd. 37\[email protected]\t3\n
每个区域块(列)以tab隔开,每一行就是一个新的记录。作为.tsv(和.csv)文件的共同实践,第一行不是这种数据,而是列名字(‘First Name’,‘Last Name’等)。

下面有个例子读取每条记录并在Squish的log中打印它的值:

for record in testData.dataset("addresses.tsv"):
    firstName = testData.field(record,"First Name")
    lastName = testData.field(record, "Last Name")
    address = testData.field(record, "Address")
    email = testData.field(record, "Email")
    test.log("%s %s, %s; email: %s"%(firstName, lastName, address, email))
注意到我们通过区域块的名字访问数据,因此我们在测试案例代码中使用的名字必须与测试数据文件中的第一行匹配。同样的,尽管数据在结尾有一个‘Number’区域,我们不需要可以忽略它。

典型的例子:使用testData.dataset函数找到测试数据文件,该函数在标准路径下搜索测试数据,并返回一个包含记录的数组。(也可以将这个函数的参数设为包含路径的文件名——例如,findFile返回的值),然后使用testData.field 函数来访问某一条记录中单个区域块的内容。通过使用一个for循环可以遍历testdata中每条记录——不需要提前知道他们有多少条记录,因此如果记录发生删除或者添加代码不受影响。当然了,在实际测试中我们将会添加数据到AUT,并比较期望值和实际值,而不是只是打印数据到log中。

猜你喜欢

转载自blog.csdn.net/dzh0622/article/details/50463162
今日推荐