18

そのため、自動使用、セッション スコープのセットアップおよびティアダウン フィクスチャが実行されない理由を突き止めようとして1 日を失いました。最後に、プラグインのドキュメントにあるこの小さなヒントにつまずきました(このSOコメントpy.testへの帽子のヒント!):

サブディレクトリの conftest.py ファイルは、デフォルトではツールの起動時に読み込まれないことに注意してください。

私のプロジェクトでは、かなり標準的なセットアップのように見えるサブディレクトリにpy.test ファイル (conftest.pyおよびテスト ファイル)を取得しました。tests ディレクトリでtests/実行すると、すべてが正しく実行されます。py.testプロジェクトのルート ディレクトリで実行py.testすると、テストは引き続き実行されますが、セットアップ/ティアダウン ルーチンは実行されません

質問:

  • ユーザーがプロジェクトのルートディレクトリからテストを正しく実行できるようにする「標準的な」方法は何ですか? ルートconftest.pyディレクトリに配置するのは奇妙に感じます。なぜなら、すべてのテスト関連のファイルはtestsサブディレクトリに残す必要があるからです。
  • conftest.pyサブディレクトリ内の がデフォルトでロードされないのはなぜ (設計上) ではないのですか? サブディレクトリ内のテストがデフォルトで検出されることを考えると、控えめに言ってもこの動作は興味深いと思います。そのため、conftest ファイルの検索にも追加の労力はほとんど必要ないようです。
  • 最後に、どうすればconftest.pyサブディレクトリをロードできますか (つまり、デフォルトから変更できますか)? ドキュメントでこれを見つけることができませんでした。可能であれば追加のコンソール引数を避けたいので、設定ファイルなどに何かを入れることはできますか?

プロジェクトのテストを書くことができたときに、これを診断するために多くの時間を失ったり無駄にしたりしたと感じています。:-(

最小限の例:

# content of tests/conftest.py
# adapted from http://pytest.org/latest/example/special.html
import pytest
def tear_down():
    print "\nTEARDOWN after all tests"

@pytest.fixture(scope="session", autouse=True)
def set_up(request):
    print "\nSETUP before all tests"
    request.addfinalizer(tear_down)

テストファイル:

# content of tests/test_module.py
class TestClassA:
    def test_1(self):
        print "test A1 called"
    def test_2(self):
        print "test A2 called"

class TestClassB:
    def test_1(self):
        print "test B1 called"

コンソール出力:

pytest_experiment$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items 

tests/test_module.py test A1 called
.test A2 called
.test B1 called
.

====================================================== 3 passed in 0.02 seconds ======================================================
pytest_experiment$ cd tests/
pytest_experiment/tests$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items 

test_module.py 
SETUP before all tests
test A1 called
.test A2 called
.test B1 called
.
TEARDOWN after all tests


====================================================== 3 passed in 0.02 seconds ======================================================
4

1 に答える 1