Parasoft SOAtest有两个功能,可以帮助您在测试服务发生更改时对测试进行批量更新:
- Change Advisor 标识服务的更改,这些更改将影响针对不同版本服务创建的任何测试,并允许批量更新测试,而无需逐个手动修改。
- Search 和 Replace 允许在测试中搜索您所知道服务中已经更改的值,并立即用一个新值更新它们。
这两个功能通常同时使用,以保证快速且准备的更新。本课将向您展示如何使用这两种功能来更新测试。
创建针对“老”版本服务的测试
首先,为旧版本的书店服务创建一组测试。随后使用变更指导助手和搜索替换工具更新这些测试。
若要创建测试 vs. 老版本书店服务:
- 创建一个空项目,并将其命名为
Change Advisor Lesson
:- 选择 File> New> Project。
- 选择 General> Project。
- 单击 Next。
- 在 Project Name下输入
Change Advisor Lesson
。 - 单击 完成。
- 向该项目添加一个新的 .tst 文件:
- 右键单击该添加项目中的 Change Advisor Lesson 节点,并选择 Add New> Test (.tst) File。
- 在 File name下输入
Change Advisor Lesson
,然后单击 Next。 - 选择 SOA> WSDL,然后单击 Next。
- 键入
http://localhost:8080/parabank/services/store-01?wsdl
作为 WSDL URL。 - 确保选中了 Create Functional Tests from the WSDL is 。
- 点击 Finish 按钮。
- 双击 Test Suite:Test Suite> Test 2: addNewItemToInventory 打开它的编辑器。
- 选择 book 元素,紧接着单击 Edit 按钮。
- 填充以下字段:
- Id:输入
10
- Price:选择 price 框,然后输入
9.99
- stockQuantity:输入
5
- Id:输入
- 单击 Save 工具栏按钮。注意,在将测试更新为测试新版本的书店时,需要确认这些值是否正确结转。
- 在 Test Case Explorer 中选择 Test 2: addNewItemToInventory 并运行它。
- 单击 Add test or output 工具栏按钮。
- 选择 Response> SOAP Envelope> XML Assertor,然后单击 Finish。
- 在断言程序的编辑器汇总,打开 Configuration 选项卡,单击 Add,然后选择 Structure Assertions> Occurrence Assertion,单击 Next。
- 在显示的 XML 树中,选择 price,然后单击 Finish。
- 在出现断言配置中,确保在下拉菜单中选择了 == 和 Fixed ,然后在 input 字段中输入
1
。
使用此断言器,将声明实际上元素 price
只能在 SOAP 响应消息中出现一次。如果该元素在服务更新版本中变更,则将必须对更新测试的 XML 断言器进行重新配置。
执行变更影响分析
若要在这些测试资产上执行变更影响分析:
- 通过选择 Window> Perspective> Open Perspec-tive> Parasoft Change Advisor,打开变更指导助手视图。
- 在测试用例资源管理器中,选择 Change Advisor Lesson> Change Advisor Lesson .tst> Test Suite:Test Suite。
- 单击 Perform Change Impact Analysis 工具栏按钮。
- 在打开的对话框中,选择 Scan the selected assets against their current service description,然后单击 Finish。
在质量任务视图中,将布局更改为 SOAtest 变更影响布局,该布局用于审查运行变更影响分析的结果。通过单击质量任务视图的 SOAtest Change Impact Layout 工具栏按钮...
,或者从下拉框选择它,可以切换布局。没有 Change Impact Layout 工具栏按钮?
如果不存在绿色的 SOAtest Change Impact Layout 工具栏按钮,则选择 Configur Contents 命令,然后选择 SOAtest Change Impact Layout 多选框。
此 Change Impact Analysis 被配置为将保存在测试的服务信息与包含在测试当前引用的“实时”WSDL 的服务信息进行比较。它将报告任何可能影响测试用例的 WSDL 更改。由于我们就在几分钟之前使用该 WSDL 创建了所有测试(并且在这之后 WSDL 没有任何变更),所有分析将不会报告更改。接下来,我们将看到如果运行变更影响分析与运行不同的 WSDL 时会发生什么。
- 在测试用例资源管理器中,选择 Change Advisor Lesson> Change Advisor Lesson.tst> Test Suite:Test Suite。
- 单击 Perform Change Impact Analysis 工具栏按钮。
- 选择 Scan the selected assets against a specified service description,确保选中了 Artifact 类型下的 WSDL ,然后按照以下步骤完成对话框:
- Scan Assets that use the following WSDL:
http://localhost:8080/parabank/services/store-01?wsdl
- Compare assets to the following WSDL:
http://localhost:8080/parabank/services/store-01V2?wsdl
The first option that tells SOAtest which tests to perform the analysis against.第二个选项告诉 SOAtest 测试要与什么 WSDL 进行比较。现在由于在这些 WSDL 中发现了服务差异,所以结果将报告变更。
- Scan Assets that use the following WSDL:
- 单击 Finish。
- 在质量任务视图中,探索报告的变更。 对于大多数的测试,命名空间和目标 URI 都会变更。
- 查看测试 2:addNewItemtoInventory 的结果。
- 注意,报告中还有其他一些变化:
- 添加了新元素
productInfo
- 元素
price
的名称发生了变化 - 消息中的元素顺序发生了变化
- 添加了新元素
- 查看测试 2:addNewItemtoInventory 的结果。
注意,变更影响结果不会显示服务定义中的所有变更;它们只会显示实际影响测试的服务定义变更。例如,如果不是当前测试中的操作发生了变化,则不会报告这些变更的变更影响结果。
创建变更模板
当运行变更影响分析时,服务目录视图将自动填充关于服务的信息,以及正在被测试的服务的版本(该测试正在被分析)。
注意,存储服务和版本是如何填充的。默认情况下,SOAtest 不知道正在测试的服务和版本的官方名称,因此它使用服务定义作为服务名称。 它也使用名称“Old Version”表示当前正在测试的测试服务版本,使用名称“Current Version”表示新服务定义代表的版本。服务目录允许浏览为每个版本检测到的操作。
- 将服务和版本重命名为更容易理解的名称:
- 在服务目录中,右键单击顶级服务节点,然后选择 Rename Service。
- 输入
Bookstore
作为服务名称。 - 右键单击书店服务的 Old Version 节点,选择 Rename Version,然后使用
1.0
代替Old Version
。 - 右键单击书店服务的 Current Version 节点,选择 Rename Version,然后使用
2.0
代替Current Version
接下来。希望定义变更模板,它将定义我们应该如果更新我们的测试,以便它们测试新版本的服务。
- 按照以下步骤创建变更模板:
- 在服务目录中,选择节点 1.0 和 2.0。
- 右键单击选择项,然后选择 Add Change Template 1.0 -> 2.0。
- 输入
LessonTemplate
作为文件名称,然后保留/Change Advisor Lesson
作为位置。 - 单击 Finish。将打开变更模板编辑器。
- 审查创建的变更模板的第一个选项卡。注意:
- Map Operations 选项卡显示在两个 WSDL 中定义的操作,以及 WSDL 不同版本之间的默认映射。当 SOAtest 首次创建变更模板时,将创建不同版本之间的默认映射,尝试与它认为相同的节点进行匹配。
- 绿色匹配表示 SOAtest 确信它所做的映射是正确的,并且不需要检查。
- 黄色匹配表示 SOAtest 对它所做的映射是否正确不太自信,建议使用 review 来确认或更新映射。
- 这里,除了操作
getItemById
和getItemByIdentifier
之间的映射外,所有操作映射都以绿色显示。看起来此操作更改了名称,但是操作的含义是相同的。这看起来很般配。
- 表示我们已经检查了操作
getItemById
和getItemByIdentifier
之间的映射,检查方法是通过右键单击 getItemById 并选择 Mark Match getItemById -> get-ItemByIdentifier as Reviewed"。这将使匹配变成绿色。 - 审查创建的变更模板的第二个(Map Schemas)选项卡。注意:
- 该选项卡显示为每个操作定义的 schema。可以双击编辑器选项卡使其展开,以便编辑器更大。
- 使用红色‘X’标记
addNewItemToInventory
操作,指明需要检查该操作的模式中存在差异。 - 其他操作不需要检查,因为 SOAtest 没有检测到这些需要检查的操作中的任何更改。如果选择每一个不带红色‘X’图标的操作,您都将看到所有匹配都是以绿色显示。
- 选择 addNewItemToInventory 操作对其进行探索。注意
- SOAtest 匹配
price
和genre
元素,但表示它们需要检查。 - 此操作包含名为
amount
的新元素,该元素在原来版本中没有出现。
- SOAtest 匹配
- 通过选择 price 元素并单击 Disconnect,指明
price
和genre
元素之间的映射不正确。
看起来price
元素被重命名为amount
,而这个genre
时 WSDL 中的新元素。 - 通过选择 price 和 amount,然后单击 Connect 按钮指明
price
元素被重命名为amount
。
这个genre
元素看起来是该操作中出现的新元素。 为了能够正确地更新测试,必须为将在每个更新测试中配置的该元素配置一个默认值。否则,更新的测试将给新元素发送一个空值。 - 为
genre
元素配置一个默认值,如下所示:- 右键单击 genre 并选择 Configure Default Value for Added "genre" element。
- 在打开的对话框中,在 input 字段输入
Literature
,然后单击 OK。 - 注意,
genre
现在是否有个绿色的 ‘?’ 并且所有匹配和不匹配的节点都是以绿色显示的。这表示我们已经对该操作完成了审查和配置。
- 右键单击 genre 并选择 Configure Default Value for Added "genre" element。
- 右键单击最高的 productInfo 元素并选择 Mark"productInfo" and Children as Reviewed,表示数量的三个父节点已被审查。
- 单击 Save 工具栏按钮保存模板。此时,模板将被定义,并可以应用到我们的测试中。双击变更模板编辑器选项卡,将其恢复至正常大小。
将变更模板应用到批量更新测试
若要更新该服务变更影响的测试:
- 在测试用例资源管理器中,选择 Change Advisor Lesson.tst,然后单击 Refactor Using a Change Template 工具栏按钮。
- 按照以下步骤完成向导:
- 在测试用例资源管理器中,选择 Next。
版本:1.0
更新 Parasoft 资产以使用服务版本:2.0
应用变更模板:LessonTemplate 在第二页中,保留 New Location 为选中状态,然后使用 Workspace 按钮,以选择 Change Advisor Lesson 项目。这将导致更新的测试被保存在 Change Advisor Lesson 项目内的新文件夹中。注意,在某些情况下,您可能希望重写以前的测试:然后,除非将测试进行了备份,否则这是非常不鼓励的。否则,将失去原来的测试。
单击 Finish。将创建一个名为 "Change Advisor Lesson” 的新文件夹。该文件夹包括更新的测试。
- 在测试用例资源管理器中,选择 Next。
- 打开 .tst 文件,并打开编辑器用于 Test Suite:Test Suite> Test Suite:CartService-Port> Test 2: addNewItemToInventory。注意:
- 如果选择 productInfo 元素,您将看到为
price
元素配置的值被转换为 amount 元素,如变更模板中所定义。 - 我们之前输入的其他值已经转移到新的测试中。选择 genre 元素,并注意在那里将显示
Literature
值,如变更模板中所定义。 - 新文件夹的 Environments 节点中添加了一个更新的新环境,并将其设置为活跃环境。
- 如果选择 productInfo 元素,您将看到为
- 选择新文件夹 Change Advisor Lesson> Test Suite;Test Suite,单击 Run Change Impact Analysis 工具栏按钮,并选择 Scan selected assets against their current service description 单选按钮,然后选择 Finish。注意,不会报告任何变更,因为现在新测试已经更新到当前版本的服务中。
更新使用搜索替换工具的测试
变更指导助手可应用于配置了以下内容的测试:
- 针对受支持的构件类型之一,以及
- 使用表单输入模式。
然而,也有不适用的情况。例如,变更指导助手不支持表单 XML 中的消息传递客户端。XML 断言器中的 Xpath 也不会被变更指导助手更新。为了支持这种情况,SOAtest 提供了搜索替换功能,它可以用于批量更新这些类型的字段。否则,在反复使用相同的修改值的情况下,逐个更新字段将是单调乏味的。
若要使用搜索替换工具更新值:
- 右键单击新版本的 Change Advisor Lesson.tst,并选择 Test Using Example Configuration。
- 在质量任务视图工具栏中,单击 SOAtest Default Layout 按钮,显示功能测试结果。
- 查看测试 2:addNewItemToInventory 报告的错误,并注意出现故障是因为
price
元素不再显示在响应 XML (记得其重命名为amount
并且现在出现在productInfo
元素下)中。 - 在新的 Change Advisor Lesson 文件夹中选择新的 Change Advisor Lesson.tst ,然后从工具栏选择 Search> Parasoft Search。
- 在 Containing text 字段中输入 book/price,从 Field type 选择框选择 XPath ,启用 Selected resources,然后单击 Search。
该 Search 视图将填充搜索结果。 - 右键单击 XML 断言器下的 XPath,然后选择 Replace Selected。
- 在打开的对话框中,输入
book/productInfo/amount
到 With 字段,然后单击 OK。
- 选择为新的 WSDL 创建的文件夹中的 Test 2: addNewItemToInventory ,增加 id 字段,选择 Run Tests 工具栏按钮。现在测试应该成功了,因为现在 XML 断言中的 Xpath 是最新状态。