行为 - 应用程序之间的共同特征,避免重复

时间:2014-12-02 04:16:22

标签: bdd python-behave

我有许多我想测试的应用程序,它们具有很多重叠的功能。以下是我可能拥有的场景的简化示例:

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,但之后我会为每个用户重复相同的方案,并且这有很多重复。是否有一种很好的方法可以将所有示例压缩到一个场景中 - 但只选择性地运行其中一些?什么是正确的方法?

1 个答案:

答案 0 :(得分: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   |

让我们说我只想为鲍勃,红色,小姐进行测试。它在第一个表中,第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的发行说明中。