1

HTMLテストレポートを生成するためにpytest-htmlモジュールでpytestを使用しています。

破棄段階では、生成された HTML レポートをブラウザーで自動的に開きますwebbrowser.open('file:///path_to_report.html')— これは正常に動作しますが、別の引数を使用してテストを実行し、引数のセットごとに、コマンド ライン引数を介して別のレポート ファイルを設定しています。

pytest -v mytest.py::TestClassName --html=report_localhost.html

私の分解コードは次のようになります。

@pytest.fixture(scope='class')
def config(request):
    claz = request.cls
    claz.host = request.config.getoption("--host", default=HOST_DEFAULT)
    ...

    def teardown_env():
        print('destroying test harness')
        webbrowser.open("file:///path_to_report_localhost.html")

    request.addfinalizer(teardown_env)

    return "prepare_env"

問題は、ハードコーディングする代わりに、コマンドライン引数として渡されたパスを使用できるように、テストのティアダウン フックからレポート ファイル名にアクセスする方法--html=report_for_host_xyz.htmlです。

⚠️更新

生成された HTML を表示するためにクラス スコープのフィクスチャを使用することはpytest-html、レポート生成をセッション ファイナライザ スコープにフックするため、正しいアプローチではありません。つまり、クラス ファイナライザが呼び出されるまでにレポートはまだ生成されず、実際にレポートを表示するブラウザ ページ。それが機能しているように見えるのは、ブラウザ ウィンドウが開くのに数秒かかる可能性があるためです。これにより、ファイルがブラウザに読み込まれるまでにレポートの生成が完了する可能性があります。

それを行う正しい方法はこの回答pytest_unconfigureで説明されており、フックの使用に要約されます。

4

1 に答える 1