你可以通过从一个测试中提取值,然后在另一个测试中使用它们来参数化测试(用于数据驱动测试)。这是通过以下工具实现的:
例如,如果你想用测试 1 响应的 id 值参数化测试 3 的一个请求值,那么可以将该字段设置为 Parameterized...
然后使用数据源向导指示你想要使用来自测试 1 的 id 元素的值(它将存储在自动添加到测试套件的 XML 数据库工具中)。
下面的部分解释了在测试之间传递值的两种不同策略。除了这个 test-to-test 值传递外,还可以通过以下方式传递值:
- 通过变量:变量可用于参数化工具编辑器中所有或部分文本字段值。例如,文本字段可以引用当前套件定义的环境变量、数据源列、数据库列或变量。关于更多详情,请查阅 Parameterizing Tools with Variables。
- 通过脚本:这主要用于当你需要传递一个类型不是字符串的对象时。你只能通过脚本访问这些值。这是使用 com.parasoft.api.Context get(String) 和 put(String, Object) 实现的。 有关更多详情,请查阅 扩展和脚本基础。
将值从一个测试传递到另一个测试
Parasoft SOAtest 支持两种实现测试链接的主要方法(即,从一个测试中提取值,然后在随后的测试中使用):
使用数据库 - 捕获单次运行的值
当需要捕获来自单个测试执行的值以便后续重用时,此方法用于简单的情况。
例如,可以配置测试银行 Web 服务交易的测试套件。 该测试套件的测试 1 可以使用用户 ID 登录到服务中,然后 SOAP 响应将向测试 1 返回一个会话 ID。 可以将该测试套件的测试 2 配置为使用测试 1 的会话 ID,以执行交易。可以在测试套件中配置任何测试,以使用 SOAP 响应参数作为 SOAP 请求参数。
本例的测试场景可能如下所示:
- 测试 1:登录并检索 ID
- XML 数据库:提取用户 ID
- 测试 2:使用 ID 调用服务 1
- 测试 3:使用 ID 调用服务 2
- ...
在本例中,我们假设每次执行测试套件时,在整个场景中都使用一个不同的 Id,但是对于每个场景的运行,它都是一个单一的 ID。
需要注意的是,同样的原则适用于所有 SOAtest 的数据库工具(XML、浏览器、Header、JSON、对象、文本)。你可以将单个值提取到任何这些数据库工具中,然后在后续测试中使用它(作为参数化的值,以及通过使用 com.para-soft.api.ScriptingContext.getValue(String, String) 编写脚本)。 提取的值存储为字符串。
该功能的设计目的在于适应广泛的定制需求;上面给出的示例只是一个示例应用程序。
使用具有可写数据源的数据库 - 捕获值以在多次运行中进行迭代
当你需要提取一个未知计数的值列表,然后让测试或测试套件遍历已提取的每个值时,这种情况非常有用。假设以下测试场景:
- 数据源:
- 可写:Captured User IDs
- 设置测试:Get User IDs
- XML 数据库:提取用户 Ids 并将其写入可写数据源
- 测试 1:使用捕获的 Ids 调用服务 1(使用“Captured User IDs”参数化)
- 测试 2:使用捕获的 Ids 调用服务 2(使用“Captured User IDs”参数化)
- …
在这种情况下,“Get User IDs”测试假设一个服务返回一个用户 ID 列表(一个序列),并且每个用户 ID 都被提取并写入所需的可写数据源列。用户 Ids 的确切数量可以是未知的,也可以是可变的。“Get User IDs”测试执行和可写数据来源填充值之后,该场景继续到测试套件的其余部分(测试 1 和测试 2 ),并且后续测试用可写数据源参数化(例如,通过选择适当的数据源,然后对该数据源中的字段和列进行参数化)。这意味着测试可以遍历它,并使用“Get User IDs”写入其中的所有 IDs。换句话说,它们将对检索到的每个 ID 执行。
如果生成值的测试一次检索一个值,但是在一个数据源上迭代,并将提取的值存储到一个可写数据源中,则可写数据源非常有用。在这种情况下,一个示例测试场景可能是:
- 数据源:
- 表格:Usernames
- 可写:Captured User IDs
- 设置测试:获取和存储用户 ID(用户名参数化)
- XML 数据库:提取用户 ID 并将其写入可写数据源
- 测试 1:使用捕获的 IDs 调用服务 1(使用“Captured User IDs”参数化)
- 测试 2:使用捕获的 IDs 调用服务 2(使用“Captured User IDs”参数化)
- …
在本例中,“获取和存储用户 ID”测试步骤将运行多次:每次运行“Usernames”数据源提供的每个用户名。对于每次运行,它都将向“Captured User IDs”数据源写入一个用户 ID。现在“Captured User IDs”可写数据源被填充(使用用户 Id),测试套件的其余部分将使用这些 ID 执行测试 1 和测试 2。
有关可写数据源的详细信息,请查阅 Configuring a Writable Data Source。
然后使用数据源向导指示要使用哪个元素的值。或者,你可以手动配置要存储到数据库或可写数据源的值,然后将响应与已保存的响应进行参数化。
除了这个 tool-to-tool 传递外,还可以通过以下方式传递值:
- 通过变量:变量可用于参数化工具编辑器中所有或部分文本字段值。例如,文本字段可以引用当前套件定义的环境变量、数据源列、数据库列或变量。关于更多详情,请查阅 Parameterizing Tools with Variables。
- 通过脚本:这主要用于当你需要传递一个类型不是字符串的对象时。你只能通过脚本访问这些值。这是使用 com.parasoft.api.Context get(String) 和 put(String, Object) 实现的。有关更多详情,请查阅 扩展和脚本基础。
惯例(一般经验法则)
惯例目的在于:
- 从消息中提取内容,只需将其作为场景的一部分,然后单独使用数据库。
- 提取一个值列表,然后让另一个测试迭代这些值并逐个使用它们,可以使用带有可写数据源的 XML 数据库。