Python 如何在测试套件中找到未使用的步骤定义?

Python 如何在测试套件中找到未使用的步骤定义?,python,python-behave,Python,Python Behave,当我运行我的测试套件时,behave的默认输出显示步骤的来源,这一切都很好,但使用此输出查找未使用的步骤定义需要我手动标记已使用的步骤,以便发现未使用的步骤 调用是否可以自动报告测试套件中未使用的步骤定义?有一种内置方法,尽管没有很好的文档记录。在的列表中,有一个名为steps.usage的格式化程序,其描述如下: 显示步骤(在要素文件中)如何使用步骤定义 此描述并不明确,但此格式化程序不仅报告要素文件如何使用步骤,而且还报告未使用的步骤。如果套件中有未使用的步骤,则输出将包含以下内容: UNU

当我运行我的测试套件时,
behave
的默认输出显示步骤的来源,这一切都很好,但使用此输出查找未使用的步骤定义需要我手动标记已使用的步骤,以便发现未使用的步骤


调用
是否可以自动报告测试套件中未使用的步骤定义?

有一种内置方法,尽管没有很好的文档记录。在的列表中,有一个名为
steps.usage
的格式化程序,其描述如下:

显示步骤(在要素文件中)如何使用步骤定义

此描述并不明确,但此格式化程序不仅报告要素文件如何使用步骤,而且还报告未使用的步骤。如果套件中有未使用的步骤,则输出将包含以下内容:

UNUSED STEP DEFINITIONS[8]:
  @then('something')             # features/steps/something.py:1
  @given('some condition')       # features/steps/something.py:12
  [...]
方括号中的数字是找到的未定义步骤定义数。然后列出每个未定义的步骤,每行一个。该行以
@开始,然后是用于定义步骤的给定的
/
/装饰符。然后是一个
#
字符,在该字符之后给出了步骤定义的文件和行号

您可以这样使用它:

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
    """)
这两个步骤通过
上下文使用。执行步骤
不会被
步骤检测到。用法
,因此这些步骤将被视为未使用,除非它们也在功能文件中逐字显示

请注意,您可以运行格式化程序,而无需运行
--干运行
,在本例中,格式化程序将真正运行您的套件并在最后生成报告。然而,这样做并不能解决我刚才提到的问题。我已经试过了,希望它能将我那些只在
上下文中使用的步骤标记为已使用。执行步骤,但它不起作用