本课程将介绍一些高级策略,这些策略将帮助您开发更健壮、可重用的测试套件。
章节目录:
创建可重用的(模块化的)测试套件
在许多情况下,您可能希望创建一个可由其他测试套件重用的测试套件。一个常见的示例是登录网站的测试套件。一旦创建了这样的测试套件,其他测试套件就可以在需要登录的各种情况下使用它。
两个 SOAtest 特性对于创建和使用可重用测试套件特别有用:
- 引用的测试套件:一旦创建了可重用模块或测试套件,它就可以被另一个测试套件引用。
- 变量:可以使用变量对测试进行参数化,这些变量可以从中心位置设置为特定值、从测试中提取(例如,通过数据库工具)或从数据源设置。
本课演示如何使用这两个功能来创建和使用可重用的测试套件。为简单起见,我们将使用存储 web 服务;但是,下面的原理和步骤随后可以应用于您创建的任何方案。
若要创建可重用的测试套件:
- 创建名为 ReusableModule.tst 的测试套件(.tst)文件,操作如下:
- 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件。
- 在文件名称下,输入
ReusableModule
。 - 点击下一步。
- 选择空,然后点击完成。
- 如下创建一个 SOAP 客户端。
- 展开 ReusableModule.tst 测试用例浏览器节点。
- 右键点击测试套件: 测试套件节点,然后选择新建> 测试。
- 在打开的对话框中,选择 SOAP 客户端,然后点击完成。
- 如下配置 SOAP 客户端:
- 点击 WSDL 选项卡,输入
http://localhost:8080/parabank/services/store-01?wsdl
WSDL URL。 - 点击请求选项卡,从操作下拉菜单选择getItemByTitle。
- 将变更保存到 SOAP 客户端工具。
- 点击 WSDL 选项卡,输入
- 如下定义变量:
- 双击测试套件: 测试套件节点,打开配置面板的测试套件。
- 点击变量选项卡,然后点击添加。
- 在对话框的名称字段,输入
title variable
。 - 从类型下拉菜单中选择字符串。
- 保留使用来自父测试套件 (如果有定义) 的值选项。这将允许变量使用在引用此测试套件的测试套件中设置的值。如果选择更改为使用本地值,则变量的值将始终为值字段中指定的值。
- 在值字段中输入
PowerBuilder
。如果 SOAtest 没有找到名为store
且列为title
的数据源,将使用该默认值。 - 然后点击 OK。
- 保存测试套件配置更改。
- 如果可用,将配置 SOAP 客户端测试以使用指定的数据源值,如下所示:
- 在 SOAP 客户端的测试配置面板中,转到请求选项卡,启用 titleKeyword,并从下拉菜单中选择参数化和 title variable。
- 将变更保存到 SOAP 客户端工具。
- 在 SOAP 客户端的测试配置面板中,转到请求选项卡,启用 titleKeyword,并从下拉菜单中选择参数化和 title variable。
- 点击 ReusableModule.tst,然后点击工具栏中的测试运行测试套件。
- 双击 SOAP 客户端测试的通讯报文查看器节点,查看通讯报文。注意,使用的 titleKeyword 为 PowerBuilder。SOAtest 使用默认的变量值,因为它没有找到指定的数据源(由于我们还未创建)。
- 请如下创建一个名为 TestStoreTitles.tst 的空的测试套件(.tst)文件:
- 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件。
- 在文件名称下,输入
ReusableModule
。 - 点击下一步。
- 选择空,然后点击完成。
- 如下定义变量:
- 双击 TestStoreTitles.tst> 测试套件: 测试套件节点,打开配置面板的测试套件。
- 点击变量选项卡,然后点击添加。
- 在对话框的名称字段,输入
title variable
。 - 从类型下拉菜单中选择数据源。
- 输入
store
作为数据源名称,然后输入title
作为列名。
注意,该测试变量将重写引用 .tst 文件中定义的字符串测试变量。
- 然后点击 OK。
- 添加数据源到测试套件中,如下所示:
- 右键点击 TestStoreTitles.tst> 测试套件: 测试套件节点,然后选择新建> 数据源。
- 选择表格,点击完成。
- 在数据源配置面板中,将数据源名称更改为
store
。 - 启用第一行指定列名。
- 添加名为
title
的列。 - 想该列添加两个值:
Linux
和C++
。 - 保存数据源变更。
- 配置该测试套件引用我们在该练习中创建的第一个测试套件,如下所示:
- 右键点击 TestStoreTitles.tst> 测试套件: 测试套件节点,然后选择新建> 测试套件。
- 选择引用测试 (.tst) 文件。
- 点击下一步。
- 从 SOAtest 工作空间中选择 ReusableModule.tst 文件。
- 点击完成。
- 点击 TestStoreTitles.tst,然后点击工具栏中的运行测试,运行当前测试套件。
- 双击通讯报文查看器节点,以查看通讯报文。
- 验证是否使用 Linux,然后将 C++ 用作 titleKeyword。
循环直到测试成功或失 - 使用测试流程逻辑
在大多数情况下,您可能希望 SOAtest 在某个条件满足之前反复执行某个操作。测试套件流逻辑允许对此进行配置。
SOAtest 允许您在两种主要的测试流程类型之间进行选择:
- While 变量:在满足变量条件之前,反复执行某个操作。
- While 通过/失败:反复执行某个操作,直到测试套件中的一个测试(或每个测试)通过或失败(取决于“loop util”设置中选择的内容)。注意,如果选择该选项(例如,该选项设置为其中成功之前一直循环),并且满足了整个循环条件(例如,测试成功),则出现故障的测试将标记为成功。如果没有满足整个循环条件(如,测试没有成功),则失败的单个测试将标记为失败。无论循环条件是否满足,控制台都将显示哪些测试通过了,哪些测试失败了。
要查看如何使用 while 通过/失败逻辑进行测试套件循环,直到达到指定的价格值为止。
- 按照以下步骤创建一个名为 TestFlowLogic.tst 的空测试套件(.tst)文件:
- 右键点击测试用例浏览器中的示例项目节点,然后选择新建> 测试 (.tst) 文件。
- 在文件名称下,输入
TestFlowLogic
。 - 点击下一步。
- 选择空,然后点击完成。
- 展开测试套件,双击测试套件: 测试套件节点打开测试套件配置面板。
- 前往执行选项> 测试流程逻辑 项卡。
- 流类型下拉菜单中选择 While 通过/失败l。
- 在最大循环次数字段中输入
20
。 - 将循环直到设置更改为一个测试和成功。
- 保存测试套件配置设置。
- 如下创建一个 SOAP 客户端。
- 右键点击 TestFlowLogic.tst> 测试套件: 测试套件节点,选择新建> 测试。
- 在打开的对话框中,选择 SOAP 客户端,然后点击完成。
- 如下配置 SOAP 客户端:
- 点击 WSDL 选项卡,输入 WSDL URL
http://localhost:8080/parabank/services/store-01?wsdl
。 - 点击请求选项卡,从操作下拉菜单选择 getItemByTitle。
- 启用 titleKeyword,选择固定值,然后输入
PowerBuilder
作为值。 - 将变更保存到 SOAP 客户端测试。
- 点击 WSDL 选项卡,输入 WSDL URL
- 为该测试创建回归控制,如下所示:
- 右键点击 SOAP 客户端测试节点,然后选择创建/更新回归控制。
- 选择创建回归控制。
- 点击完成。
- 在回归控制中修改预期价格,如下所示:
- 双击新建的比较控件节点,打开比较工具编辑器。
- 在 price 元素中修改值。在多次调用 getItemByTitle 之后,商店服务会将这本书的价格提高了 1.00 美元,因此,根据您在本教程中运行测试的次数,当前价格可能会与显示的价格有所不同。
- 双击新建的比较控件节点,打开比较工具编辑器。
选择测试套件节点,然后点击工具栏中的运行测试,运行当前测试套件。即使特定测试失败,测试套件也会成功,因为在循环 20 次之前将达到预期响应中输入的价格。可以在 Console 选项卡中看到:
价格比期望值高?
您调用 getItemByTitle 的次数越多,价格上涨的幅度就越大。要降低价格,请重新启动 Parabank 服务器,然后重新运行调用 getItemByTitle 的 SOAP 客户端。- 双击之前创建的比较控件节点,打开比较工具编辑器。
- 修改价格,以使测试在达到价格之前将循环播放完整的 20 次。
- 再次运行测试套件。测试套件将失败,因为在循环 20 次之后,价格永远无法达到。
使用脚本扩展 SOAtest
如果您有一个测试要求,要求您向测试用例中添加自定义功能或逻辑,则 SOAtest 允许您轻松地将自定义脚本集成到测试环境中。
使用 SOAtest 的 XML 断言器,您可以将编写的自定义脚本集成到 SOAtest 中。这意味着即使 SOAtest 当前的工具集不直接支持这种情况,几乎任何测试情况都可以轻松处理。
此示例中,您将使用前面示例中使用的书店服务创建场景测试。在此方案中,您将按书名搜索一本书,然后确认该书的价格是偶数整数。
当您完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst 文件中标题为“自定义脚本”的测试套件。
- 点击测试套件: 功能测试节点(在为单元测试创建测试套件中创建),然后点击工具栏中的添加测试套件。
- 在添加测试套件向导中,选择空,然后点击完成。
- 双击添加到测试套件树中的新建测试套件: 将测试套件节点添加到测试套树,输入
自定义脚本
到测试配置面板中的名称字段,点击保存。 - 点击测试套件: 自定义脚本节点,然后点击工具栏中的添加测试或输出。
- 在添加测试向导右侧选择SOAP 客户端,点击完成。将 SOAP 客户端工具添加到测试套件。
- 双击测试 1: SOAP 客户端节点,该节点位于测试套件: 自定义脚本节点下,然后输入
验证价格值
到右侧 GUI 面板中的名称字段。 - 点击 WSDL 选项卡,在 WSDL URL 字段中输入
http://localhost:8080/parabank/services/store-01?wsdl
。 - 点击请求选项卡,从操作下拉菜单选择 getItemByTitle。
- 点击 SOAP Body 选项卡,点击 getItemByTitle,然后启用 titleKeyword。
- 从下拉菜单中选择固定值,然后输入
Linux
作为值。 - 点击工具栏中的保存。
- 右键点击测试 1: 验证价格值节点,选择添加输出。
- 在添加输出向导左侧选择响应> SOAP Envelope,开启选择 XML 断言器,然后点击完成。这告诉 SOAtest 将 XML 断言器链接到 SOAP 客户端的 XML 响应输出。
- 点击 XML 断言器测试配置面板中的配置选项卡,然后点击添加。
- 在选择断言对话框中,展开值断言节点并选择自定义断言,然后点击下一步。
自定义断言对话框将显示 XML 消息的树状视图,您可以从中选择要执行的单个值。 - 在 XML 树状视图中点击 price 元素,然后点击完成。
测试配置选项卡将填充自定义断言。 - 在语言下拉菜单中选择 Jython。
在测试配置选项卡的文本字段中输入以下脚本,以确保价格值是均匀的:
def checkPrice(input, context): price = float(input) if price % 2 == 0: return 1 else: return 0
- 在方法下拉菜单中选择 checkPrice()。
- 点击工具栏中的保存。
- 选择测试 1 节点,点击工具栏中的运行测试。请注意,测试失败。如果双击测试的通讯报文查看器节点,您将看到 Linux 书的价格是一个奇数,从而导致测试失败。
进一步扩展 SOAtest
您可以在脚本中使用 SOAtest 的内置可扩展性框架,从而可以在 SOAtest 中定义和使用自定义传输协议和消息实现。有关更多信息,请跳转至 Parasoft> 帮助> Parasoft SOAtest Extensibility API。