数据驱动测试是一项单个测试脚本能够重复地使用不同的输入和响应数据的技术,这些数据来源于一个预定义的数据集。数据驱动测试技术在自动化测试领域有着非常重要的地位,我们可以通过它来实现更加高效和准确的测试运行。
1.数据驱动测试简介
数据驱动测试是一项单个测试脚本能够重复地使用不同的输入和响应数据的技术,这些数据来源于一个预定义的数据集。数据驱动测试技术在自动化测试领域有着非常重要的地位,我们可以通过它来实现更加高效和准确的测试运行。
当你通过数据来驱动一个测试脚本时,脚本将使用变量作为应用的关键输入。通过使用变量,脚本能够使用来自外部的数据代替应用测试中的文字值。数据驱动测试使用来自数据池的数据作为测试的输入。一个数据池是相关数据记录的集合,在脚本回放时数据池能够为测试脚本提供实际的测试数据。
数据驱动测试在数据与测试脚本之间放置了一个抽象的层次,这样可以消除测试脚本中的常量值。因为数据被从测试脚本中分离出来了,所以你可以:
- 在不影响测试脚本的情况下,修改测试数据。
- 通过修改数据而不是测试脚本来添加新的测试用例。
- 在多个测试脚本之间共享测试数据。
下面的两个图中,上边的图显示了一个使用硬编码的测试脚本,脚本中的测试数据是直接写在代码中的。而下边的图显示的是一个数据驱动的脚本,它的测试数据是来自于一个外部文件 - 数据池的。 图1将测试数据直接写在代码中的测试

图2 使用数据池的数据驱动的测试

下面的例子说明了数据驱动测试能够解决的问题:
问题:在测试录制过程中,你使用员工的唯一社会保险号为一个新的员工创建了一个个人文件。每次测试运行时,都会提示你数据库中已经存在了相同社会保险号的记录。
解决方法: 你能够使用数据驱动的测试来向应用提供不同的员工数据,包括社会保险号。
问题:在你录制测试时,你删除了有一条记录,在测试运行时,测试工具将试图删除相同的记录,系统会提示"记录无法找到"的错误信息。
解决方法: 你可以在测试回放中,使用数据驱动的测试来引用不同于在录制时删除的记录。
本本接下来的内容将具体介绍如何在 IBM Performance Tester 中使用数据驱动的测试。
2 IBM Rational Performance Test的数据池
数据池是一个测试数据集合,它能够为测试回放提供不同的数据值。你可以使用数据池来提供真实的数据,以便为被测试应用施加具有现实意义的压力。
IBM Rational Performance Tester 中通过数据池来实现数据驱动的测试。在模拟用户执行性能测试时,数据池将为测试提供变量化的数据。
在被测试应用的一个会话期间,测试人员实际上使用了真实用户将使用的特性,从一个被录制的会话中,一个包含了测试人员输入的精确数据的测试被生成。
例如,为了对基于 Web 的购物应用创建一个性能测试,测试人员必须模拟使用应用的各种角色的操作和输入适当的数据。
在测试的回放阶段,测试人员可能需要数百个交易实例同时运行,而对每一个实例可以有不同数量的模拟用户。为了在回放期间模拟上百个分离的用户,测试人员应该创建数据池。
在 Performance Tester 中数据池包含三个结构元素:
- 等价类。一个包含数据范围的数据池子集,当被提交到一个测试时,产生等价的结果。一个数据池必须至少包含一个等价类。
等价类对于低级别的测试是很重要的。为了性能测试的目的,你可以将等价类想象成一个被命名的行的索引。 一个性能测试能够以三种模式之一打开一个数据池,这取决于虚拟用户如何访问数据池:私有的、在一台机器上共享的和一台机器上分段的。在私有和共享模式下,等价类被忽略,但是分段模式下需要数据池仅仅包含一个等价类。由于这个原因,如果你计划使用数据池,推荐大家添加一个单一的等价类到数据池。
- 记录。.一行数据,行是通过以 0 开始的等价类进行索引的。
- 变量。一个命名的数据列。数据存在于列中。
如下图所示,数据池编辑器以一个类似电子表格的形式显示数据。右键点击一个单元格打开弹出菜单,这个菜单允许你添加或者维护上面提到的数据池结构元素。你能够通过在单元格中输入来添加数据。 图3

