2016-07-29 8 views
7

私はpytestを使って私のプロジェクトにテストスイートを開発しています。プロジェクトの性質上、テストの実行方法を制御するPytestプラグインを作成する必要があります。それらはローカルでは実行されませんが、実行するために別のプロセスに送信されます。 (私は約xdistを知っているが、私はそれは私の問題を解決しないと思います。)Pytest plugin:pytest_runtest_callとfriendsをオーバーライドします

私は様々なpytest_runtest_*メソッドをオーバーライドすることで自分のPytestプラグインを書いてきました。これまでは順調に進んでいます。ここで私が壁に当たったところです:私はpytest_runtest_setuppytest_runtest_callpytest_runtest_teardownの実装を実際にセットアップ、コール、ティアダウンを担当することを望みます。彼らは別のプロセスでそれをやろうとしています。 私の問題はです。Pytestは私のpytest_runtest_setupを呼び出した後、プラグインの行を他のすべてのpytest_runtest_setupと呼んでいます。これは、pytest_runtest_setupのフック指定がfirstresult=Falseであるためです。

実際に現在のプロセスでpytest_runtest_setupを実際に実行したくないため、私はこれをしたくありません。私はそれを私自身で実行する責任があります。私はを無効にしたいどのように実行されているのではなく、を追加します。私はの他の実装を自分自身の下ににするのではなく、を実行します。

どうすればいいですか?

+2

pytestで不明瞭な関数をmonkeypatchする必要があるようです。コードをちょっと見ようとしましたが、その関数が呼び出されたときに明白に見えませんでした。しかし、より洗練された、より互換性のあるソリューションがあるかもしれません。 – Hector

+0

私は賞金の有効期限が切れる前に作業例を思いつく時間はありませんが、これを行うためのフックは次のように見えます:['pytest_runtest_protocol'](http://doc.pytest.org/en/latest/ writing_plugins.html#_pytest.hookspec.pytest_runtest_protocol) –

答えて

0

Generic “runtest” hooks

すべてのRUNTEST関連のフックはpytest.Itemオブジェクトを受け取ります。

pytest_runtest_protocol(項目、nextitem)[ソース]

implements the runtest_setup/call/teardown protocol for the given test item, including capturing exceptions and calling reporting hooks. 
Parameters: 

    item – test item for which the runtest protocol is performed. 
    nextitem – the scheduled-to-be-next test item (or None if this is the end my friend). This argument is passed on to pytest_runtest_teardown(). 

Return boolean: 

True if no further hook implementations should be invoked. 

pytest_runtest_setup(アイテム)[ソース]

called before pytest_runtest_call(item). 

pytest_runtest_call(アイテム)[ソース]

called to execute the test item. 

pytest_runtest_teardown(項目、次項目)[ソース]

called after pytest_runtest_call. 
Parameters: nextitem – the scheduled-to-be-next test item (None if no further test item is scheduled). This argument can be used to perform exact teardowns, i.e. calling just enough finalizers so that nextitem only needs to call setup-functions. 

pytest_runtest_makereport(項目、呼び出し)[ソース]

return a _pytest.runner.TestReport object for the given pytest.Item and _pytest.runner.CallInfo. 

より深く理解するために、あなたは_pytest.runnerにこれらのフックのデフォルトの実装を見て、多分また_pytest.pdbであり_pytestと相互作用します。キャプチャとその入出力キャプチャを使用して、テストの失敗が発生したときにインタラクティブなデバッグをすぐに実行できます。

報告された_pytest.terminalは、特に、レポート実行フックを使用してテスト実行に関する情報を出力します。

関連する問題