51

コンテキスト: Python と Behave (BDD) を使用しています。

テストをコマンド ライン (behave) から実行する場合でも、カスタムの main() から実行する場合でも、動作は同じです。テストが実行され、コンソールに表示される出力は標準の BDD レポートだけです。

テストには、コードのデバッグに役立つ print() ステートメントが含まれています。ただし、これらの print ステートメントは、behavior を実行したときにコンソール出力に表示されません。

コード内の print ステートメントを「動作」させる方法はありますか?

私のメイン()

config = Configuration()
if not config.format:
    default_format = config.defaults["default_format"]
    config.format = [ default_format ]
    config.verbose = True
r = runner.Runner(config)
r.run()

if config.show_snippets and r.undefined_steps:
    print_undefined_step_snippets(r.undefined_steps)

私の test.feature ファイル:

Feature: My test feature with the Behave BDD
    Scenario: A simple test
    Given you are happy
    When someone says hi
    Then you smile

私のtest_steps.pyファイル:

from behave import given, when, then, step, model

@given('you are happy')
def step_impl(context):
    pass

@when ('someone says {s}')
def step_impl(context, s):
    context.message = s
    print("THIS IS NEVER DISPLAYED IN THE CONSOLE")
    pass

@then ('you smile')
def step_impl(context):
        assert(context.message == "hi")
4

6 に答える 6

45

コマンドラインから、次を使用できます。

--no-capturestdout 出力がすぐに印刷されるようにします。

--no-capture-stderrstderr 出力がすぐに印刷されるようにします。

于 2015-02-16T22:09:24.593 に答える
32

ドキュメントを読むのにもっと時間を費やした後、私はそれを理解しました。それは実際には非常に簡単です。デフォルトでは、テストに失敗しない限り、出力は表示されbehaveませ(つまり、 を使用した場合)。print()テストの結果 (合格/不合格) に関係なく、すべての出力を強制的に表示するには、デフォルト設定の一部を変更するだけです。behave.iniこれを実現する最も簡単な方法は、プロジェクトのディレクトリのルートに名前の付いたファイルを作成し、次を配置することです。

ファイル名:behave.ini

[behave]
stderr_capture=False
stdout_capture=False

次に動作テストを実行すると、テストが成功したか失敗したかにかかわらず、デバッグ ステートメントからのすべての出力が表示されます。

于 2014-08-13T16:22:07.583 に答える