本课程将介绍一些高级策略,这些策略将帮助您开发更健壮、可重用的测试套件。

本章包含:

创建可重用的(模块化的)测试套件

在许多情况下,您可能希望创建一个可由其他测试套件重用的测试套件。一个常见的示例是登录网站的测试套件。一旦创建了这样的测试套件,其他测试套件就可以在需要登录的各种情况下使用它。

两个 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 测试用例资源管理器节点。
    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。如果 SOQtest 没有找到名为 store 且列为 title的数据源,将使用该默认值。



    7. 然后单击 OK
    8. 保存测试套件配置更改。
  5. 如果可用,将配置 SOAP 客户端测试以使用指定的数据源值,如下所示:
    1. 在 SOAP 客户端测试配置面板中,跳转至 Request 选项卡,检查 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下,输入 ReusableModule
    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. 输入 store 作为 Data SourceName ,然后输入 title 作为 Column Name



      注意,该测试变量将重写引用 .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”设置中选择的内容)。注意,如果选择该选项(例如,该选项设置为其中成功之前一直循环),并且满足了整个循环条件(例如,测试成功),则出现故障的测试将标记为成功。  如果没有满足整个循环条件(如,测试没有成功),则失败的单个测试将标记为失败。  无论循环条件是否满足,控制台都将显示哪些测试通过了,哪些测试失败了。

要查看 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 次之前将达到预期响应中输入的价格。可以在 Console 选项卡中看到:


    Higher prices than expected?

    您调用 getItemByTitle 的次数越多,价格上涨的幅度就越大。要降低价格,请重新启动 Parabank 服务器,然后重新运行调用 getItemByTitle 的 SOAP 客户端。
  13. 双击以前创建的 Diff Control 节点,打开 Diff 工具编辑器。
  14. 修改价格,以使测试在达到价格之前将循环播放完整的 20 次。
  15. 再次运行测试套件。测试套件将失败,因为在循环 20 次之后,价格永远无法达到。

使用脚本扩展 SOAtest

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

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

此示例中,您将使用前面示例中使用的书店服务创建场景测试。在此方案中,您将按书名搜索一本书,然后确认该书的价格是偶数整数。

当您完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst 文件中标题为“Custom Scripting”的测试套件。

  1. 请选择上次练习的 Test Suite: Functional Tests 节点(在 为单元测试创建测试套件中所创建),然后单击 Add Test Suite 工具栏按钮。



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



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



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



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



    随后,Custom Assertion 对话框将显示 XML 消息的树状视图,您可以从中选择一个要执行的值。
  16. 在 XML 树状视图中选择 price 元素,然后单击 Finish 按钮。



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

    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