本课程包括高级策略,它将帮助您开发更健壮、可重用的的测试套件。

本章包含:

创建可重用(Modular)的测试套件

在大多数情况下,可能希望通过其他测试套件创建可重用的测试套件。常见示例是记录到网页的测试套件。一旦创建了这样的测试套件,则其他测试套件可以在需要登录的不同场景中使用它。

对于可重用的测试套件的创建和使用,两个 SOAtest 的功能尤其有用:

  • 引用的测试套件:一旦创建了可用的模块或测试套件,则其他测试套件也可以引用它。
  • 变量:可以使用变量参数化测试,该参数可以从中心位置设置特定值,从测试(例如,通过数据库工具)提取,或者从数据源设置。

该课程阐明了如何将这两个功能用于创建和使用可用的测试套件。简单地说,我们将使用存储的 web 服务;然而,下面的原则和步骤仍然可以应用于您创建的任何场景。

若要创建可用的测试套件:

  1. 创建一个名为 ReusableModule.tst 空的测试套件(.tst)文件,如下所示:
    1. 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file
    2. File name下,输入 ReusableModule
    3. 单击 Next
    4. 选择 Empty,然后点击 Finish
  2. 按照以下步骤创建一个 SOAP 客户端测试。
    1. 展开 ReusableModule.tst Test Case Explorer 节点。
    2. 右键单击 Test Suite:Test Suite 节点,然后选择 Add New> Test
    3. 在打开的对话框中,选中 SOAP Client,然后单击 Finish



  3. 配置 SOAP 客户端测试,如下所示:
    1. 在测试面板的 WSDL 选项卡中,为 WSDL URL 输入 http://localhost:8080/parabank/services/store-01?wsdl



    2. Request 选项卡中,将 Operation 设置为 getItemByTitle



    3. 将变更保存到 SOAP 客户端工具中。
  4. 定义一个变量,如下所示:
    1. 双击 Test Suite:Test Suite 节点,打开测试套件配置面板。
    2. Variables 选项卡中,单击 Add 按钮。
    3. 在对话框的 Name 字段,输入 title variable
    4. Type 更改为 String
    5. 保持选项 Use value from parent test suite (if defined)。这将允许变量使用引用该测试套件的测试套件中的设置的值。如果选择项更改为 Use local value,则变量的值将始终为 Value 字段中指定的值。
    6. 输入 PowerBuilder 作为 Value。这是默认值,在 SOAtest 没有找到名为 store ,其列名为 title的数据源时使用该值。



    7. 然后单击 OK
    8. 保存测试套件配置变更。
  5. (如果可用)配置 SOAP 客户端测试,以使用特定的数据源值,如下所示:
    1. 在 SOAP 客户端的测试配置面板中,跳转至 Request tab, 为 titleKeyword选中框,然后将 Fixed 更改为 Parameterized
    2. 在组合框中选择 title variable



    3. 将变更保存到 SOAP 客户端工具中。
  6. 选择 ReusableModule.tst,然后单击 Test 工具栏按钮,运行测试套件。
  7. 双击 SOAP 客户端测试的 Traffic Viewer 节点查看流量。注意,使用的 titleKeyword 为 PowerBuilder。SOAtest 使用的是默认变量值,因为它没有找到特定的数据源(因为我们仍然没有创建它)。



  8. 创建一个名为 TestStoreTitles.tst 的空的测试套件(.tst)文件,如下所示:
    1. 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file
    2. File name下,输入 TestStoreTitles
    3. 单击 Next
    4. 选择 Empty,然后点击 Finish
  9. 定义一个变量,如下所示:
    1. 双击 TestStoreTitles.tst> Test Suite:Test Suite 节点,打开测试套件配置面板。
    2. Variables 选项卡中,单击 Add 按钮。
    3. 在对话框的 Name 字段,输入 title variable
    4. Type 更改为 Data Source
    5. Data SourceName 输入 store ,为 Column Name输入 title



      注意,该测试变量将覆盖在引用 .tst 文件中定义的字符串测试变量。
  10. 然后单击 OK
  11. 将数据源添加到该测试套件中,如下所示:
    1. 右键单击 TestStoreTitles.tst> Test Suite:Test Suite 节点,然后选择 Add New> Data Source
    2. 选择 Table,然后单击 Finish
    3. 在数据源配置面板中,将数据源名称更改为 store
    4. 选择 First row specifies column names
    5. 添加命名为 title的列。
    6. 向该列添加两个值:LinuxC++



    7. 保存数据源变更。
  12. 配置该测试套件,以应用在本练习中创建的第一个测试套件,如下所示:
    1. 右键单击 TestStoreTitles.tst> Test Suite:Test Suite  并选择 Add New> Test Suite
    2. 选择 Reference Test (.tst) File
    3. 单击 Next
    4. 从 SOAtest 工作空间中选择 ReusableModule.tst 文件。
    5. 单击 Finish
  13. 选择 TestStoreTitles.tst,然后单击 Test 工具栏按钮,运行当前测试套件。
  14. 双击 Traffic Viewer 节点,以查看流量。



  15. 验证此 Linux,然后将 C++ 作为 titleKeyword 使用。

