Seite 1 von 1

Parallele tests mit pytest

Verfasst: Sonntag 15. Juli 2018, 18:12
von Boa
Hallo,

Ich versuche mit pytest meine tests zu parallelisieren. Da ich zusätzlich Umgebungsvariablen mitgebe nutze ich dazu die `--tx` option, statt `-n`.
Leider laufen die Tests nicht parallel. Ich habe 4 Tests geschrieben die jeweils 10 Sekunden schlafen (time.sleep). Trotz der "Parallelisierung" dauert der gesamte Lauf mehr als 40 Sekunden anstatt ungefähr 20 Sekunden. Unten steht der genutzte Befehl und die Ausgabe. Es gibt keine Fehlerausgabe, also verstehe ich anscheinend das Konzept falsch. Könnt ihr mir den Fehler erklären und helfen die Tests zu parallelisieren?

Code: Alles auswählen

pytest --dist=load --tx popen//python=python3.6//env:bla=123//env:blubb=321 --tx popen//python=python3.6//env:bla=42//env:blubb=223 tests/ -k blubb
Test session starts (platform: linux, Python 3.6.3, pytest 3.6.1, pytest-sugar 0.9.1)
rootdir: /home/boa/projects/test, inifile: setup.cfg
plugins: xdist-1.22.2, sugar-0.9.1, rerunfailures-3.1, pudb-0.6, forked-0.2, env-0.6.2, cov-2.5.1
gw0 [4] / gw1 [4]
scheduling tests via LoadScheduling

 tests/blubb1.py ✓✓                                                                                                                                                  75% ███████▌  
 tests/blubb2.py ✓✓                                                                                                                                        100% ██████████

Results (45.04s):
Danke,
Boa

Re: Parallele tests mit pytest

Verfasst: Sonntag 15. Juli 2018, 20:10
von __blackjack__
@Boa: Also erst mal eine Rückfrage: Dir ist klar das so nicht jeder Test mit den gleichen Umgebungsvariablen ausgeführt wird? Und das so ein Testlauf dadurch nicht reproduzierbar ist?

Re: Parallele tests mit pytest

Verfasst: Sonntag 15. Juli 2018, 20:19
von Boa
Die `-v` Option für pytest hat gezeigt, dass die Parallelisierung funktioniert. Die hohe Laufzeit kam durch anderweitigen Overhead zustande. Ich habe die Laufzeit der Tests erhöht und war dadurch schneller als die single Thread Ausführung.

@blackjack: Das ist so gewollt. Die Tests sind reproduzierbar. Die Umgebungsvariablen werden zur Zuweisung isolierter Service Instanzen wie der Datenbank benötigt. Dadurch bleiben die Test Prozesse unabhängig voneinander.

Re: Parallele tests mit pytest

Verfasst: Montag 16. Juli 2018, 13:11
von DasIch
Die Parallelisierung die pytest betreibt ist mit signifikanten Overhead verbunden, dass lohnt sich wirklich nur wenn du viele Tests hast und es sonst einige Minuten dauern würde.