web-dev-qa-db-ja.com

py.test、coverage、toxを連携させる:testsフォルダーの__init__。py?

toxpy.testcoverage、およびpytest-covで奇妙な問題が発生しています。py.testオプションを指定して--covを起動するとtoxから、testsフォルダーに__init__.pyファイルが必要なようですが、すぐにはわかりません。

この記事を書いている間、私は前述のtests/__init__.pyを追加することで最初の問題を解決しましたが、今のところ正確に機能する理由と機能しない理由を完全には理解していないので、私はまだ求めています助けて。詳しくは下記をご覧ください。

SOで関連する質問を見つけましたが、答えがこれまでに理解したものと反対であるように見えるため、混乱を招くだけです: `py.test `および` __init __。py`ファイル

こちらの公式ドキュメントも参照してください: py.test-Good Integration Practices (ページの一番下)。


簡素化されたプロジェクト構造:

setup.py
tox.ini
.coveragerc
project/
    __init__.py
    module1.py
    module2.py
    tests/
        __init__.py (optional, an empty file)
        test_module1.py
        test_module2.py

tox.iniの関連部分:

[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
    pytest
    coverage
    pytest-cov

[pytest]
python_files = test_*.py
norecursedirs = .tox

.coveragercの関連部分:

[run]
branch = True
omit = project/tests/*

今、結果:

  • py.test --cov=project --cov-report=termプロジェクトルートから実行=> tests/__init__.pyファイルが存在するかどうかに関係なく正しいカバレッジ。
  • tox -e check without tests/__init__.py =>テストが検出されて実行されますが、「Coverage.py警告:データが収集されませんでした」という警告が表示されます。カバレッジはすべてのモジュールで0%です
  • tox -e check with tests/__init__.py =>カバレッジを再度修正します。

toxを実行するためにtests/__init__.pyファイルが存在する必要がある理由(この空のファイルを追加すると最初の問題が解決した)はすぐにはわかりませんが、テストをいつ実行するかは問題ではありません/手動でカバレッジ。何か案は?

26
aldanor

使用する --cov {envsitepackagesdir}/<your-package-name>tox.iniで。

41
Matt W

参照: カバレッジでpy.testを使用すると、インポートは含まれません

pytest-covの使用をやめ、代わりにcoverageを完全に実行しました。

また、pytestで気づきましたが、正しく機能するには、テストディレクトリに空白の__init__.pyが必要でした。おそらくどこかに理由があります。

これは数年前のことですが、誰かがこれに遭遇した場合に備えて。

4
Brian Kruger