测试成功或失败之前一直循环 - 使用测试流逻辑

在大多数情况下,您可能希望 SOAtest 在某个条件满足之前反复执行某个操作。测试套件流逻辑允许对此进行配置。

SOAtest 允许在两个主测试流类型之间进行选择:

  • While variable: 在满足变量条件之前,反复执行某个操作。
  • While pass/fail: 反复执行某个操作,直到测试套件中的一个测试(或每个测试)通过或失败(取决于“loop util”设置中选择的内容)。注意,如果选择该选项(例如,该选项设置为其中一个测试成功之前一直循环),并且满足了整个循环条件(如,一个测试成功),则出现故障的测试将标记为成功。  如果没有满足整个循环条件(如,没有测试成功),则失败的单个测试将标记为失败。  无论循环条件是否满足,控制台都将显示哪些测试通过了,哪些测试失败了。

要查看 while pass/fail 逻辑如何允许您在达到指定的价格值之前进行测试套件循环。

  1. 创建一个名为 TestFlowLogic.tst 的空的测试套件(.tst)文件,如下所示:
    1. 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file
    2. File name下,输入 TestFlowLogic
    3. 单击 Next
    4. 选择 Empty,然后点击 Finish
  2. 展开测试套件,打开测试套件配置面板,然后双击 Test Suite:Test Suite 节点。
  3. 打开 Execution Options> Test Flow Logic 选项卡。
  4. Flow type 设置为 While pass/fail
  5. Maximum number of loops 设置为 20
  6. Loop until 设置更改为 One test Succeeds



  7. 保存测试套件配置设置。
  8. 按照以下步骤创建一个 SOAP 客户端测试。
    1. 右键单击 TestFlowLogic.tst> Test Suite: Test Suite 节点,然后选择 Add New> Test
    2. 在打开的对话框中,选择 SOAP Client,然后单击 Finish
  9. 配置 SOAP 客户端测试,如下所示:
    1. 在测试配置面板的 WSDL 选项卡中,为 WSDL URL 输入 http://localhost:8080/parabank/services/store-01?wsdl



    2. Request 选项卡中,将 Operation 设置为 getItemByTitle



    3. 对于 titleKeyword,选中框,然后输入 PowerBuilder 作为值。



    4. 将变更保存到 SOAP 客户端测试。
  10. 为该测试创建一个回归控制,如下所示:
    1. 右键单击 SOAP Client 测试节点,并选择 Create/Update Regression Control
    2. 选择 Create Regression Control
    3. 单击 Finish
  11. 修改回归控制中的预期价格,如下所示:
    1. 双击新建的 Diff control 节点,打开 Diff 工具编辑器。



    2. 修改 price 元素中的值。多次调用 getItemByTitle 后,书店服务将书的价格增加到 $1.00,因此根据该教程中运行测试的次数,当前价格可能与显示的价格不同。



  12. 通过选择测试套件节点,并单击 Test 工具栏按钮,运行当前测试套件。即使特定测试失败,测试套件也将成功,因为在预期响应中输入价格在循环 20 次之前会达到该值。可以在控制台选项卡看到以下信息:


    是否比预期价格高?

    调用 getItemByTitle 的次数越多,价格就会上涨得越多。若要降低价格,重启 Parabank 服务器并重新运行调用 getItemByTitle 的 SOAP 客户机。
  13. 双击之前创建的 Diff Control 节点,重新打开 Diff 工具编辑器。
  14. 调整价格,使测试在达到指定价格之前将完整循环 20 次。
  15. 再次运行测试套件。测试套件将失败,因为价格在完整循环 20 次后也不会达到指定价格。

