当我运行我的测试套件时,behave
的默认输出显示了步骤的来源,这一切都很好而且花花公子,除了使用此输出来查找不是 < em>已使用 需要我手动标记已使用的步骤,以便发现未使用的步骤。
behave
能否以自动报告未在测试套件中使用的步骤定义的方式调用?
最佳答案
有一个内置的方法,但没有很好的文档记录。在 formatters 列表中,有一个名为steps.usage
的格式化程序,它被描述为:
Shows how step definitions are used by steps (in feature files).
此描述并未明确说明,但此格式化程序不仅报告功能文件如何使用这些步骤,而且还报告未使用的步骤。如果套件中有未使用的步骤,输出将包含如下内容:
UNUSED STEP DEFINITIONS[8]:
@then('something') # features/steps/something.py:1
@given('some condition') # features/steps/something.py:12
[...]
方括号中的数字是找到的未定义步骤定义的数量。然后列出每个未定义的步骤,每行一个。该行以 @then
/@given
/etc 开头。用于定义步骤的装饰器。然后是一个#
字符,后面给出了步骤定义的文件和行号。
你可以这样使用它:
behave -f steps.usage --dry-run
重要提示:记者对特征文件进行了静态分析。这意味着如果在执行时您的步骤执行其他步骤,那么以这种方式运行的步骤将不会被格式化程序视为“已使用”,除非它们也直接用于一个功能文件。这可能会导致格式化程序错误地将某些步骤报告为未使用。 (这发生在我第一次尝试运行时。)例如,以下定义在执行时调用两个步骤:
@when(u"the user does something")
def step_impl(context):
context.execute_steps(u"""
When the user does something else
Then something special happens
""")
这两个步骤是通过 context.execute_steps
使用的,不会被 steps.usage
检测到,因此这些步骤将被视为未使用,除非它们也逐字出现在功能文件中。
请注意,您可以在没有 --dry-run
的情况下运行格式化程序,在这种情况下,它将真正运行您的套件并在最后生成报告。但是,这样做并不能解决我刚才提到的问题。我试过了,希望它能将我的那些仅通过 context.execute_steps
使用的步骤标记为已使用,但它没有用。
关于python - 如何在我的测试套件中找到未使用的步骤定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512115/