本课程包括高级策略,它将帮助您开发更健壮、可重用的的测试套件。
本章包含:
创建可重用(Modular)的测试套件
在大多数情况下,可能希望通过其他测试套件创建可重用的测试套件。常见示例是记录到网页的测试套件。一旦创建了这样的测试套件,则其他测试套件可以在需要登录的不同场景中使用它。
对于可重用的测试套件的创建和使用,两个 SOAtest 的功能尤其有用:
- 引用的测试套件:一旦创建了可用的模块或测试套件,则其他测试套件也可以引用它。
- 变量:可以使用变量参数化测试,该参数可以从中心位置设置特定值,从测试(例如,通过数据库工具)提取,或者从数据源设置。
该课程阐明了如何将这两个功能用于创建和使用可用的测试套件。简单地说,我们将使用存储的 web 服务;然而,下面的原则和步骤仍然可以应用于您创建的任何场景。
若要创建可用的测试套件:
- 创建一个名为
ReusableModule.tst
空的测试套件(.tst)文件,如下所示:- 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file。
- 在 File name下,输入
ReusableModule
。 - 单击 Next。
- 选择 Empty,然后点击 Finish。
- 按照以下步骤创建一个 SOAP 客户端测试。
- 展开 ReusableModule.tst Test Case Explorer 节点。
- 右键单击 Test Suite:Test Suite 节点,然后选择 Add New> Test。
- 在打开的对话框中,选中 SOAP Client,然后单击 Finish。
- 配置 SOAP 客户端测试,如下所示:
- 在测试面板的 WSDL 选项卡中,为 WSDL URL 输入
http://localhost:8080/parabank/services/store-01?wsdl
。 - 在 Request 选项卡中,将 Operation 设置为 getItemByTitle。
- 将变更保存到 SOAP 客户端工具中。
- 在测试面板的 WSDL 选项卡中,为 WSDL URL 输入
- 定义一个变量,如下所示:
- 双击 Test Suite:Test Suite 节点,打开测试套件配置面板。
- 在 Variables 选项卡中,单击 Add 按钮。
- 在对话框的 Name 字段,输入
title variable
。 - 将 Type 更改为 String。
- 保持选项 Use value from parent test suite (if defined)。这将允许变量使用引用该测试套件的测试套件中的设置的值。如果选择项更改为 Use local value,则变量的值将始终为 Value 字段中指定的值。
- 输入
PowerBuilder
作为 Value。这是默认值,在 SOAtest 没有找到名为store
,其列名为title
的数据源时使用该值。 - 然后单击 OK。
- 保存测试套件配置变更。
- (如果可用)配置 SOAP 客户端测试,以使用特定的数据源值,如下所示:
- 在 SOAP 客户端的测试配置面板中,跳转至 Request tab, 为 titleKeyword选中框,然后将 Fixed 更改为 Parameterized。
- 在组合框中选择 title variable 。
- 将变更保存到 SOAP 客户端工具中。
- 选择 ReusableModule.tst,然后单击 Test 工具栏按钮,运行测试套件。
- 双击 SOAP 客户端测试的 Traffic Viewer 节点查看流量。注意,使用的 titleKeyword 为 PowerBuilder。SOAtest 使用的是默认变量值,因为它没有找到特定的数据源(因为我们仍然没有创建它)。
- 创建一个名为
TestStoreTitles.tst
的空的测试套件(.tst)文件,如下所示:- 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file。
- 在 File name下,输入
TestStoreTitles
。 - 单击 Next。
- 选择 Empty,然后点击 Finish。
- 定义一个变量,如下所示:
- 双击 TestStoreTitles.tst> Test Suite:Test Suite 节点,打开测试套件配置面板。
- 在 Variables 选项卡中,单击 Add 按钮。
- 在对话框的 Name 字段,输入
title variable
。 - 将 Type 更改为 Data Source。
- 为 Data SourceName 输入
store
,为 Column Name输入title
。
注意,该测试变量将覆盖在引用 .tst 文件中定义的字符串测试变量。
- 然后单击 OK。
- 将数据源添加到该测试套件中,如下所示:
- 右键单击 TestStoreTitles.tst> Test Suite:Test Suite 节点,然后选择 Add New> Data Source。
- 选择 Table,然后单击 Finish。
- 在数据源配置面板中,将数据源名称更改为
store
。 - 选择 First row specifies column names。
- 添加命名为
title
的列。 - 向该列添加两个值:
Linux
和C++
。 - 保存数据源变更。
- 配置该测试套件,以应用在本练习中创建的第一个测试套件,如下所示:
- 右键单击 TestStoreTitles.tst> Test Suite:Test Suite 并选择 Add New> Test Suite。
- 选择 Reference Test (.tst) File。
- 单击 Next。
- 从 SOAtest 工作空间中选择 ReusableModule.tst 文件。
- 单击 Finish。
- 选择 TestStoreTitles.tst,然后单击 Test 工具栏按钮,运行当前测试套件。
- 双击 Traffic Viewer 节点,以查看流量。
- 验证此 Linux,然后将 C++ 作为 titleKeyword 使用。
测试成功或失败之前一直循环 - 使用测试流逻辑
在大多数情况下,您可能希望 SOAtest 在某个条件满足之前反复执行某个操作。测试套件流逻辑允许对此进行配置。
SOAtest 允许在两个主测试流类型之间进行选择:
- While variable: 在满足变量条件之前,反复执行某个操作。
- While pass/fail: 反复执行某个操作,直到测试套件中的一个测试(或每个测试)通过或失败(取决于“loop util”设置中选择的内容)。注意,如果选择该选项(例如,该选项设置为其中一个测试成功之前一直循环),并且满足了整个循环条件(如,一个测试成功),则出现故障的测试将标记为成功。 如果没有满足整个循环条件(如,没有测试成功),则失败的单个测试将标记为失败。 无论循环条件是否满足,控制台都将显示哪些测试通过了,哪些测试失败了。
要查看 while pass/fail 逻辑如何允许您在达到指定的价格值之前进行测试套件循环。
- 创建一个名为
TestFlowLogic.tst
的空的测试套件(.tst)文件,如下所示:- 在测试用例资源管理器中,右键单击 Examples 项目节点,然后选择 Add New> Test (.tst) file。
- 在 File name下,输入
TestFlowLogic
。 - 单击 Next。
- 选择 Empty,然后点击 Finish。
- 展开测试套件,打开测试套件配置面板,然后双击 Test Suite:Test Suite 节点。
- 打开 Execution Options> Test Flow Logic 选项卡。
- 将 Flow type 设置为 While pass/fail。
- 将 Maximum number of loops 设置为
20
。 - 将 Loop until 设置更改为 One test 和 Succeeds。
- 保存测试套件配置设置。
- 按照以下步骤创建一个 SOAP 客户端测试。
- 右键单击 TestFlowLogic.tst> Test Suite: Test Suite 节点,然后选择 Add New> Test。
- 在打开的对话框中,选择 SOAP Client,然后单击 Finish。
- 配置 SOAP 客户端测试,如下所示:
- 在测试配置面板的 WSDL 选项卡中,为 WSDL URL 输入
http://localhost:8080/parabank/services/store-01?wsdl
。 - 在 Request 选项卡中,将 Operation 设置为 getItemByTitle。
- 对于 titleKeyword,选中框,然后输入
PowerBuilder
作为值。 - 将变更保存到 SOAP 客户端测试。
- 在测试配置面板的 WSDL 选项卡中,为 WSDL URL 输入
- 为该测试创建一个回归控制,如下所示:
- 右键单击 SOAP Client 测试节点,并选择 Create/Update Regression Control。
- 选择 Create Regression Control。
- 单击 Finish。
- 修改回归控制中的预期价格,如下所示:
- 双击新建的 Diff control 节点,打开 Diff 工具编辑器。
- 修改 price 元素中的值。多次调用 getItemByTitle 后,书店服务将书的价格增加到 $1.00,因此根据该教程中运行测试的次数,当前价格可能与显示的价格不同。
- 双击新建的 Diff control 节点,打开 Diff 工具编辑器。
通过选择测试套件节点,并单击 Test 工具栏按钮,运行当前测试套件。即使特定测试失败,测试套件也将成功,因为在预期响应中输入价格在循环 20 次之前会达到该值。可以在控制台选项卡看到以下信息:
是否比预期价格高?
调用 getItemByTitle 的次数越多,价格就会上涨得越多。若要降低价格,重启 Parabank 服务器并重新运行调用 getItemByTitle 的 SOAP 客户机。- 双击之前创建的 Diff Control 节点,重新打开 Diff 工具编辑器。
- 调整价格,使测试在达到指定价格之前将完整循环 20 次。
- 再次运行测试套件。测试套件将失败,因为价格在完整循环 20 次后也不会达到指定价格。
使用脚本扩展 SOAtest
如果有一个测试要求,它要求您向测试用例中添加自定义功能或逻辑,则 SOAtest 允许您轻松地将自定义脚本集成到您的测试环境中。
使用 SOAtest 的 XML 断言器,可以让您将编写的自定义脚本集成到 SOAtest 中。这意味着大多时候都可以轻松地处理任何测试情况,即使 SOAtest 的当前工具集不直接支持该情况。
在该示例中,您将使用上一个示例中使用的书店服务来创建场景测试。在该场景中,您将根据书的标题搜索图书,然后验证该图书的价格是否是一个偶数。
当您完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst
文件中标题为 "自定义脚本”的测试套件。
- 选择 Test Suite: Functional Tests 节点(在 为单元测试创建测试套件中创建)并单击 Add Test Suite 工具栏按钮。
- 在添加测试套件向导中,单击 Empty,然后单击 Finish。
- 双击新建的 Test Suite:Test Suite 节点(该节点已添加到测试套件树中),然后在测试配置面板中的 Name 字段输入
Custom Scripting
,然后单击 Save。 - 选择 Test Suite: Custom Scripting 节点,然后单击 Add test or output 按钮。
- 在添加测试向导中,在右侧选择 SOAP Client ,然后单击 Finish。将 SOAP 客户端工具添加到测试套件。
- 双击 测试1:SOAP Client 节点,该节点在 Test Suite: Custom Scripting 节点下方,然后在右侧 GUI 面板中的 Name 字段输入
Validate Price Value
。 - 在测试配置面板的 WSDL 选项卡中,将
http://localhost:8080/parabank/services/store-01?wsdl
输入到 WSDL URL 字段中。 - 打开 Request 选项卡,然后从 Operation 下拉框选择 getItemByTitle 。
- 在 SOAP body 选项卡中,单击 getItemByTitle ,并启用 titleKeyword 选项。
- 从下拉菜单中选择 Fixed ,然后输入
Linux
作为值。 - 单击 Save工具栏按钮。
- 右键单击 Test1:Validate Price Value 节点,然后选择 Add Output。
- 在 Add Output 向导中,在左侧选择 Response> SOAP Envelope ,在右侧选择 XML Assertor ,然后单击 Finish。这告诉 SOAtes 将 XML 断言器链接到 SOAP 客户机的 XML 响应输出中。
- 打开 XML 断言器测试面板中的 Configuration 选项卡,然后单击 Add 按钮。
- 在 Select Assertion 对话框中,展开 Value Assertion 节点,选择 Custom Assertion,然后单击 Next 按钮。
然后,该自定义断言对话框将显示 XML 消息树视图,您可以从中选择要执行的单个值。 - 在 XML 树视图中选择 price 元素,然后单击 Finish 按钮。
测试配置选项卡将填充自定义断言。 - 从 Language 下拉菜单中选择 Jython 。
在测试配置选项卡的 Text 字段中输入以下脚本,确保 price 值是偶数:
def checkPrice(input, context): price = float(input) if price % 2 == 0: return 1 else: return 0
- 从 Method 下拉菜单中选择 checkPrice() 。
- 单击 Save 工具栏按钮。
- 选择 Test 1 节点,然后单击 Test 按钮。注意,测试失败。如果双击测试的 Traffic Viewer 节点,则将看到 Linux 图书的价格是一个奇数,这就是导致测试失败的原因。
进一步扩展 SOAtest
SOAtest 的内置扩展框架可在脚本中使用,它允许在 SOAtest 内定义和使用自定义传输协议和消息实现。有关更多信息,请跳至 Parasoft> Help> Parasoft SOAtest Extensibility API。