【问题标题】:Cucumber: nested scenario outline cyclesCucumber:嵌套场景大纲循环
【发布时间】:2019-11-14 23:30:55
【问题描述】:

自动化场景:

 Given  <precondition> was fulfilled
 And <user> is authorized
 When user requests <endpoint>
 Then user should receive <code> response

测试数据矩阵:

      | precondition       | endpoint          | user1 | user 2    | ....
      |                    | /users            | OK    | Not Found |
      |                    | /roles            | OK    | OK        |
      |                    | /create_user      | OK    | OK        |
      | object user exists | /update_user      | OK    | OK        |
      | object user exists | /delete_user      | OK    | OK        |
      |                    | /create_data_role | OK    | Not Found |
      | data role exists   | /update_data_role | OK    | Not Found |
  ....

大约有 20 个用户具有不同的角色组合和大约 20 个端点。 需要为每个用户验证每个端点——所以它应该是一个嵌套循环。 我该怎么做?

【问题讨论】:

  • 你现在有什么问题?
  • “嵌套循环”是什么意思?
  • 嵌套,因为每一行都是有自己的先决条件的测试。然后每个用户都有一个循环。这里的问题是我的示例表无法解析(只能操作步骤中的数据表,但它用于单个测试而不是大纲 - 它不会对每一行进行循环)。并且当使用示例表头是常量时 - 我无法为这个特定用户指明状态代码

标签: cucumber gherkin


【解决方案1】:

不要在 Cucumber 中这样做 - 原因

1) 将所有这些路线和条件放在 Gherkin 中没有任何好处。没有人能读懂它们并理解它们,尤其是在你尝试组合的时候

2) Cuke 场景运行缓慢,而您想要运行大量场景,您可以通过编写快速单元测试来显着减少运行时间。

3) 如果你用代码编写这个测试,你可以比在 Gherkin 中更优雅地编写它。

4) 处理错误是痛苦的(正如您已经指出的那样)

您为这项特定工作使用了错误的工具,请使用其他工具。

【讨论】:

  • 这是正确的答案。 Cucumber 的全部意义在于以通俗易懂的语言捕获业务规则,以便团队可以对它们有共同的理解。尝试将其用作集成测试的测试运行器将无济于事。我对场景大纲的经验法则是,他们永远不应该检查正面和负面的结果。这是一个很好的迹象,表明您将多个业务规则混搭到一个场景中,而不是同一规则的多个示例。这种测试多个端点的方式显然是在混合业务规则。
【解决方案2】:

然而我想出了这个选项,但它不遵循小黄瓜的约定,因为当和然后步骤卡在一个 1.前置条件移至@Before钩子 2. 场景

Given <user> is authorized
Then <user> requests functionality appropriate response code should be received
| ENDPOINT                          | USER1 | USER2|
| /users                            | 200   | 404  |
| /create_user                      | 200   | 404  | 
| /update_user                      | 200   | 404  |
Examples:
| username |
| USER1    |
| USER2    |

这也很不方便,因为当测试失败时,需要时间来识别有故障的端点(S)

【讨论】:

    猜你喜欢
    • 2018-04-12
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多