当你创建一个数据池时,你可以选择从外部的电子表格文件(CSV)中将数据导入到数据池中。对于包含大量数据的数据池来说,这个方式是被推荐的。数据池编辑器适合于少量数据的输入和修改单个的数据值。
3 在IBM Rational Performance Test 中使用数据驱动测试
在 IBM Performance Tester 中使用数据驱动测试的过程主要包括以下的步骤:
1. 创建并编辑数据池:可以创建空的数据池,然后输入数据值,也可以从外部的数据文件将数据导入到数据池。
2. 为测试添加数据池:数据池可以是私有的或者是共享类型的,在你能够在测试脚本中引用数据池之前,你必须为测试添加你想要使用的数据池。
3. 将测试中的变量与数据池中的列进行关联:将测试脚本中的某些变量与数据池中的某些列进行映射。
3.1创建并编辑数据池
使用数据驱动测试的第一步是创建测试脚本能够使用的数据池。本小节将详细介绍创建和编辑数据池的具体操作步骤和方法。
3.1.1 创建数据池
数据池包含当测试运行时所需要的数据。
为了创建一个数据池:
1. 打开测试透视图。
2. 在测试导航器中,右键点击一个项目,选择新建->数据池,新建数据池对话框打开。 图4

3. 在已存在项目的列表中,点击一个你想要存储数据池的项目:项目的名字出现在输入或者选择父文件夹域中。你能将数据池存储在任何种类的项目中。数据池不需要被存储在使用其的测试项目中。 图5

4. 在文件名域输入一个数据池文件的名字,如果你想创建一个空的数据池,直接转到最后一步。如果你想为数据池提供一个描述或者使用已有的包含数据的 CSV 文件对数据池文件进行初始化,继续下一步。 图6

点击下一步。一个对话框打开允许你描述数据池。 图7

5. 点击下一步。一个对话框打开,允许你使用一个已存在的 CSV 文件初始化数据池。 图8

6. 在 CSV 文件域,输入CSV文件的名字,或者点击浏览来找到一个文件。
7. 如果在 CSV 文件中的数据与你的计算机上的编码不一致,从选择导入编码下来框中选择正确的编码。 图9

8. 文件的第一行能够包含变量(列)名。如果是这样的话,你需要选中第一行包含变量名和建议类型选项,如果这个选项没有被选中,列名被命名为变量1… 。你能够通过数据池编辑器很容易的改变列名。 图10

9. 在 CSV 文件的每一行的第一列能够包含一个等价类(行)名。例如,在 CSV文件中的每一行的第一列包含名字 row ,数据池将有一个单一的命名为 row的等价类,数据池记录(行)将通过 row::0、row::1 依此类推索引。
10. 点击 完成。
新的数据池在数据池编辑器的概述标签中打开。 图11

3.1.2 打开数据池
查看或者修改一个数据池的内容。
为了打开一个数据池:
1. 在测试导航器中,展开包含数据池的 Java 项目。 图12

2. 从测试资产列表中双击数据池:数据池在概述标签页中打开。
3. 点击编辑面板上的数据池标签。
3.1.3 编辑数据池
通过和编辑一个电子表格近似的方式,你能够添加、修改或者从数据池删除数据。
当你右键点击数据池的编辑单元格时,你能够看到数据池编辑弹出菜单,如下图所示。 图13

在你向一个数据池添加数据之前,你必须至少包含一个等价类(被命名的行索引)和一个变量(列)。上图显示了数据池包含一个单一的等价类(saleItem),三个变量和很多条记录。为了向数据池添加数据,你可以在一个单元格中输入数据。你也可以很容易的删除、修改数据。同样你也可以删除列、重命名列等操作。
为了向数据池中添加一个结构元素,右键点击数据表单元格并选择下列之一。


