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

章节目录:

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

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

两个 SOAtest 特性对于创建和使用可重用测试套件特别有用:

  • 引用的测试套件:一旦创建了可重用模块或测试套件,它就可以被另一个测试套件引用。
  • 变量:可以使用变量对测试进行参数化,这些变量可以从中心位置设置为特定值、从测试中提取(例如,通过数据库工具)或从数据源设置。

本课演示如何使用这两个功能来创建和使用可重用的测试套件。为简单起见,我们将使用存储 web 服务;但是,下面的原理和步骤随后可以应用于您创建的任何方案。

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

  1. 创建名为 ReusableModule.tst 的测试套件(.tst)文件,操作如下:
    1. 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件
    2. 文件名称下,输入 ReusableModule
    3. 点击下一步
    4. 选择,然后点击完成
  2. 如下创建一个 SOAP 客户端。
    1. 展开 ReusableModule.tst 测试用例浏览器节点。
    2. 右键点击测试套件: 测试套件节点,然后选择新建> 测试
    3. 在打开的对话框中,选择 SOAP 客户端,然后点击完成
  3. 如下配置 SOAP 客户端:
    1. 点击 WSDL 选项卡,输入 http://localhost:8080/parabank/services/store-01?wsdl WSDL URL。
    2. 点击请求选项卡,从操作下拉菜单选择getItemByTitle
    3. 将变更保存到 SOAP 客户端工具。
  4. 如下定义变量:
    1. 双击测试套件: 测试套件节点,打开配置面板的测试套件。
    2. 点击变量选项卡,然后点击添加
    3. 在对话框的名称字段,输入 title variable
    4. 类型下拉菜单中选择字符串
    5. 保留使用来自父测试套件 (如果有定义) 的值选项。这将允许变量使用在引用此测试套件的测试套件中设置的值。如果选择更改为使用本地值,则变量的值将始终为字段中指定的值。
    6. 字段中输入 PowerBuilder。如果 SOAtest 没有找到名为 store 且列为 title的数据源,将使用该默认值。
    7. 然后点击 OK
    8. 保存测试套件配置更改。
  5. 如果可用,将配置 SOAP 客户端测试以使用指定的数据源值,如下所示:
    1. 在 SOAP 客户端的测试配置面板中,转到请求选项卡,启用 titleKeyword,并从下拉菜单中选择参数化title variable
    2. 将变更保存到 SOAP 客户端工具。
  6. 点击 ReusableModule.tst,然后点击工具栏中的测试运行测试套件。
  7. 双击 SOAP 客户端测试的通讯报文查看器节点,查看通讯报文。注意,使用的 titleKeyword 为 PowerBuilder。SOAtest 使用默认的变量值,因为它没有找到指定的数据源(由于我们还未创建)。
  8. 请如下创建一个名为 TestStoreTitles.tst 的空的测试套件(.tst)文件:
    1. 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件
    2. 文件名称下,输入 ReusableModule
    3. 点击下一步
    4. 选择,然后点击完成
  9. 如下定义变量:
    1. 双击 TestStoreTitles.tst> 测试套件: 测试套件节点,打开配置面板的测试套件。
    2. 点击变量选项卡,然后点击添加
    3. 在对话框的名称字段,输入 title variable
    4. 类型下拉菜单中选择数据源
    5. 输入 store 作为数据源名称,然后输入 title 作为列名


      注意,该测试变量将重写引用 .tst 文件中定义的字符串测试变量。
  10. 然后点击 OK
  11. 添加数据源到测试套件中,如下所示:
    1. 右键点击 TestStoreTitles.tst> 测试套件: 测试套件节点,然后选择新建> 数据源
    2. 选择表格,点击完成
    3. 在数据源配置面板中,将数据源名称更改为 store
    4. 启用第一行指定列名
    5. 添加名为 title的列。
    6. 想该列添加两个值:LinuxC++
    7. 保存数据源变更。
  12. 配置该测试套件引用我们在该练习中创建的第一个测试套件,如下所示:
    1. 右键点击 TestStoreTitles.tst> 测试套件: 测试套件节点,然后选择新建> 测试套件
    2. 选择引用测试 (.tst) 文件
    3. 点击下一步
    4. 从 SOAtest 工作空间中选择 ReusableModule.tst 文件。
    5. 点击完成
  13. 点击 TestStoreTitles.tst,然后点击工具栏中的运行测试,运行当前测试套件。
  14. 双击通讯报文查看器节点,以查看通讯报文。
  15. 验证是否使用 Linux,然后将 C++ 用作 titleKeyword。

循环直到测试成功或失 - 使用测试流程逻辑

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

SOAtest 允许您在两种主要的测试流程类型之间进行选择:

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

