2017-10-21 5 views
1

私のプロジェクトでは、python unittestを使用していましたが、unittest.TextTestRunnerunittest.defaultTestLoader.loadTestsFromTestCaseとなりました。私は、次のような理由からpy.testのオブジェクトとしての出力を読み取る

  1. コントロールユニットテストのrunメソッドを呼び出すラッパー関数を使用してユニットテストの実行を、それらを使用しました。私はコマンドラインアプローチを望んでいませんでした。

  2. 結果オブジェクトからunittestの出力を読み込み、結果をバグ追跡システムにアップロードすることで、コードの安定性に関する複雑なレポートを生成することができます。

最近、py.testに切り替えることが決定されました。どのようにpy.testを使用して上記を行うことができますか? py.testの出力を得るためにCLI/HTMLを解析したくありません。私はまた、これを行うために私の単体テストファイルにあまりにも多くのコードを書いたくありません。

誰かがこれを手伝ってくれますか?

答えて

1

pytestはコマンドラインを使用する代わりにlaunch from Python codeになります。コマンドライン上にある関数呼び出しに同じ引数を渡すだけです。

Pytestはresultlog format filesを作成しますが、この機能は推奨されていません。ドキュメントは、任意のプロトコルのテストでファイルを生成するpytest-tap pluginを使用することを提案しています。一部に(必要な段階で、あなたのコードを挿入するために、あなたはこれらのフックの1つを傍受することができます。同様に

import pytest 

@pytest.hookimpl(hookwrapper=True) 
def pytest_runtest_logreport(report): 
    yield 

    # Define when you want to report: 
    # when=setup/call/teardown, 
    # fields: .failed/.passed/.skipped 
    if report.when == 'call' and report.failed: 

     # Add to the database or an issue tracker or wherever you want. 
     print(report.longreprtext) 
     print(report.sections) 
     print(report.capstdout) 
     print(report.capstderr) 

conftest.py:あなたは、テスト結果の報告を傍受するpytestのフックを使用することができます

2

、と)周りyieldのtry-除く例:

  • pytest_runtest_protocol(item, nextitem)
  • pytest_runtest_setup(item)
  • pytest_runtest_call(item)
  • pytest_runtest_teardown(item, nextitem)
  • pytest_runtest_makereport(item, call)
  • pytest_runtest_logreport(report)

続きを読む:Writing pytest pluginsこのすべてが簡単なインストールライブラリとして作られた小さなプラグインのいずれかで行うことができます

、または疑似プラグインとしてconftest.pyテストのあるディレクトリの1つにあります。

関連する問題