我如何 运行 检查我的功能中使用的所有标签?
How can I run checks on all the tags used in my features?
我有很多功能,想控制标签列表,防止拼写错误和其他命名问题。有什么方法可以获取我所有功能中的标签列表吗?
所以有了
@opponent
Feature: Fight or flight
In order to increase the ninja survival rate,
As a ninja commander
I want my ninjas to decide whether to take on an
opponent based on their skill levels
Scenario: Weaker opponent
Given the ninja has a third level black-belt
When attacked by a samurai
Then the ninja should engage the opponent
@wip
Scenario: Stronger opponent
Given the ninja has a third level black-belt
When attacked by Chuck Norris
Then the ninja should run for his life
和
Feature: showing off behave
@dummy
Scenario: run a simple test
Given we have behave installed
when we implement a test
then behave will test it for us!
我会得到标签列表 ['opponent', 'wip', 'dummy']
。
您可以通过在您的 environment.py
中添加一个 before_scenario
挂钩来实现它,它会遍历场景的标签:
def before_scenario(context, scenario):
for tag in scenario.tags:
if tag not in (... tuple of valid values ...):
raise ValueError("unexpected tag: " + tag)
您需要一个类似的钩子来迭代功能的标签。
或者如果你不关心标签是否附加到场景或功能上,你可以使用 before_tag
钩子而不是上面的两个钩子:
def before_tag(context, tag):
if tag not in (... tuple of valid values...):
raise ValueError("unexpected tag: " + tag)
我使用以下 shell 命令获取我在所有功能文件中使用的所有标签的列表:
grep -r --include="*.feature" -h "^\s*@[[:alnum:]._=:,;()-]\+" | tr "[ \r]" "\n" | sed '/^$/d' | sort | uniq -c
解释:
- 递归
grep
以匹配特征文件中以标记开头的所有行,而不打印文件名 (-h
)。正则表达式符合有效标签的定义,here.
- 使用
tr
将空格转换为换行符(对我来说,回车符 returns 也转换为换行符,因为我在 WSL 中并且我的功能文件有 CRLF 结尾).
- 用
sed
删除空行。
- 排序。
- 使用
uniq
删除重复项,并打印每个标签遇到的次数 (-c
)。
输出看起来像这样:
13 @bar
5 @baz
2 @disabled
1 @foo
1 @wip
我有很多功能,想控制标签列表,防止拼写错误和其他命名问题。有什么方法可以获取我所有功能中的标签列表吗?
所以有了
@opponent
Feature: Fight or flight
In order to increase the ninja survival rate,
As a ninja commander
I want my ninjas to decide whether to take on an
opponent based on their skill levels
Scenario: Weaker opponent
Given the ninja has a third level black-belt
When attacked by a samurai
Then the ninja should engage the opponent
@wip
Scenario: Stronger opponent
Given the ninja has a third level black-belt
When attacked by Chuck Norris
Then the ninja should run for his life
和
Feature: showing off behave
@dummy
Scenario: run a simple test
Given we have behave installed
when we implement a test
then behave will test it for us!
我会得到标签列表 ['opponent', 'wip', 'dummy']
。
您可以通过在您的 environment.py
中添加一个 before_scenario
挂钩来实现它,它会遍历场景的标签:
def before_scenario(context, scenario):
for tag in scenario.tags:
if tag not in (... tuple of valid values ...):
raise ValueError("unexpected tag: " + tag)
您需要一个类似的钩子来迭代功能的标签。
或者如果你不关心标签是否附加到场景或功能上,你可以使用 before_tag
钩子而不是上面的两个钩子:
def before_tag(context, tag):
if tag not in (... tuple of valid values...):
raise ValueError("unexpected tag: " + tag)
我使用以下 shell 命令获取我在所有功能文件中使用的所有标签的列表:
grep -r --include="*.feature" -h "^\s*@[[:alnum:]._=:,;()-]\+" | tr "[ \r]" "\n" | sed '/^$/d' | sort | uniq -c
解释:
- 递归
grep
以匹配特征文件中以标记开头的所有行,而不打印文件名 (-h
)。正则表达式符合有效标签的定义,here. - 使用
tr
将空格转换为换行符(对我来说,回车符 returns 也转换为换行符,因为我在 WSL 中并且我的功能文件有 CRLF 结尾). - 用
sed
删除空行。 - 排序。
- 使用
uniq
删除重复项,并打印每个标签遇到的次数 (-c
)。
输出看起来像这样:
13 @bar
5 @baz
2 @disabled
1 @foo
1 @wip