[PYTHON] Führen Sie alle Unittests unter einem Verzeichnis aus

Wenn Sie einen Komponententest mit Pythons unittest-Modul in mehreren Dateien schreiben und alle ausführen möchten, können Sie TestLoader.discovery () verwenden.

discover(self, start_dir, pattern='test*.py', top_level_dir=None)

Das Standardmuster besteht darin, Dateien, die mit test beginnen und mit .py enden, in dem von start_dir angegebenen Verzeichnis zu finden.

Wenn ein Verzeichnis als Argument für das folgende Skript angegeben wird, werden alle gefundenen Tests ausgeführt.

runner.py


#!/usr/bin/env python
import sys
from unittest import TestLoader
from unittest import TextTestRunner


def main(path):
    loader = TestLoader()
    test = loader.discover(path)
    runner = TextTestRunner()
    runner.run(test)


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('usage: %s path' % sys.argv[0])
        sys.exit(1)
    main(sys.argv[1])

Zum Beispiel

% find tests -type f -name \*.py
tests/hoge/__init__.py
tests/hoge/test_hoge.py
tests/test_fuga.py

Es wird angenommen, dass die Verzeichnisstruktur ist. Der Grund, warum "__init __. Py" platziert wird, besteht darin, dass es auch im Unterverzeichnis durchsucht wird. Wenn ich das Skript ausführe, sieht es folgendermaßen aus:

% ./runner.py tests
FF
======================================================================
FAIL: test_1 (hoge.test_hoge.TestHoge)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/python-study/unittest/tests/hoge/test_hoge.py", line 6, in test_1
    self.assertEqual(0, 1)
AssertionError: 0 != 1

======================================================================
FAIL: test_1 (test_fuga.TestFuga)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/python-study/unittest/tests/test_fuga.py", line 6, in test_1
    self.assertEqual(0, 1)
AssertionError: 0 != 1

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=2)

Wenn Sie sich auf unittest.main verlassen, können Sie dasselbe mit einem Shell-Skript wie dem folgenden tun:

runner.sh


#!/bin/sh
python -m unittest discover $1

Recommended Posts

Führen Sie alle Unittests unter einem Verzeichnis aus
Löschen Sie alle pyc-Dateien im angegebenen Verzeichnis
Entpacken Sie alle Zip-Dateien im aktuellen Verzeichnis
Legen Sie alle CSV-Dateien in einem beliebigen Verzeichnis in DataFrame ab
Mac Linux Überprüfen Sie die Kapazität direkt in einem bestimmten Verzeichnis
Führen Sie Python unittest parallel aus
Dateizugriff unter dem Verzeichnis
[Linux] Verzeichnis unter dem Stammverzeichnis
Erstellen Sie ein Verzeichnis mit Python