Cucumber:嵌套场景大纲周期

Cucumber:嵌套场景大纲周期,cucumber,gherkin,Cucumber,Gherkin,要自动化的场景: Given <precondition> was fulfilled And <user> is authorized When user requests <endpoint> Then user should receive <code> response 测试数据矩阵: | precondition | endpoint | user1 | user 2 | ...

要自动化的场景:

 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个端点。 需要为每个用户验证每个端点-因此它应该是一个嵌套循环。
我该怎么做呢?

虽然我提出了这个选项,但它并没有遵循小黄瓜的惯例,因为什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候,什么时候 1.先决条件移动到@Before hook 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    |
已授权
然后,应收到相应的响应代码
|端点|用户1 |用户2|
|/users | 200 | 404|
|/create|u user|200|404|
|/update|u user | 200 | 404|
示例:
|用户名|
|用户1|
|用户2|

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

然而我提出了这个选项,但它不遵循小黄瓜的惯例,因为当测试失败时,然后将一个卡在一个端点中 1.先决条件移动到@Before hook 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    |
已授权
然后,应收到相应的响应代码
|端点|用户1 |用户2|
|/users | 200 | 404|
|/create|u user|200|404|
|/update|u user | 200 | 404|
示例:
|用户名|
|用户1|
|用户2|

这也很不方便,因为当测试失败时,识别故障端点需要时间。

不要因为某些原因而这样做

1) 把所有这些路线和条件都放在小黄瓜里,你不会得到任何好处。没有人能读懂它们并理解它们,特别是当你尝试一些组合的东西时

2) Cuke场景运行缓慢,如果您想运行很多场景,可以通过编写快速单元测试来显著缩短运行时间

3) 如果您用代码编写这个测试,您可以比用小黄瓜编写的测试更优雅

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


你在这个特定的工作中使用了错误的工具,请使用其他工具。

不要因为某些原因而这样做

1) 把所有这些路线和条件都放在小黄瓜里,你不会得到任何好处。没有人能读懂它们并理解它们,特别是当你尝试一些组合的东西时

2) Cuke场景运行缓慢,如果您想运行很多场景,可以通过编写快速单元测试来显著缩短运行时间

3) 如果您用代码编写这个测试,您可以比用小黄瓜编写的测试更优雅

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


对于这个特定的作业,您使用了错误的工具,请使用其他工具。

您现在使用的工具有什么问题?您所说的“嵌套循环”是什么意思?嵌套是因为每一行都是一个具有自己先决条件的测试。然后每个用户都有一个周期。这里的问题是无法解析I examples表(步骤中只有数据表可以操作,但它用于单个测试,而不是大纲-它不会为每一行循环)。当使用示例时,表格标题是常量-我不能指出这个特定用户的状态代码,您现在所拥有的有什么问题?您所说的“嵌套循环”是什么意思?嵌套的,因为每一行都是一个有其自身先决条件的测试。然后每个用户都有一个周期。这里的问题是无法解析I examples表(步骤中只有数据表可以操作,但它用于单个测试,而不是大纲-它不会为每一行循环)。当使用示例时,表头是常量——我不能指出这个特定用户的状态代码——这是正确的答案。Cucumber的全部目的是用通俗易懂的语言捕获业务规则,以便团队能够共享对它们的理解。尝试将其用作集成测试的测试运行器只会是一个问题。我对情景大纲的经验法则是,它们永远不应该检查积极和消极的结果。这是一个很好的迹象,表明您正在将多个业务规则混合到一个场景中,而不是同一规则的多个示例。这是测试多个端点的方式,显然是混合了业务规则。这是正确的答案。Cucumber的全部目的是用通俗易懂的语言捕获业务规则,以便团队能够共享对它们的理解。尝试将其用作集成测试的测试运行器只会是一个问题。我对情景大纲的经验法则是,它们永远不应该检查积极和消极的结果。这是一个很好的迹象,表明您正在将多个业务规则混合到一个场景中,而不是同一规则的多个示例。这是测试多个端点的方式,显然是混合了业务规则。