コンテキスト:Python with Behave(BDD)を使用しています。
テストをコマンドライン(動作)から実行する場合でも、カスタムmain()から実行する場合でも、動作は同じです。テストが実行され、コンソールに表示される唯一の出力は標準BDDレポートです。
テストには、コードのデバッグに役立つprint()ステートメントが含まれています。ただし、動作を実行すると、これらの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")
ドキュメントを読むのにより多くの時間を費やした後、それを理解しました。実際には非常に簡単です。デフォルトでは、behave
はnot出力を表示します(つまり、print()
を使用して)。テストに失敗がない限り。テストの結果(合格/不合格)に関係なく、すべての出力を強制的に表示するには、デフォルト設定の一部を変更するだけです。それを実現する最も簡単な方法は、プロジェクトのディレクトリのルートにbehave.ini
という名前のファイルを作成し、以下を配置することです。
ファイル名:behave.ini
[behave]
stderr_capture=False
stdout_capture=False
次回動作テストを実行すると、テストが成功したか失敗したかにかかわらず、デバッグステートメントからのすべての出力が表示されます。
コマンドラインから、次を使用できます。
--no-capture
すべてのstdout出力をすぐに印刷します。
--no-capture-stderr
すべてのstderr出力をすぐに印刷します。
最初に行うことは、 Xuan または Ben で説明されているように、stdout
(および場合によってはstderr
)のキャプチャを防ぐことです。
しかし、それを知らない人々を困らせるさらなる複雑さがあります。デフォルトでは、behave
はレポートをカラーで出力します。これが問題になるのは、ステップを実行するときに、ステップの行を最初に中間色で出力し、ステップが通過したかどうかがまだわからないことを示すためです。ステップが終了すると、エスケープコードを使用して前の行を新しい色で上書きします。回避策を講じない場合、behave
は単純にprint
ステートメントが生成したものを上書きする可能性があります、そして何が起こったのかを把握するのは難しいかもしれません。
次の図では、行末の角括弧に色を入れます。 print
を使用しない場合、実行される前に、「何かをする」ステップが次のように表示されます。
When do something [gray]
そして、実行されると、緑色の線に置き換えられます。
When do something [green]
behave
は、端末を上に移動させて行を新しい色で上書きするエスケープシーケンスを出力します。問題ありません。
print "foo"
あなたのステップでは、ターミナルはステップが完了する直前にこれを含みます:
When do something [gray]
foo
そして、ステップが正常に完了すると、これがターミナルに表示されます。
When do something [gray]
When do something [green]
同じエスケープシーケンスにより、behave
はprint
ステートメントによって生成された出力を上書きします。
stdout
キャプチャをオフにすることに加えて、この問題を回避するために2つの方法を使用しました。
使用 --no-color
オプション。これにより、エスケープシーケンスがオフになり、print
ステートメントで可視出力が生成されます。
print
の末尾にいくつかの改行を追加します。そう print "foo\n\n"
、 例えば。 behave
は、必要な情報を上書きする代わりに、無駄な空白行を上書きします。 behave
を直接呼び出してbehave
の呼び出しに単一の追加オプションを追加したり、設定ファイルを編集したりするのは、いくつかの改行を追加するよりも面倒だからです。 print
。
_behave.ini
_は機能しません。
選択する
--no-capture
_引数を使用して、コンソールにprint()
ステートメントを表示します(ただし、最後のprint()
は表示されないため、理由はわかりません)、または--no-captureでカラー出力を使用している場合でも、stdout/stderrの最後の行を表示するもう1つの方法。 environment.pyに以下を配置します。
def after_step(context, step):
print()
そうすれば、実際に見たいものではなく、空の行が食べられます。