Parallele tests mit pytest

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Antworten