2

我有许多要测试的应用程序,它们具有大量重叠的功能集。这是我可能遇到的场景的过度简化示例:

Given <name> is playing a game,
 When they shoot at a <color> target
 Then they should <event>

Examples: 
 | name   | color | event |
 | Alice  | red   | hit   |
 | Alice  | blue  | miss  |
 | Bob    | red   | miss  |
 | Bob    | blue  | hit   |
 | Bob    | green | hit   |

这是一个愚蠢的例子,但假设我真的有很多具有不同命中/未命中条件的玩家,我只想运行定名称的场景?说,我只想为Alice. 在单个场景大纲中包含所有命中/未命中测试仍然有优势(因为毕竟它们都是密切相关的)。

一种方法是为每个名称复制测试并标记它们,例如:

@Alice
Given Alice is playing a game
 When she shoots at a <color> target
 Then she should <event>

Examples:
 | color | event |
 | red   | hit   |
 | blue  | miss  |

这样我可以运行behave --tags @Alice,但是我为每个用户重复相同的场景,这是很多重复。有没有一种好方法可以将所有示例压缩到一个场景中 - 但只能选择性地运行其中一些示例?这里的正确方法是什么?

4

1 回答 1

2

版本 1.2.5 引入了更好的方法来区分场景轮廓。现在可以对它们进行唯一区分,从而--name=在命令行中选择从大纲生成的唯一场景。例如,假设以下功能文件:

Feature: test

Scenario Outline: test
 Given <name> is playing a game,
 When they shoot at a <color> target
 Then they should <event>

 Examples:
  | name   | color | event |
  | Alice  | red   | hit   |
  | Alice  | blue  | miss  |
  | Bob    | red   | miss  |
  | Bob    | blue  | hit   |
  | Bob    | green | hit   |

假设我只想为 Bob、red、miss 运行测试。它在第一个表,第 3 行。所以:

behave --name="@1.3"

将选择此测试。在版本 1.2.5 和后续版本中。生成的场景有一个名称,其中包括"@<table number>.<row number>"<table number>的编号(从 1 开始)和<row number>行的编号。

这不会让您轻松选择与单个用户相关的所有方案。但是,您可以通过另一种方式实现它。您可以将示例一分为二:

 Examples: Alice
  | name   | color | event |
  | Alice  | red   | hit   |
  | Alice  | blue  | miss  |

 Examples: Bob
  | name   | color | event |
  | Bob    | red   | miss  |
  | Bob    | blue  | hit   |
  | Bob    | green | hit   |

表名将出现在生成的场景名称中,您可以要求行为运行与一张表关联的所有测试:

behave --name="Alice"

我不知道如何分步访问示例名称,从而摆脱第一列。

完整的详细信息在1.2.5的发行说明中。

于 2015-12-15T10:05:52.073 回答