Page tree

Skip to end of metadata
Go to start of metadata

单元测试创建后,可以利用到无需任何附加工作的基于场景的测试中。场景测试允许您模仿在正常使用 web 服务过程中可能发生的业务逻辑或事务。还允许您找到仅在特定事件序列之后才出现的 bug。

Parasoft SOAtest 允许创建多个步骤场景,每个步骤执行相同的服务或完全不同的应用程序接口。这允许您自动化业务用例场景的建模(如 End-to-End Business Process Testing中所述)。这还允许您发现只有在特定的事件序列之后才会出现的意外行为。

“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” 测试套件。

注意,本节课假设您已经完成了前面的课程。为了跟上这堂课,请确保您已经完成了之前的课程。 

创建场景测试套件

若要创建该场景:

  1. 请选择上次练习的 Test Suite: Functional Tests 节点,然后单击 Add Test Suite 按钮。



  2. Add Test Suite 向导中选择 Empty ,然后单击 Finish 按钮。
  3. 双击新建的 Test Suite: Test Suite 节点被添加到测试套件树中。
  4. 在测试套件配置面板中,将 Scenario Test - Search, Add to Cart, and Remove from Cart 输入到 Name 字段中,然后单击 Save 工具栏按钮。
  5. 从前面创建的 CartServicePort 测试套件中复制积极的 getItemByTitleaddItemToCartupdateItemInCart SOAP 客户端测试节点,并将它们粘贴到 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。如果需要,可以拖放来重新排序。

这三个测试代表客户可能调用的典型业务事务。这将是我们场景测试的基础。

存储将在后续测试中使用的结果

您可以通过如下配置 XML 数据库来存储结果:

  1. 双击 Test 1: getItemByTitle 节点,该节点位于 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。
  2. 在测试配置面板中,从右上角的 Data Source 下拉菜单中选择 Books



  3. 选择 titleKeyword,然后从 itemId 元素下拉菜单中选择 ParameterizedKeywords



  4. 双击 Test 2: addItemToCart 节点,该节点位于 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件中。
  5. 对于 itemID,从下拉菜单中选择 ParameterizedUse Data Source Wizard



  6. 如下所示完成 Parameterize with Value From Existing Message 对话框,以便在运行此测试时,将自动插入 Test 1 中存储的值作为 itemId 元素的值:
    1. 从对话框顶部的 现有 消息 菜单中选择 Test 1: getItemByTitle
    2. Expected Message 树中选择 id 元素,并单击 Add 按钮。这个 id 显示在 Selected Element 列表中,并带有与所选测试对应的 Data Source Column Name 。 



    3. 单击 OK 按钮。
      Test 1:id[1] 现在作为 itemId的参数化值显示在右边的 GUI 面板中。您还将注意到,在场景测试中, Response SOAP Envelope> XML Data Bank 节点现在出现在 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件的 Test 1: getItemByTitle 节点中。
  7. 在“测试配置”面板中,为 quantity 元素输入固定值 3,然后单击 Save 工具栏按钮。



  8. 双击 Test 3: updateItemInCart 节点。
  9. 对于 cartId,从下拉菜单中选择 ParameterizedUse Data Source Wizard
  10. 如下所示完成 Parameterize with Value From Existing Message 对话框,以便在运行此测试时,将自动插入 Test 2 中存储的元素值 cartId 作为这里 cartID 元素的值:
    1. 从对话框顶部的 Existing message 菜单中选择 Test 2: addItemtoCart
    2. Expected Message 树中选择 cartId 元素,并单击 Add 按钮。cartID 元素显示在 Selected Element 列表中,并带有与所选测试对应的 Data Source column name



    3. 单击 OK 按钮。
      Test 2:cartId[1] 现在在测试配置面板中显示 cartId的参数化值。您还将注意到,在场景测试中, Response SOAP Envelope> XML Data Bank 节点现在出现在 Scenario Test - Search, Add to Cart, and Remove from Cart 测试套件的 Test 2: addItemtoCart 节点中。
  11. 配置 itemId 以使用测试 1 中的 ID。



  12. 单击 Save 工具栏按钮。
  13. 选择 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后单击 Test 工具栏按钮。当这个测试运行时,存储在 Test 1 中的 id 元素值将自动插入 Test2Test3中的 itemID 元素。此外, Test2 中的 cartId 将在 Test3中使用。
  14. 探索流量,方法是展开 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 并双击每个测试的 Traffic Object> Traffic Viewer 节点。
  15. 注意, Test1 返回的图书 id 被用作 Test2的输入。同时, Test2 放置的订单 cartId 被用作 Test3的输入。
  16. 右键单击 Scenario:Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后选择 Create/Update Regression Controls
  17. 在响应验证向导中,选择 Create Regression Controls, click Next,选择 Create Multiple Controls,然后单击 Finish 按钮。运行测试并将回归控制添加到每个 SOAP 客户端测试中。
  18. 选择 Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后单击 Test 工具栏按钮。注意报告的测试失败。
  19. 检查出现在质量任务视图中的错误消息。这些回归失败是由于响应消息中出现的动态内容造成的。在下面的步骤中,我们将忽略具有这种类型的动态数据的元素。
  20. 在质量任务视图中,右键单击每个 TestSuite 节点下报告的第一个错误,并从快捷菜单中选择 IgnoreXPath 。在显示的 IgnoreXPathSettings 对话框中,单击 OK 按钮。在此步骤中,您应该忽略两个 XPath。
  21. 请选择上次练习的 Test Suite: Scenario Test - Search, Add to Cart, and Remove from Cart 节点,然后单击 Test 工具栏按钮。现在所有的测试都应该成功了。

现在,您已经创建了一个功能齐全的场景测试,测试在正常使用书店服务期间可能发生的一个可能的业务事务。对于其他练习,您可以尝试创建可能发生的其他场景。还可以为扩展的测试覆盖率创建负面测试用例。

  • No labels