0

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

细节:

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

    Scenario: ...
        Given foo <test_mode> was run successfully

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

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

def before_step(context, tag):

如果我在后台或场景中,context._dir 不会提供给我。

=> 任何关于此的最佳实践?

我目前的方法是通过专用的给定步骤显式切换输出(例如“并且 api 输出是 [on|off] ”),但由于背景和测试步骤始终相同,我希望在幕后完成。

4

2 回答 2

0

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

笔记:

  • 背景不支持标签。请参阅 Gherkin 语法。
  • 后台步骤与场景步骤合并(添加到场景中)
于 2015-02-20T22:28:47.517 回答
0

哦,重新检查(很棒的)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>
于 2015-02-19T11:51:51.810 回答