unittest tutorial setup fail cov conftest python pytest

python - tutorial - pytest vs unittest



¿Hay alguna manera de controlar cómo pytest-xdist ejecuta pruebas en paralelo? (1)

Tengo el siguiente diseño de directorio:

runner.py lib/ tests/ testsuite1/ testsuite1.py testsuite2/ testsuite2.py testsuite3/ testsuite3.py testsuite4/ testsuite4.py

El formato de los módulos de testinguite * .py es el siguiente:

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__)])

El problema que tengo es que me gustaría ejecutar los ''testsuites'' en paralelo, es decir, quiero que testsuite1, testsuite2, testsuite3 y testsuite4 para iniciar la ejecución en paralelo, pero las pruebas individuales dentro de los testsuites deben ejecutarse en serie.

Cuando uso el complemento ''xdist'' de py.test y comienzo las pruebas con ''py.test -n 4'', py.test está recopilando todas las pruebas y equilibrando la carga aleatoriamente entre 4 trabajadores. Esto lleva al método ''setup_class'' a ejecutarse cada vez que se realiza cada prueba dentro de un módulo ''testsuitex.py'' (que anula mi propósito. Quiero que setup_class se ejecute solo una vez por clase y las pruebas se ejecuten en serie luego).

Esencialmente, cómo quiero que se vea la ejecución es:

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

mientras worker1, worker2, worker3 and worker4 se ejecutan en paralelo.

¿Hay alguna manera de lograr esto en el marco ''pytest-xidst''?

La única opción que se me ocurre es iniciar procesos diferentes para ejecutar cada conjunto de pruebas individualmente dentro de 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,))


Con pytest-xdist actualmente no hay ningún tipo de distribución "por archivo" o "por-prueba-suite". En realidad, si una distribución por archivo (p. Ej., Las pruebas en un archivo solo serán ejecutadas por un trabajador a lo sumo) ya ayudaría a su caso de uso, le animo a presentar un problema de características con el rastreador de problemas de pytest en https://bitbucket.org/hpk42/pytest/issues?status=new&status=open y enlace a su buena explicación aquí.

Saludos, Holger