3.1.4 插入一个 CVS 文件到一个数据池
如果你需要一个数据池保存大量的数据记录,最快速的方法时使用一个外部的程序(比如 Rational TestManager、你的数据库、电子表格)来创建一个通用的电子表格。
你不能向一个已存在的数据池导入数据,但是你可以在创建一个数据池时,使用 CSV 文件初始化数据池。下面是具体的步骤。
1. 使用一个电子表格或者一个定制的工具或脚本,创建一个包含测试数据的 CSV 文件。以下为可选的步骤,文件内容的第一行能够包含变量的描述性的名字,在每一行的第一列包含一个等价类(行)的名字。例如下图。 图17

如下图所示,这个文件使用了单一的等价类 saleItem 、三个数据列(变量)和 9 条记录 生成了一个数据池,记录是通过saleItem::0到saleItem:8 索引的。 图18

被性能测试使用的数据池应该仅仅包含一个等价类。
2. 在数据池创建对话框的最后一个页面,找到一个 CSV 文件,并将其内容导入到数据池中。
3.2为测试添加数据池
如果一个测试使用数据池,这个测试必须包含一个到数据池的引用。
为了让一个测试使用数据池:
1. 打开测试。
2. 在测试内容区域,右键点击测试的名字,并选择添加->数据池。导入数据池窗口打开,列出所有在你的工作空间中还没有被这个测试使用的数据池。 图19

3. 通过点击包含你想要使用数据的数据池来选择它。
在所在文件夹区域列出了你所选择的数据池所在的项目。数据池的列名被列在右边区域的文本框中,并数据池的名字和描述被列在下面。
4. 打开方式决定了虚拟用户拥有数据池的视图。
选择下面其中一个:

5. 如果你想要在数据池的结束或者数据池的分段到达结尾时使测试失败,清除到达最后一行时回绕选项。如果这个选项被选中,在数据池的结束或者数据池的分段到达结尾时,测试从头开始获取数据。
6. 点击选择。一个对数据池的引用被添加到了测试,并且测试详细信息被更新。 图20

7. 保存测试。
3.3 将测试中的变量与数据池中的列进行关联
从记录过程中,一个精确反映你与应用程序交互的测试被生成。如果你运行一个没有进行修改的被生成的测试,测试使用你录制这个测试时的精确数据。
例如,假设你已经录制了一个对员工数据库搜索"张三"的一个测试。如果你对测试不进行修改,你使用10个虚拟用户运行测试,每一个虚拟用户都在查许"张三"。这也许并不是你想要得到的结果。相反,你想要的测试数据是:每个测试实例应该查许不同的名字。你能通过使用一个数据池来实现这一点。
下图显示了当你启动记录器并输入www.ibm.com/us/ 时产生的测试。 图21

为了帮助你使用数据池,测试编辑器使用带有颜色的代码,并提供了导航助手:
- 当你点击测试内容下面的测试名时,测试详细信息包括了一个能够被测试使用的数据池的表。你能够通过双击表中适当的行来直接导航到一个数据池。
图22
- 当你点击一个页面时,页面的详细信息包括了一个测试数据的列表,列出了数据池的候选和在页面中的数据池数据。你能够通过双击表中适当的行来直接导航到一个数据池的值或者候选。
图23
- 当你展开一个页面时,一个黄色突出指示出包含了数据池数据或者候选(绿色)或者关联数据(红色)的页面请求。
图20
- 当你点击一个高亮的请求时,数据池候选使用绿色的字母被突出出来。关联数据用红色字母突出出来。
图24
- 如果一个高亮的请求包括你已经和数据池的列进行关联的请求值,这些值被用暗绿色底白字显示。
图25
- 同样,页面的测试数据表也使用数据池信息的来更新(绿色字母)。
图26

为了使你的测试使用变量数据代替特定的值,你应该将测试中的值与数据池中的列进行关联。
下面的过程假设你想使用的数据池已经存在,并且你已经添加了一个对数据池的引用到你的测试。
为了将测试中的值与数据池中的列进行关联:
1. 打开测试。
2. 定位并点击一个包含你想要用变量数据代替一个数值的请求。
点击一个测试页面,显示给你一个列有在这个页面中任何数据池候选和关联的数据。(为了在这个表中和数据池候选一样显示关联数据,右键点击测试任何一个测试数据表,并选择显示引用)。引用是以红色字母显示的。 图27

