※当サイトの記事には、広告・プロモーションが含まれます。

pytest-covのカバレッジ出力先の変更は、pytest-htmlが必要らしいが...

gigazine.net

光は人間の体内の概日リズムを調整する上で重要な役割を担っており、概日リズムの乱れはさまざまな健康状態の悪化を招く可能性があります。8万8000人以上の被験者が光を浴びる量を1週間にわたり追跡したデータからは、夜に光を浴びすぎたり、昼に浴びる光が少なかったりする人は死亡リスクが高いことが判明しました。

夜に光を浴びすぎたり昼に浴びる光が少なかったりすると死亡リスクが高くなる - GIGAZINE

⇧ Oh, my gosh...

徹夜とか常態化していたり、長時間労働など、要因は様々あれど、過労死に関係しそうな要因が新たに科学的に実証された感はありますな...

pytest-covカバレッジ出力先の変更は、pytest-htmlが必要らしいが...

Pythonのテストフレームワーク「pytest」で「カバレッジ」のレポート出力は、「pytest-cov」というライブラリを導入したのだけど、「カバレッジ」のレポートが毎回同じディレクトリに出力されるという、イケてない作りになっていますと。

で、ネットの情報を漁っていたところ、

stackoverflow.com

stackoverflow.com

⇧ とあり、「pytest-html」なるライブラリをインストールする必要がありますと。

なので、

  1. pytest
  2. pytest-conv
  3. pytest-html

の3つのライブラリをインストールする必要がありますと。

何が分かり辛いかというと、「pytest」以外は、Pythonのプログラムでimport不要というね...

「requirements.txt」とかで、どのライブラリが、どういった役割なのかコメントでもしておかないと、必要なライブラリがサッパリ分からなくなるよのね...

で、話を脱線すると、「pytest」には「conftest.py」という特殊なファイルが利用できる仕組みになっているらしく、

docs.pytest.org

⇧ とあるように、「conftest.py」ファイルはいくつでも使って良いようなのだが、importが不要の代わりに、配置場所によって、参照される範囲が決まってるらしく、

  1. tests/testconf.py
  2. tests/subpackage/testconf.py

上記のような配置になっていると、

「1. tests/testconf.py」で定義されている「fixture」は、「tests」ディレクトリ配下の「.py」から参照でき、「2. tests/subpackage/testconf.py」で定義されている「fixture」は、「rests/subpackage」ディレクトリ配下の「.py」からしか参照できないと。

直感的に階層的に捉えにくいのですが、

zenn.dev

⇧ 上記サイト様のディレクトリ構成図がイメージし易いかと。

で、話を元に戻すと、

stackoverflow.com

⇧ stackoverflowの情報が正しいとするならば、

docs.pytest.org

⇧ 上記を呼ぶ時点で「カバレッジ」のレポートが出力済みという想定の話になってるからして、「pytest_sessionfinish」という「fixture」内でディレクトリの作成とかもしてしまえば良いのではと思ってしまうのだが、公式のドキュメントには「カバレッジ」のレポートの出力が終わっているという話は出て来ないのよね...

ちなみに、「config.option.htmlpath」にパスを設定すると、通常だと出力されていたファイルが根こそぎ消えて、「config.option.htmlpath」に指定した1ファイルのみ出力される仕組みになっており、思想が皆目見当が付かない...

まぁ、何が言いたいかというと、「config.option.htmlpath」を指定しないと「カバレッジ」のレポートの出力先を動的に変えられないのだが、通常の設定だと、毎回同じ出力先になるのでエビデンス残すのが面倒くさくなりそうだなと。

コマンドで「pytest」を実行するという方法もあるのだが、せっかく「VS CodeVisual Studio Code)」でGUI上で操作できるようになっているのに、コマンドで実行するのは何だかなぁ、というお気持ち...

とは言え、都度、「カバレッジ」のレポートの移動する手間が煩わしさMAXといった感じは否めない...

「pytest」はテストが成功する場合にログ出力をしないのがデフォルトになっていたりと、なかなかに辛い...

テスト実行時に1つ前のテストの実行結果をバックアップする方針であれば、pytest内で完結できそうか

1晩眠って、整理してみたが、

  1. 最新のテストの実行結果を、テストの最後に移動する
  2. 1つ前のテストの実行結果を、テストの最初に移動する

の内、「2. 1つ前のテストの実行結果を、テストの最初に移動する」であれば、実現できそうな気がしてきた。

そうなってくると、「pytest-html」の利用は必要なくなるんかね?

「pytet」の「スコープ」と「カバレッジ」のレポートの出力の完了するタイミングが分からないのだが、「2. 1つ前のテストの実行結果を、テストの最初に移動する」であれば、確実に、1つ前のテストの実行時の「カバレッジ」のレポートの出力は完了していますからな。

まぁ、複数ファイルのテストを同時に実行するような場合は、一番浅いディレクトリに配置のテストクラスで「カバレッジ」のレポートの移動する処理をコーディングするかんじになるんかな...

「pytest」何も分からん...

毎度モヤモヤ感が半端ない…

今回はこのへんで。