Parasoft SOAtest 具有两项功能可在您测试的服务发生更改时帮助您对测试进行批量更新:
- Change Advisor 可识别对服务的更改,这些更改会影响针对该服务的不同版本创建的任何测试,并允许您批量更新测试,而不必手动逐一修改它们。
- Search and Replace 使您可以在测试中搜索您知道服务器中已更改的值,并立即使用新值更新所有这些值。
这两个功能通常同步使用,以确保快速准确的更新。本课程将向您展示如何使用这两种功能来更新测试。
针对服务的“旧”版本创建测试
首先为旧版本的书店服务创建一组测试。稍后,我们将使用 Change Advisor 和 Search 和 Replace 功能来更新这些测试。
要与书店服务的旧版本进行测试,请执行以下操作:
- 创建一个新的空项目并将其命名为
Change Advisor Lesson
课程:- 选择 File> New> Project。
- 选择 General> Project。
- 单击 Next。
- 进入在 Project Name 下
Change Advisor Lesson
。 - 单击 Finish。
- 向此项目添加一个新的 .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 已选中。
- 单击 Finish 按钮。
- 双击 Test Suite: Test Suite> Test 2: addNewItemToInventory 打开其编辑器。
- 选中 book 元素接着单击 Edit 按钮。
- 填写以下字段:
- Id: 输入
10
- Price: 选中 price 框, 然后输入
9.99
- stockQuantity: 输入
5
- Id: 输入
- 单击 Save 工具栏按钮。请注意,当我们更新测试以测试书店的较新版本时,我们将确认这些值是否正确保留。
- 选中测试用例资源管理器中的 Test 2: addNewItemToInventory 并运行它。
- 单击 Add test or output 工具栏按钮。
- 选中 Response> SOAP Envelope> XML Assertor, 然后单击 Finish.
- 在声明器的编辑器中, 打开 Configuration 选项, 单击 Add, 然后选中 Structure Assertions> Occurrence Assertion, 并单击 Next.
- 在显示的 XML 树中,选中 price,然后单击 Finish。
- 在出现断言配置下,确保在下拉菜单中选择了== 和 Fixed ,然后在输入字段中输入
1
。
使用此断言器,我们声明元素价格
在 SOAP 响应消息中仅发生一次。如果以后在服务的更新版本中更改了此元素,我们将必须重新配置更新测试的 XML 声明器。
变更影响分析
要对这些测试资产执行变更影响分析:
- 通过选择 Window> Perspective> Open Perspec-tive> Parasoft Change Advisor 来打开 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。
在 Quality Tasks 视图中,将布局更改为 SOAtest 更改影响布局,该布局旨在查看运行更改影响分析的结果。你可以通过单击 Quality Tasks 视图的 SOAtest Change Impact Layout 工具按钮
来切换布局,也可以从下拉菜单中选择布局。没有更改影响布局工具栏按钮?
如果绿色的 SOAtest 更改影响布局工具栏按钮不存在,请选择配置目录命令,然后选中 SOAtest Change Impact Layout 复选框。
此变更影响分析配置为将测试中保存的服务信息与测试当前引用的“实时” 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
第一个选项告诉 SOAtest 对哪个测试执行分析。第二个选项告诉 SOAtest 将比较哪些 WSDL 的测试。因为这些 WSDL 中发现的服务差异,结果现在将报告更改。
- Scan Assets that use the following WSDL:
- 单击 Finish。
- 在 Quality Tasks 视图中,探索报告的更改。 对于许多测试,名称空间和 targetURI 均已更改。
- 查看测试2的结果:addNewItemtoInventory。
- 请注意,报告了许多其他更改:
- 添加了新元素
productInfo
- 元素
price
的名字被改变 - 信息中元素的顺序已更改
- 添加了新元素
- 查看测试2的结果:addNewItemtoInventory。
请注意更改影响结果不会显示服务定义中的所有更改; 它们仅显示实际上影响测试的服务定义更改。例如,如果当前未测试的操作中有更改,则不会报告这些更改的更改影响结果。
创建变更模板
当变更影响分析运行时,服务目录视图将自动填充有关被分析的测试所测试的服务和服务版本的信息。
注意已经填充了存储服务和版本。默认情况下 SOAtest 不知道被测试的服务和版本的官方名称,因此它使用服务定义作为服务名称。 它还使用名称“Old Version”表示测试当前测试的服务的版本,并使用名称“Current Version”表示新服务定义所表示的版本。服务目录允许您浏览每个版本检测到的操作。
- 将服务和版本重命名为我们可以更好地理解的名称:
- 在服务目录中,右键单击顶级服务节点,然后选择 Rename Service。
- 输入
Bookstore
作为服务名称。 - 右键单击书店服务的 Old Version 节点,选择 Rename Version, 然后将
Old Version
替换为1.0
。 - 右键单击书店服务的 Current Version 节点,选择 Rename Version,然后将
Current Version
当替换为2.0
.
。接下来,我们要定义一个更改模板,该模板将定义如何更新测试以使他们测试服务的新版本 。
- 创建更改模板,如下所示:
- 在服务目录中,选择节点 1.0 和 2.0。
- 右键单击所选内容,然后选择 Add Change Template 1.0 -> 2.0。
- 输入
LessonTemplate
作为文件名,然后保留/Change Advisor Lesson
作为位置。 - 单击 Finish。更改模板编辑器将打开。
- 查看已创建的更改模板的第一个选项卡。注意:
- Map Operations 选项卡显示两个 WSDL 中定义的操作,以及不同版本的 WSDL 之间的默认映射。当 SOAtest 首次创建变更模板时,它会在不同版本之间创建默认映射,以尝试匹配它认为相同的节点。
- 绿色匹配表示 SOAtest 确信它创建的映射是正确的,不需要进行审查。
- 黄色匹配表示 SOAtest 对其创建的映射是否正确不太确定,建议检查以确认或更新映射。
- 除了操作
getItemById
和getItemByIdentifier
之间的映射外,所有操作映射都以绿色显示。该操作似乎更改了名称,但操作的意义是相同的。这似乎是一个很好的匹配。
- 通过右键单击 getItemById 并选择 Mark Match getItemById -> get-ItemByIdentifier as Reviewed,表明我们已经查看了操作
getItemById
和getItemByIdentifier
之间的映射”。这会使匹配变绿。 - 检查已创建的更改模板的第二个(Map Schemas)选项卡。注意:
- 此选项卡显示为每个操作定义的模式。您可以双击编辑器选项卡以使其展开,以使编辑器更大。
- 标有红色 ‘ X’的
addNewItemToInventory
操作,表示需要检查该操作存在差异的模式。 - 因为 SOAtest 没有检测到需要检查的那些操作中的有任何更改,所以其他操作不需要检查。如果您选择的每个操作都没有红色的“ X”图标,则会看到所有匹配项均为绿色。
- 选择 addNewItemToInventory 操作进行浏览。注意
- SOAtest 匹配
price
和genre
元素,但表示需要进行检查 - 该操作包含一个名为
amount
的新元素,该元素未出现在原始版本中。
- SOAtest 匹配
- 通过选择 price 元素并单击 Disconnect.
来指示price
和genre
元素之间的映射不正确,显示price
元素已重命名为amount
,而genre
是 WSDL 中的新元素。 - 选择price 和 amount 然后单击 Connect 按钮
表示元素amount
替换了元素price
,genre
元素是这个操作中出现的新元素。 为了正确地更新测试,我们必须为将在每个更新的测试中配置的元素配置默认值。否则更新测试将为该新元素赋一个空值。 - 为
genre
元素配置默认值,如下所示:- 右击genre 然后选择 Configure Default Value for Added "genre" element。
- 在打开的对话框中,在输入字段中输入
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。
Version:1.0
Update Parasoft assets to use service version: 2.0
By applying the change template: 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
配置的值已经转移到数量元素,如更改模板中所定义。 - 我们之前输入的其他值已延续到新测试中。选择类型元素,然后注意
Literature
的值出现在此处,如我们的更改模板中所定义。 - 已将新的更新环境添加到新文件夹的 Environments 节点中,并将其设置为活动环境。
- 如果您选择元素 productInfo,则会看到我们为元素
- 选中新文件夹 Change Advisor Lesson> Test Suite: Test Suite,单击 Run Change Impact Analysis 工具栏按钮,选择 Scan selected assets against their current service description 单选按钮,然后选择 Finish。请注意,没有报告更改,因为现在更新了新测试以测试该服务的当前版本。
使用搜索和替换更新测试
Change Advisor适用于已配置的测试:
- 针对其中一种受支持的工件类型,并且
- 在表单输入模式下。
但是,在某些情况下不适用。例如,Change Advisor不支持格式为 XML 的信息传递给客户端。Change Advisor也不会更新 XML 声明器中的 Xpaths。为了支持这种情况,SOAtest 提供了搜索和替换功能,可用于批量更新这些类型的字段。否则,在反复使用相同修改过的值的情况下,逐一更新字段会很乏味。
用搜索和替换更新值
- 右击 Change Advisor Lesson.tst,的新版本然后选择 Test Using Example Configuration。
- 在 Quality Tasks 视图工具栏中,单击 SOAtest Default Layout 按钮以显示功能测试结果。
- 查看测试2报告的错误:addNewItemToInventory,并注意出现故障是因为元素
price
不再出现在 XML 响应中(记住,它被重命名为amount
,现在出现在元素productInfo
下)。 - 在新的 Change Advisor Lesson 文件夹中选择新的 Change Advisor Lesson.tst 然后从工具栏选择 Search> Parasoft Search。
- 在 Containing text 字段中输入书籍/价格,从 Field type选择框中选择XPath,启用 Selected resources,然后单击Search.
。搜索视图就会显示搜索结果。 - 右键单击 XML 声明器下的 XPath,然后选择 Replace Selected。
- 在打开的对话框中,在 With 字段中输入
book/productInfo/amount
,然后单击 OK。
- 在新 WSDL 创建的文件夹中选择 Test 2: addNewItemToInventory,增加 id 字段,然后选择 Run Tests 工具栏按钮。因为 XML 断言中的 Xpath 是最新的,所以测试应该成功,