3. 如果你想要的数据池值是已经被分配给一个数据池候选的一个字符串的一部分,你必须删除浅绿色的高亮显示:右键点击,并选择清除引用。例如,如果你在你的测试中对 doe 和john 进行查询,在你的测试中的数据池候选将以 doe%2C+john 格式出现。如果,你想将doe 和 john 分别关联不同的数据池列,你首先必须删除浅绿色的高亮。
4. 高亮显示值:按住鼠标左键,托拽至需要高亮的值的上面。
5. 右键点击高亮值,并选择代替从 > 数据池变量。
选择数据池列对话框打开。 图28

如果你想使用一个没有列出的已有数据池,点击添加数据池按钮。
6. 点击你想要关联到测试值的数据池中列的名字。
7. 点击 使用列。
为了表示关联已经被设定,被选测试值的高亮变为深绿色,并且测试页面的数据池表被更新,如下图所示。 图29

8. 如果你需要的话,可以重复这些步骤多次,并保存测试。
使用场景:创建一个数据池并向数据池添加数据
本试验的目的是回顾如何为测试创建一个数据池,并手工的向数据池中添加数据。
步骤:
1. 打开一个项目,可以使用前一章试验中所创建的项目。

2.鼠标右键点击项目 ProjectTest ,选择新建->数据池。

3.新建数据池对话框打开,在文件名域中输入datapool1 。点击下一步。

4.点击下一步。

5.点击完成。

6.数据池 datapool1出现在测试导航器的ProjectTest 项目中。

7.点击右边数据池的数据表标签,一个表格显示出来。

8.鼠标右键点击表格的任意位置,选择添加等价类选项。

9.添加等价类对话框打开,保持缺省值,点击确定。

10.数据池的第一个等价类被创建。

11.鼠标右键点击表格的任意位置,选择添加变量选项。

12.添加变量对话框打开。在名称域输入密码,在类型域输入string。点击确定。

13.数据池列密码出现。

14.重复上面的操作,添加列用户名。

15.添加一行记录,鼠标点击用户名下的单元格,输入zhang,同样的操作,在密码下面的单元格中输入 zhang 。

16.鼠标右键点击表格的任意位置,选择添加记录选项。

17.添加记录对话框出现,点击确定。

18.在表格中出现了一个新的等价类 EquivalenceClass1::1,重复输入内容的操作,分别输入三条记录。

19.保存测试。

到此为止,我们已经为数据池 datapool1添加了四条记录。
使用场景:将测试中的值与数据池的列进行关联
本试验将会录制一个登陆旅游网站的测试,并将测试中记录的用户名和密码值与试验1中创建的数据池datapool1 的两个列进行关联。
步骤:
0. 打开一个测试项目。我们打开试验1使用的 ProjectTest 项目。选中项目,选择新建->记录性能测试选项。

1. 在记录文件名域输入test1.rec ,点击完成。

2. 录制开始,在打开的浏览器的地址栏输入 http://localhost:9080/ab/main.screen 。网站主页显示出来。

3.点击主页左上角的 Sign On 链接,进入 Sign In 页面。点击 Sign In 按钮。

4. 登陆成功页面出现。关闭浏览器。停止录制。

5. 测试 test1 生成,在测试编辑器区域的测试内容中,显示出三个页面。

6. 点击 Sign On 页面,测试元素详细信息区域的测试数据部分,显示出三个可以进行关联的测试值,这里我们将关联j_username 和 j_password 的值。

7. 鼠标双击 j_username 行,j_username 的表达式数据显示出来,j_username 的值j2ee是高亮的。

8.鼠标右键点击,选择 从以下位置替换->数据池变量。

9.选择数据池列对话框打开。点击添加数据池。

10.选择datapool1.datapool,点击选择。

11.选中用户名列,点击新建列。

12.这是测试数据值j2ee变为了深绿色的高亮,这表明关联已经设置好。

13.以同样的方法设定 j_password 的值 j2ee 与数据池密码列的关联。

14.保存测试。
到此为止,我们已经为录制的测试中的值建立了与数据池列之间的关联。
4.总结
本文对 IBM Rational Performance Tester 的数据驱动特性进行了详细的介绍。在进行大规模性能测试时,将不可避免的使用数据驱动的特性。测试扩展能是你创建出更加符合实际需要的性能测试。
关于作者
|