Python 行为:如何检查当前步骤是否在"背景"上下文中



摘要:当在-w模式下生成测试报告或测试运行转储时,我希望支持作为后台步骤运行的步骤的stdout输出。我可以控制通过环境变量产生的输出,但我无法检测何时设置它,这取决于步骤是否在后台。对我来说,更好的是能够告诉behavior不要在后台以程序方式执行步骤时捕获/输出stdout。

详细信息:

Feature: Foo
    Background:
        Given foo <setup_mode> was run successfully
    Scenario: ...
        Given foo <test_mode> was run successfully

步骤"foo"在stdout上产生了很多输出,当它是测试后台的一部分时,我想关闭它。最好是在Background上使用@quiet标记,我可以在执行步骤时将环境设置为不健谈,但Behavior中不支持Background标记。

在这里,我无法通过上下文或标签检测到我所在的位置:

def before_step(context, tag):

上下文_如果我在后台或场景中,dir不会提供给我。

=>这方面有什么最佳实践吗?

我目前的方法是通过专用的Given步骤(如"And api output is[on|off]")显式切换输出,但由于后台和测试步骤总是一样的,我希望在幕后完成。

哦,重新检查(伟大的)API有帮助;-)

简单的答案对我有效,很抱歉打扰:

def before_feature(context, feature, **args):  
    context.background_steps = getattr(
            feature.background, 'steps', 0) or [] 
def before_step(context, step):
    if step in context.background_steps:
        <switch off chattyness>
    else:
        <switch on chattyness>

实际上,成语"使用标签进行设置/拆卸"(对于您想要做的事情)是个好主意。为此,请使用before_tag()/after_tag()挂钩。

注:

  • 背景不支持标记。请参阅Gherkin语法
  • 背景步骤与场景步骤合并(已准备好场景)

最新更新