2

並列呼び出しのpytest-benchmarkランタイム統計を表示するようなプラグインを使用したい, ..., . test_valid_submission(0)test_valid_submission(EXPERIMENT_SIZE)

このために、次のコードを使用してこれを達成しようとしていますpytest-benchmark( pytest を使用したパラメーター化されたベンチマークのグループ化と同様)。

@pytest.mark.parametrize("counter", range(EXPERIMENT_SIZE))
def test_performance_under_load(benchmark, counter):
    benchmark(test_valid_submission, counter)

電話すると

pytest --workers auto --tests-per-worker auto -vv --benchmark-only --benchmark-verbose --group-by=func

最後に、並列呼び出しの各ランタイムの最小値、最大値、平均値、標準偏差を含むベンチマーク サマリー テーブルを取得したいと考えていました。残念ながら、ベンチマークの要約表は出力されません (以下の詳細を参照)。EXPERIMENT_SIZEtest_valid_submission()

@hoefling は、pytest-benchmarkベンチマーク データの実行と収集を並行してサポートしていないとコメントしました。

できる別のpytestプラグイン(または他のソリューション)はありますか

  • EXPERIMENT_SIZE並列test_valid_submission(x)呼び出しの数を収集し、それらをグループ化する
  • グループ内の並列呼び出しのランタイム統計の最小、最大、平均、標準偏差を計算します
  • 複数のグループを使用しますtest_valid_submission(x)test_invalid_submission(x)
  • 上記の pytest-benchmark 要約表と同様に、テストの最後に統計を出力しますか?

pytest-benchmark の詳細

pytest-benchmarkEXPERIMENT_SIZE=3iterations=1およびを使用するとrounds=1、次の出力が得られます (ただし、 の場合でも、統計EXPERIMENT_SIZE>=5は表示されます)。rounds=5

しかし、次の出力が得られます(EXPERIMENT_SIZE=3無関係な行が削除されています):

 ============================== test session starts ==========================================
 platform linux -- Python 3.6.10, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 -- /anaconda3/envs/reg/bin/python
 benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
 plugins: repeat-0.8.0, cov-2.8.1, bdd-3.2.1, clarity-0.3.0a0, benchmark-3.2.3, parallel-0.1.0
 collected 22 items
 pytest-parallel: 8 workers (processes), 3 tests per worker (threads)

 ...

 test/test_x.py::test_valid_submission SKIPPED

Computing precision for time.perf_counter ... 50.99ns.

Calibrating to target round 5.00us; will estimate when reaching 2.50us (using: time.perf_counter, precision: 50.99ns).

Computing precision for time.perf_counter ... 48.98ns.

Calibrating to target round 5.00us; will estimate when reaching 2.50us (using: time.perf_counter, precision: 48.98ns).

Computing precision for time.perf_counter ... 49.01ns.

Calibrating to target round 5.00us; will estimate when reaching
2.50us (using: time.perf_counter, precision: 49.01ns).

Measured 1 iterations: 105.72s.   Running 5 rounds x 1 iterations ...
Measured 1 iterations: 105.73s.   Running 5 rounds x 1 iterations ...
Measured 1 iterations: 117.20s.   Running 5 rounds x 1 iterations ...   
Ran for 339.53s.   Ran for 350.11s.   Ran for 461.53s.

test/test_x.py::test_performance_under_load[2] PASSED
test/test_x.py::test_performance_under_load[1] PASSED
test/test_x.py::test_performance_under_load[0] PASSED

========================== 3 passed, 19 skipped in 714.05s (0:11:54) ========================

代わりに使用benchmark.pedantic(test_valid_submission, args=[counter], iterations=1, rounds=1)しても、印刷された統計にはつながりません。

4

0 に答える 0