私は次のディレクトリレイアウトを持っています:
runner.py
lib/
tests/
testsuite1/
testsuite1.py
testsuite2/
testsuite2.py
testsuite3/
testsuite3.py
testsuite4/
testsuite4.py
testsuite*.pyモジュールの形式は次のとおりです。
pytestをインポートする
クラスtestsomething:
def setup_class(self):
'''いくつかのセットアップを行う'''
#ここでいくつかのセットアップを行います
def teardown_class(self):
''''分解を行う''''
#ここでいくつかの分解作業を行います
def test1(self):
#test1関連の作業を行う
def test2(self):
#test2関連の作業を行う
...。
...。
...。
def test40(self):
#test40関連の作業を行う
__name __ =='__main()__'の場合
pytest.main(args = [os.path.abspath(__ file__)])
私が抱えている問題は、「testsuites」を並行して実行したいということです。つまり、testsuite1、testsuite2、testsuite3、testsuite4を並行して実行したいのですが、testsuites内の個々のテストを連続して実行する必要があります。
py.testの「xdist」プラグインを使用し、「py.test -n 4」を使用してテストを開始すると、py.testはすべてのテストを収集し、4人のワーカー間でランダムに負荷分散します。これにより、「testsuitex.py」モジュール内の各テストのたびに「setup_class」メソッドが実行されます(これは私の目的に反します。setup_classをクラスごとに1回だけ実行し、その後テストを連続して実行する必要があります)。
基本的に、実行をどのように見せたいかは次のとおりです。
worker1:testsuite1.pyのすべてのテストを連続して実行します worker2:testsuite2.pyのすべてのテストを連続して実行します worker3:testsuite3.pyのすべてのテストを連続して実行します worker4:testsuite4.pyのすべてのテストを連続して実行します
while worker1, worker2, worker3 and worker4 はすべて並行して実行されます。
'pytest-xidst'フレームワークでこれを実現する方法はありますか?
私が考えることができる唯一のオプションは、runner.py内で各テストスイートを個別に実行するためにさまざまなプロセスを開始することです。
def test_execute_func(testsuite_path):
subprocess.process('py.test%s'%testsuite_path)
__name __ =='__main__'の場合:
#すべてのテストスイート名を収集する
各テストスイートについて:
multiprocessing.Process(test_execute_func、(testsuite_path、))