单元测试创建后,可以利用到无需任何附加工作的基于场景的测试中。场景测试允许您模仿在正常使用 web 服务过程中可能发生的业务逻辑或事务。还允许您找到仅在特定事件序列之后才出现的 bug。
Parasoft SOAtest 允许创建多个步骤场景,每个步骤执行相同的服务或完全不同的应用程序接口。这允许您自动化业务用例场景的建模(如端到端业务流程测试中所述)。这还允许您发现只有在特定的事件序列之后才会出现的意外行为。
“Scenario Test - Search, Add to Cart, and Remove from Cart”测试套件中给出的场景测试示例表示了客户在使用书店 web 服务时可能调用的典型操作序列。在本例中,它表示这样一种情况:客户搜索一本书,为那本书下订单,然后删除先前下的订单。
此场景测试引入了一个名为 XML 数据库的工具。该工具允许提取 XML 元素值并将这些值存储在内存中,以便在以后的测试中使用。在本例中,您将存储服务在搜索一本书之后返回的图书 ID,然后在接下来的测试中,使用该 ID 购买图书。您还将存储在为该书下了订单之后返回的订单号。然后,在接下来的测试中,使用该订单号从系统中删除订单。
当完成本教程这个部分时,您的测试套件应类似 SOAtestTutorial.tst 文件中的“Scenario Test - Search, Add to Cart, and Remove from Cart” 测试套件。
注意,本节课假设您已经完成了前面的课程。
创建场景测试套件
若要创建该场景:
- 点击测试套件: 功能测试节点,然后点击工具栏中的添加测试套件按钮。
- 从添加测试套件向导中选择空,然后点击完成按钮。
- 双击添加到测试套件树中的新建测试套件: 测试套件节点。
- 在测试套件配置面板中的名称字段输入
Scenario Test - Search, Add to Cart, and Remove from Cart
,点击工具栏中的保存。 - 从之前创建的 CartServicePort 测试套件中复制正面的 getItemByTitle、addItemToCart 和 updateItemInCart SOAP 客户端测试节点,并将它们粘贴到 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。如果需要,可以拖放来重新排序。
这三个测试代表客户可能调用的典型业务事务。这将是我们场景测试的基础。
存储将在后续测试中使用的结果
您可以通过如下配置 XML 数据库来存储结果:
- 双击测试1: getItemByTitle 节点,该节点位于 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。
- 在测试配置面板右上角的数据源下拉菜单中选择 Books。
- 点击请求选项卡并启用 titleKeyword,然后从元素下拉菜单中选择参数化和关键词,然后点击工具栏中的保存。
- 双击测试 2: addItemToCart 节点,该节点位于 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。
- 对于 itemID,从下拉菜单中选择参数化和使用数据源向导。
- 如下所示完成使用现有消息中的值进行参数化对话框,以便在运行此测试时,将自动插入测试 1 中存储的值作为 itemId 元素的值:
- 从对话框顶部的现有消息菜单中选择测试 1: getItemByTitle。
- 点击预期消息树中的 id 元素,然后点击添加。该 id 元素显示在所选元素列表中,并带有与所选测试对应的数据源列名。
- 点击 OK 按钮。
测试 1:id[1] 现在作为 itemId 的参数化值显示在右侧 GUI 面板中。您还将注意到,在场景测试中,响应 SOAP Envelope> XML 数据库节点现在出现在 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件的 测试 1: getItemByTitle 节点中。
- 在测试配置面板中,为 quantity 元素输入固定值
3
,然后工具栏中的保存。 - 双击测试 3: updateItemInCart 节点。
- 对于 cartId,从下拉菜单中选择参数化和使用数据源向导。
- 如下所示完成使用现有消息中的值进行参数化对话框,以便在运行此测试时,将自动插入测试 2 中存储的元素值 cartId 作为这里 cartID 元素的值:
- 从对话框顶部的现有消息菜单中选择测试 2: addItemtoCart。
- 点击预期消息树中的 cartId 元素,然后点击添加。该 cartID 元素显示在所选元素列表中,并带有与所选测试对应的数据源列名。
- 点击 OK。
测试 2:cartId[1] 现在作为 cartId 的参数化值显示在测试配置面板中。您还将注意到,在场景测试中,响应 SOAP Envelope> XML 数据库节点现在出现在 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件的测试 2: addItemtoCart 节点中。
- 配置 itemId 以使用测试 1 中的 ID。
- 点击工具栏中的保存。
- 点击 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后点击工具栏中的运行测试。运行该测试时,测试 1 中存储的 id 元素值将自动作为 itemID 元素值插入测试 2 和测试 3 中。此外,测试 2 中的 cartId 将用于测试 3。
- 探索通讯报文,方法是展开 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 并双击每个测试的 通讯报文对象 > 通讯报文查看器节点。
- 请注意,测试 1 返回的书籍 ID 将用作测试 2 的输入。此外,在测试 2 中已下订单的 cartId 会被用作测试 3 的输入。
- 右键点击场景: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后选择创建/更新回归控制。
- 在响应验证向导中,选择创建回归控制,点击下一步,选择创建多个控制,然后点击完成。运行测试并将回归控制添加到每个 SOAP 客户端测试中。
- 点击 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后点击工具栏中的测试。注意报告的测试失败。
- 检查出现在质量任务视图中的错误消息。这些回归失败是由于响应消息中出现的动态内容造成的。在下面的步骤中,我们将忽略具有这种类型的动态数据的元素。
- 在质量任务视图中,右键点击每个测试套件节点下报告的第一个错误,并从快捷菜单中选择忽略 XPath。在打开的 IgnoreXPathSettings 对话框中,点击 OK。在此步骤中,您应该忽略两个 XPath。
- 点击测试套件: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后点击工具栏中的测试。现在所有的测试都应该成功了。
现在,您已经创建了一个功能齐全的场景测试,测试在正常使用书店服务期间可能发生的一个可能的业务事务。对于其他练习,您可以尝试创建可能发生的其他场景。还可以为扩展的测试覆盖率创建负面测试用例。