将数据源添加到测试套件之后,可以将数据源值与 SOAtest 工具一起使用,以进一步扩展测试套件的功能。数据源可用于参数化工具中的值,如 SOAP 客户机、消息传递客户机、浏览器回放工具、DB 工具、Diff 工具等等。可以配置 SOAP 客户机和消息传递客户机工具,将数据源值作为请求的一部分发送到服务器。然后可以配置 Diff 工具,将响应与数据源中的另一组值进行比较。
例如,考虑服务的功能测试,该服务接收 U.S. 首都城市的名称并返回相应州的名称。在本例中,有两个值不同的列的数据源。第一列包含城市作为值,第二列包含状态作为值,将被添加到测试套件中。可以将 SOAP 客户机工具配置为发送从第一列中提取输入的请求。然后将 Diff 工具配置为将实际响应与第二列中的输入进行比较。以这种方式使用 SOAP 客户机和 Diff 工具是功能测试中一个非常强大的选项,因为将循环并检查数据源每一行中的每个值。
了解数据源迭代
了解测试执行选项将如何影响数据源迭代是很重要的。关于测试执行设置的更多详情,请查阅 配置测试套件属性 - 测试流逻辑、变量等)。以下执行选项将影响数据源迭代:
- Individually Runnable: 当在测试套件的执行选项中选择 Individually Runnable 时,测试套件中的每个测试将遍历数据源的每一行,然后再继续下一个测试。
- Scenario: 当没有选择 Individually Runnable 时,测试套件中的每个测试都将在迭代到下一个数据源行之前执行。
例如,如果一个测试套件包含测试 A 和测试 B,它们都使用一个具有三行数据的数据源,则会发生以下执行模式:
- Individually Runnable: 测试 A:第 1 行,测试 A:第 2 行,测试 A:第 3 行,测试 B:第 1 行,测试 B:第 2 行,测试 B:第 3 行
- Scenario (Non-Individually Runnable): 测试 A:第 1 行,测试 B:第 1 行,测试 A:第 2 行,测试 B:第 2 行,测试 A:第 3 行,测试 B:第 3 行
如果使用 XML 数据库在测试套件中的测试用例之间传递值,那么无论是否选择 Individually Runnable ,都会自动将测试套件置于“场景模式”。数据源迭代的行为就好像没有选择 Individually Runnable 一样。有关使用 XML 数据库的更多详情,请查阅 XML 数据库。
配置 SOAP 客户机和 Diff 工具来使用数据源
若要配置 SOAP 客户机和 Diff 工具来发送和比较数据源值:
- 如果还没有这样做,请添加想要使用的数据源,如 在测试套件、项目或全局级别添加数据源中所述。
- 在测试用例资源管理器中双击所需的 SOAP Client 节点,并从右侧 GUI 面板中的 Data Source 组合框中选择适当的数据源。
- 除非先前向测试套件添加了数据源,否则 Data Source 组合框不会显示。如果只有一个数据源可用,SOAP 客户机工具将默认为该数据源。如果有多个数据源可用,SOAP 客户机工具将默认为 Tests 选项卡中列出的第一个数据源。
- 完成项目配置面板中 SOAP 客户机节点的其余字段,如 SOAP 客户端中所述。
- 选择 SOAP 客户机 节点并单击 Add Test or Output 工具栏按钮。将显示一个 Add Output 向导。
- 在 Add Output 向导中,从左侧窗格中选择 Request> SOAP Envelope ,从右侧窗格中选择 Diff ,并单击 Finish。将 Diff 节点添加到 SOAP 客户机节点。
- 双击 Diff ,打开工具配置面板。
- 从 Data Source 框中选择适当的数据源。你选择的数据源必须与为 SOAP 客户机指定的数据源相同。
- 在 Regression control source 框中,选择 Data Source。
- 在 Data Source Column 框中,从组合框中选择要 Diff 工具比较响应的列。
- 完成 Diff 工具配置设置,如 Diff中所述。
现在,你可以通过选择 SOAP 客户机节点并单击 Test 工具栏按钮。结果将显示在右边的 GUI 面板中。
参数化不同大小的数组
SOAtest 还允许映射数据源中的分层数据结构。
假设你有一个收集信息来构建家谱的 web 服务。发送的信息如下:
<ns1:People xmlns:ns1="http://www.example.org/ParentChildGrandChild"> <ns1:Person> <ns1:Name>GrandPa</ns1:Name> <ns1:Age>85</ns1:Age> <ns1:Child> <ns1:Name>Daddy</ns1:Name> <ns1:Age>55</ns1:Age> <ns1:Child> <ns1:Name>FirstSon</ns1:Name> <ns1:Age>25</ns1:Age> </ns1:Child> <ns1:Child> <ns1:Name>SecondSon</ns1:Name> <ns1:Age>22</ns1:Age> </ns1:Child> </ns1:Child> </ns1:Person> </ns1:People>
它表示一个如下族谱:
- GrandPa
- Daddy
- FirstSon
- SecondSon
- Daddy
如何设置一个“数组数据源”,该数据源可用于更改 XML 中的子代和子代的数量? 首先,设置数据源,然后使用它参数化表单输入,如下面的部分所述。
设置数据源
假设我们要发送以下 2 个家庭的家谱信息。
- GrandPa
- Daddy
- FirstSon
- SecondSon
- Daddy
- GrandMa
- Mommy
- FirstDaughter
- SecondDaughter
- FirstAunt
- SecondAunt
- FirstCousin
- SecondCousin
- Mommy
若要设置此场景的数据源:
- 创建一个 Excel 电子表格与 3 张表,其表名为:FirstGeneration, SecondGeneration, ThirdGeneration.
- 填写 FirstGeneration 表。
注意 SecondGeneration dsref* 列。 这就是我们如何表示 FirstGeneration 的子元素将来自 SecondGeneration 表。 (dsref* 表示 Data Source REFerence。) - 填写 SecondGeneration 表。
注意 ThirdGeneration dsref* 列。还要注意 ParentIndex 列。ParentIndex 列的值指示与 SecondGeneration 相关的 FirstGeneration。
例如,Daddy 关联第一张 FirstGeneration 表或 GrandPa。Mommy、FirstAunt 和 SecondAunt 关联第二张 FirstGeneration 表或 GrandMa。 - 填写 ThirdGeneration 表。
再次注意 ParentIndex 列。注意,这里没有 ParentIndex 3,因为 FirstAunt 没有任何孩子。
参数化表单输入
改变 XML 中子代和子代的数量的下一步是参数化表单输入,如下所示:
- 创建一个新的空 .tst 文件,将其命名为
ArrayDataSource.tst
。 - 添加一个指向前面步骤中创建的 Excel 电子表格的 Excel 数据源。选择 FirstGeneration 作为工作表。
- 创建新的消息传递客户机。
- 如下消息传递客户机:
- 将 Schema URL 设置为
http://soatest.parasoft.com/ParentChildGrandChild.xsd
- 将 RtouterEndpoint 设置为
http://ws1.parasoft.com:8080/examples/servlets/Echo
- 将 Schema URL 设置为
- 设置表单输入,如下所示:
People- Person
- Name – Parameterized to: Name
- Age - Parameterized to: Age
- Child
- Name - Parameterized to: SecondGeneration:Name(SecondGeneration 表中的 Name 列)
- Age - Parameterized to: SecondGeneration:Age(SecondGeneration 表中的 Age 列)
- Child
- Name - Parameterized to: SecondGeneration:ThirdGeneration:Name(ThirdGeneration 表中的 Name 列)
- Age - Parameterized to: SecondGeneration:ThirdGeneration:Age(ThirdGeneration 表中的 Age 列)
- Person
- 运行测试。
在流量查看器中,XML 应该反映数据源中的家庭信息。