コードインスタンス解析Pytest実行フロー


pytestの全体テストは次の6段階に分けられます。
1、pytest_configure
プラグインやconftest.pyファイルの設定を初期化するなど、セッションを作成します。
2、pytest_sessionstart
sessionを作成した後、collectionを実行する前の段階。pytest_を呼び出しますレポートheaderは、プラグインバージョン、pythonバージョン、オペレーティングプラットフォームなどの環境情報をterminalに印刷する。
3、pytest_コレクション
テストケース収集およびテスト入力の生成プロセスは、ここではまた、keywordsおよびmarkerに従ってテストケースをフィルタリングするプロセスを含むことができる。このプロセスは、複数のgenerate itemの呼び出しに関連します。
pytest_ゲナート_tests(metafunc):テスト項目を生成する;
pytest_メークparametrizeid:@pytest.mark.parametrizeに基づいて対応値を生成します。
pytest_collectionmodifyitems(session、config、items):すべてのテスト項目が収集された後に呼び出します。普通は並べ替えと二次フィルタリングを行います。
pytest_deselected(items):テスト項目がキーワードやマーカーによって濾過された時に呼び出しられます。
注意:文法フィルタテスト用例のステップは、前の段階でテストケースを生成して完成しました。deselectedではありません。
4、pytest_runtenstloop
スクリーニングを実行したテスト用例は、pytest_runtest_protocolでsetup、call、teardownとlogを含む印刷が完了しました。主な注意事項は以下の通りです。
pytest_runtest_ロゴstart(nodeid,location):新しいテスト項目を実行するときに呼び出します。
注:公式文書の意味表現が曖昧で、セットアップ/call/teardown段階ではなく、それぞれ一回呼び出します。つまり、関数コマンドの意味テストが始まる前に一回印刷します。
pytest_runtest_logfinish(nodeid,location):テスト項目の実行を終了するときに呼び出します。
注:同上
pytest_runtest_setup(item):pytest_runtest_コールが実行される前に呼び出します。
pytest_runtest_call(item):実際のテストプロセスを実行します。
pytest_runtest_teardow(item,nextitem):pytest_runtest_コール実行後に呼び出します。
pytest_fixture_setup(fixturedef,request):fixtureのsetupプロセスを実行するかどうか(fixtureが作成する必要があるかどうかによる)
pytest_fixture_post_finalizer(fixturedef,request):fixtureのteardownプロセスを実行します。
pytest_runtest_makereport(item,call):与えられたitemとcallに対応する_を返します。pytest.runner.TestReportオブジェクトは、ここのcall objectは私達はあまり触れません。pytest/runner.pyには具体的な使い方がありますので、参考にしてください。
pytest_runtest_logreport(report):テストのsetup/call/teardown段階のレポートの更新後にそれぞれ呼び出しられ、when属性で異なる段階を区別することができます。
pytest_レポートteststatus(report,config):各テスト段階のresultに戻り、異なる段階をwhen属性で区別することができます。
5、pytest_session finish
全てのテストが実行された後、exit statusの前の段階に戻ります。pytest_を呼び出しますテルミニsummaryはterminalにいくつかのsummary情報を印刷して、たとえばpass、fail、error数量などの総括情報。

def pytest_terminal_summary(terminalreporter, exitstatus, config):
  '''      '''
  print(terminalreporter.stats)
  print("total:", terminalreporter._numcollected)
  print('passed:', len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown']))
  print('failed:', len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown']))
  print('error:', len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown']))
  print('skipped:', len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown']))
  # terminalreporter._sessionstarttime       
  duration = time.time() - terminalreporter._sessionstarttime
  print('total times:', duration, 'seconds')
6、pytest_unconfigure
sessionが終わったら、プロcessが終了する前の段階です。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。