Exécutez tous les tests unitaires dans un répertoire

Si vous écrivez un test unitaire à l'aide du module unittest de Python dans plusieurs fichiers et que vous souhaitez tous les exécuter, vous pouvez utiliser TestLoader.discovery ().

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

Le modèle par défaut consiste à rechercher les fichiers commençant par test et se terminant par .py sous le répertoire spécifié par start_dir.

Étant donné un répertoire comme argument du script suivant, il exécutera tous les tests qu'il trouve.

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

Par exemple

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

On suppose que la structure du répertoire est. La raison pour laquelle __init __. Py est placé est de le chercher également dans le sous-répertoire. Lorsque j'exécute le script, cela ressemble à ceci:

% ./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)

Si vous comptez sur unittest.main, vous pouvez faire de même avec un script shell comme celui-ci:

runner.sh


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

Recommended Posts

Exécutez tous les tests unitaires dans un répertoire
Supprimer tous les fichiers pyc dans le répertoire spécifié
Décompressez tous les fichiers zip dans le répertoire actuel
Déposez tous les fichiers CSV sous n'importe quel répertoire dans DataFrame
Mac Linux Vérifiez la capacité directement dans un répertoire spécifique
Exécuter Python unittest en parallèle
Accès aux fichiers sous le répertoire
[Linux] Répertoire sous la racine
Créer un répertoire avec python