使用脚本扩展 SOAtest

如果有一个测试要求,它要求您向测试用例中添加自定义功能或逻辑,则 SOAtest 允许您轻松地将自定义脚本集成到您的测试环境中。

使用 SOAtest 的 XML 断言器,可以让您将编写的自定义脚本集成到 SOAtest 中。这意味着大多时候都可以轻松地处理任何测试情况,即使 SOAtest 的当前工具集不直接支持该情况。

在该示例中,您将使用上一个示例中使用的书店服务来创建场景测试。在该场景中,您将根据书的标题搜索图书,然后验证该图书的价格是否是一个偶数。

当您完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst 文件中标题为 "自定义脚本”的测试套件。

  1. 选择 Test Suite: Functional Tests 节点(在 为单元测试创建测试套件中创建)并单击 Add Test Suite 工具栏按钮。



  2. 在添加测试套件向导中,单击 Empty,然后单击 Finish
  3. 双击新建的 Test Suite:Test Suite 节点(该节点已添加到测试套件树中),然后在测试配置面板中的 Name 字段输入 Custom Scripting ,然后单击 Save
  4. 选择 Test Suite: Custom Scripting 节点,然后单击 Add test or output 按钮。



  5. 在添加测试向导中,在右侧选择 SOAP Client ,然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
  6. 双击 测试1:SOAP Client 节点,该节点在 Test Suite: Custom Scripting 节点下方,然后在右侧 GUI 面板中的 Name 字段输入 Validate Price Value
  7. 在测试配置面板的 WSDL 选项卡中,将 http://localhost:8080/parabank/services/store-01?wsdl 输入到 WSDL URL 字段中。
  8. 打开 Request 选项卡,然后从 Operation 下拉框选择 getItemByTitle
  9. SOAP body 选项卡中,单击 getItemByTitle ,并启用 titleKeyword 选项。
  10. 从下拉菜单中选择 Fixed ,然后输入 Linux 作为值。
  11. 单击 Save工具栏按钮。



  12. 右键单击 Test1:Validate Price Value 节点,然后选择 Add Output
  13. 在 Add Output 向导中,在左侧选择 Response> SOAP Envelope ,在右侧选择 XML Assertor ,然后单击 Finish。这告诉 SOAtes 将 XML 断言器链接到 SOAP 客户机的 XML 响应输出中。



  14. 打开 XML 断言器测试面板中的 Configuration 选项卡,然后单击 Add 按钮。
  15. Select Assertion 对话框中,展开 Value Assertion 节点,选择 Custom Assertion,然后单击 Next 按钮。



    然后,该自定义断言对话框将显示 XML 消息树视图,您可以从中选择要执行的单个值。
  16. 在 XML 树视图中选择 price 元素,然后单击 Finish 按钮。



    测试配置选项卡将填充自定义断言。
  17. Language 下拉菜单中选择 Jython
  18. 在测试配置选项卡的 Text 字段中输入以下脚本,确保 price 值是偶数:

    def checkPrice(input, context):
    	price = float(input)
    	if price % 2 == 0:
    		return 1
    	else:
    		return 0
  19. Method 下拉菜单中选择 checkPrice()



  20. 单击 Save 工具栏按钮。
  21. 选择 Test 1 节点,然后单击 Test 按钮。注意,测试失败。如果双击测试的 Traffic Viewer 节点,则将看到 Linux 图书的价格是一个奇数,这就是导致测试失败的原因。

进一步扩展 SOAtest

SOAtest 的内置扩展框架可在脚本中使用,它允许在 SOAtest 内定义和使用自定义传输协议和消息实现。有关更多信息,请跳至 Parasoft> Help> Parasoft SOAtest Extensibility API

  • No labels