Führen Sie Python unittest parallel aus

Überblick

Was Sie tun möchten: Ich möchte Testcode parallel mit dem Python-Standardmodul unittest ausführen

Wie macht man: Verwenden Sie die Nase als Testläufer und geben Sie die Anzahl der parallelen Läufe mit der Option "--processes" an

Bestätigungsumgebung

$ python --version
Python 3.7.2
$ nosetests --version
nosetests version 1.3.7

Beispielcode zur Bestätigung

Da wir hier den Effekt der parallelen Ausführung sehen wollen, warten wir in der Testmethode mit time.sleep () 1 Sekunde.

$ cat test_s1.py
import unittest
import time
class Test(unittest.TestCase):
    def test_method(self):
        time.sleep(1)
        self.assertTrue(True)
$ cat test_f1.py
import unittest
import time
class Test(unittest.TestCase):
    def test_method(self):
        time.sleep(1)
        self.assertFalse("Hyaha")
$ ls
test_f1.py  test_s1.py
$ cp test_s{1,2}.py
$ cp test_s{1,3}.py
$ ls
test_f1.py  test_s1.py  test_s2.py test_s3.py

Verwenden Sie einen Standard-Testläufer

Es dauert 4 Sekunden, da es nacheinander ausgeführt wird

$ python -m unittest
F...
======================================================================
FAIL: test_method (test_f1.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/yoichi/prog/python-study/nose/test_f1.py", line 6, in test_method
    self.assertFalse("Hyaha")
AssertionError: 'Hyaha' is not false

----------------------------------------------------------------------
Ran 4 tests in 4.024s

FAILED (failures=1)

Keine Setests-Option

$ nosetests
F...
======================================================================
FAIL: test_method (test_f1.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/yoichi/prog/python-study/nose/test_f1.py", line 6, in test_method
    self.assertFalse("Hyaha")
AssertionError: 'Hyaha' is not false

----------------------------------------------------------------------
Ran 4 tests in 4.066s

FAILED (failures=1)

Unter https://nose.readthedocs.io/en/latest/plugins/multiprocess.html ist die Standardeinstellung keine parallele Ausführung, daher wie erwartet.

--processes=NUM
  Spread test run among this many processes. Set a number equal to the number
  of processors or cores in your machine for best results. Pass a negative
  number to have the number of processes automatically set to the number of
  cores. Passing 0 means to disable parallel testing. Default is 0 unless
  NOSE_PROCESSES is set. 

Parallele Ausführung mit Nosetests

Wenn es 2 parallel ist, endet es in 2 Sekunden

$ nosetests --processes=2
F...
======================================================================
FAIL: test_method (test_f1.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/yoichi/prog/python-study/nose/test_f1.py", line 6, in test_method
    self.assertFalse("Hyaha")
AssertionError: 'Hyaha' is not false

----------------------------------------------------------------------
Ran 4 tests in 2.090s

FAILED (failures=1)

4 parallele Abschlüsse in 1 Sekunde

$ nosetests --processes=4
F...
======================================================================
FAIL: test_method (test_f1.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/yoichi/prog/python-study/nose/test_f1.py", line 6, in test_method
    self.assertFalse("Hyaha")
AssertionError: 'Hyaha' is not false

----------------------------------------------------------------------
Ran 4 tests in 1.128s

FAILED (failures=1)

Durch Erhöhen der Anzahl der Parallelen werden die Ressourcen erhöht, die gleichzeitig verwendet werden können. Legen Sie daher einen geeigneten Wert entsprechend der Ausführungsumgebung fest.

Einheit der parallelen Ausführung

Mehrere Testfälle

Selbst wenn eine Datei mehrere TestCase-Klassen enthält, werden sie parallel ausgeführt.

$ cat test_s1.py
import unittest
import time
class Test1(unittest.TestCase):
    def test_method1(self):
        time.sleep(1)
        self.assertTrue(True)
class Test2(unittest.TestCase):
    def test_method1(self):
        time.sleep(1)
        self.assertTrue(True)
$ ls
test_s1.py
$ nosetests --processes=2
..
----------------------------------------------------------------------
Ran 2 tests in 1.073s

OK

Mehrere Testmethoden

Wird nicht methodweise parallel ausgeführt

$ cat test_s1.py
import unittest
import time
class Test1(unittest.TestCase):
    def test_method1(self):
        time.sleep(1)
        self.assertTrue(True)
    def test_method2(self):
        time.sleep(1)
        self.assertTrue(True)
$ ls
test_s1.py
$ nosetests --processes=2
..
----------------------------------------------------------------------
Ran 2 tests in 2.073s

OK

Recommended Posts

Führen Sie Python unittest parallel aus
Führen Sie unittest in Python aus (für Anfänger)
Paralleler Download mit Python
Führen Sie automatisierte Jobs in Python aus
Führen Sie Shell-Befehle in Python aus
Lassen Sie uns "Python -m Antigravitation" in Python ausführen
Führen Sie den Shell-Befehl / Python in R aus
Lesen Sie Dateien parallel zu Python
Führen Sie einen einfachen Algorithmus in Python aus
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
Führen Sie AzureKinect an Heiligabend in Python aus.
DCI in Python
Quicksort in Python
nCr in Python
Führen Sie den Python-Interpreter im Skript aus
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Stellen Sie sicher, dass in Python regelmäßig Cron-ähnliche Jobs ausgeführt werden
Parallele Taskausführung mit concurrent.futures in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Führen Sie die Google Analytics-API (Core v3) in Python aus
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Bis das Changefinder-Sample auf Python läuft
So führen Sie LeapMotion mit Nicht-Apple Python aus