要查看如何使用 while 通过/失败逻辑进行测试套件循环,直到达到指定的价格值为止。

  1. 按照以下步骤创建一个名为 TestFlowLogic.tst 的空测试套件(.tst)文件:
    1. 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件
    2. 文件名称下,输入 TestFlowLogic
    3. 点击下一步
    4. 选择,然后点击完成
  2. 展开测试套件,双击测试套件: 测试套件节点打开测试套件配置面板。
  3. 前往执行选项> 测试流程逻辑 项卡。
  4. 流类型下拉菜单中选择 While 通过/失败l
  5. 最大循环次数字段中输入 20
  6. 循环直到设置更改为一个测试成功
  7. 保存测试套件配置设置。
  8. 如下创建一个 SOAP 客户端。
    1. 右键点击 TestFlowLogic.tst> 测试套件: 测试套件节点,选择新建> 测试
    2. 在打开的对话框中,选择 SOAP 客户端,然后点击完成
  9. 如下配置 SOAP 客户端:
    1. 点击 WSDL 选项卡,输入 WSDL URL http://localhost:8080/parabank/services/store-01?wsdl
    2. 点击请求选项卡,从操作下拉菜单选择 getItemByTitle
    3. 启用 titleKeyword,选择固定值,然后输入 PowerBuilder 作为值。
    4. 将变更保存到 SOAP 客户端测试。
  10. 为该测试创建回归控制,如下所示:
    1. 右键点击 SOAP 客户端测试节点,然后选择创建/更新回归控制
    2. 选择创建回归控制
    3. 点击完成
  11. 在回归控制中修改预期价格,如下所示:
    1. 双击新建的比较控件节点,打开比较工具编辑器。
    2. 在 price 元素中修改值。在多次调用 getItemByTitle 之后,商店服务会将这本书的价格提高了 1.00 美元,因此,根据您在本教程中运行测试的次数,当前价格可能会与显示的价格有所不同。
  12. 选择测试套件节点,然后点击工具栏中的运行测试,运行当前测试套件。即使特定测试失败,测试套件也会成功,因为在循环 20 次之前将达到预期响应中输入的价格。可以在 Console 选项卡中看到:

    价格比期望值高?

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

使用脚本扩展 SOAtest

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

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

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

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

  1. 点击测试套件: 功能测试节点(在为单元测试创建测试套件中创建),然后点击工具栏中的添加测试套件
  2. 在添加测试套件向导中,选择,然后点击完成
  3. 双击添加到测试套件树中的新建测试套件: 将测试套件节点添加到测试套树,输入自定义脚本到测试配置面板中的名称字段,点击保存
  4. 点击测试套件: 自定义脚本节点,然后点击工具栏中的添加测试或输出
  5. 在添加测试向导右侧选择SOAP 客户端,点击完成。将 SOAP 客户端工具添加到测试套件。
  6. 双击测试 1: SOAP 客户端节点,该节点位于测试套件: 自定义脚本节点下,然后输入验证价格值到右侧 GUI 面板中的名称字段。
  7. 点击 WSDL 选项卡,在 WSDL URL 字段中输入 http://localhost:8080/parabank/services/store-01?wsdl
  8. 点击请求选项卡,从操作下拉菜单选择 getItemByTitle
  9. 点击 SOAP Body 选项卡,点击 getItemByTitle,然后启用 titleKeyword
  10. 从下拉菜单中选择固定值,然后输入 Linux 作为值。
  11. 点击工具栏中的保存
  12. 右键点击测试 1: 验证价格值节点,选择添加输出
  13. 在添加输出向导左侧选择响应> SOAP Envelope,开启选择 XML 断言器,然后点击完成。这告诉 SOAtest 将 XML 断言器链接到 SOAP 客户端的 XML 响应输出。
  14. 点击 XML 断言器测试配置面板中的配置选项卡,然后点击添加
  15. 在选择断言对话框中,展开值断言节点并选择自定义断言,然后点击下一步

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

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

    def checkPrice(input, context):
    	price = float(input)
    	if price % 2 == 0:
    		return 1
    	else:
    		return 0
  19. 方法下拉菜单中选择 checkPrice()
  20. 点击工具栏中的保存
  21. 选择测试 1 节点,点击工具栏中的运行测试。请注意,测试失败。如果双击测试的通讯报文查看器节点,您将看到 Linux 书的价格是一个奇数,从而导致测试失败。

进一步扩展 SOAtest

您可以在脚本中使用 SOAtest 的内置可扩展性框架,从而可以在 SOAtest 中定义和使用自定义传输协议和消息实现。有关更多信息,请跳转至 Parasoft> 帮助> Parasoft SOAtest Extensibility API

  • No labels