У меня следующая структура каталогов:
runner.py
lib/
tests/
testsuite1/
testsuite1.py
testsuite2/
testsuite2.py
testsuite3/
testsuite3.py
testsuite4/
testsuite4.py
Формат модулей testsuite * .py выглядит следующим образом:
import pytest
class testsomething:
def setup_class(self):
''' do some setup '''
# Do some setup stuff here
def teardown_class(self):
'''' do some teardown'''
# Do some teardown stuff here
def test1(self):
# Do some test1 related stuff
def test2(self):
# Do some test2 related stuff
....
....
....
def test40(self):
# Do some test40 related stuff
if __name__=='__main()__'
pytest.main(args=[os.path.abspath(__file__)])
У меня проблема в том, что я хотел бывыполнить «testsuites» параллельно, то есть я хочу, чтобы testsuite1, testsuite2, testsuite3 и testsuite4 запускал выполнение параллельно, но отдельные тесты в пределах testsuites должны выполняться последовательно..test и запустить тесты с помощью 'py.test -n 4', py.test собирает все тесты и случайным образом балансирует нагрузку между 4 работниками.Это приводит к тому, что метод «setup_class» выполняется каждый раз при каждом тесте в модуле «testsuitex.py» (что противоречит моей цели. Я хочу, чтобы setup_class выполнялся только один раз для каждого класса, а тесты выполнялись последовательно после него).
По сути, я хочу, чтобы выполнение выглядело так:
worker1: executes all tests in testsuite1.py serially
worker2: executes all tests in testsuite2.py serially
worker3: executes all tests in testsuite3.py serially
worker4: executes all tests in testsuite4.py serially
, в то время как worker1, worker2, worker3 and worker4
все выполняются параллельно.
Есть ли способ добиться этого в 'pytest?-xidst 'framework?
Единственный вариант, о котором я могу подумать, - запустить разные процессы для индивидуального выполнения каждого набора тестов в runner.py:
def test_execute_func(testsuite_path):
subprocess.process('py.test %s' % testsuite_path)
if __name__=='__main__':
#Gather all the testsuite names
for each testsuite:
multiprocessing.Process(test_execute_func,(testsuite_path,))