我有许多我想测试的应用程序,它们具有很多重叠的功能。以下是我可能拥有的场景的简化示例:
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
,但之后我会为每个用户重复相同的方案,并且这有很多重复。是否有一种很好的方法可以将所有示例压缩到一个场景中 - 但只选择性地运行其中一些?什么是正确的方法?
答案 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的发行说明中。