[PYTHON] Exécuter des tests de manière sélective

Chose que tu veux faire

Si vous souhaitez exécuter uniquement un sous-ensemble des tests, par exemple, vous souhaitez ignorer les tests chronophages et les exécuter uniquement si vous le spécifiez. Une méthode consiste à diviser chaque fichier afin qu'il puisse être distingué par le nom de fichier et l'option de découverte du module unittest.

% python -m unittest --help
      ...
  -p pattern       Pattern to match test files ('test*.py' default)

Peut être réalisé en utilisant, mais ici

Un exemple de la façon de traiter de tels cas est présenté.

Comment faire

Utilisez les décorateurs skipIf, skipUnless du module unittest. Par exemple

util.py


import unittest

run_slowtest = False


def slowtest(target):
    return unittest.skipUnless(run_slowtest, "Slow Test")(target)

Définissez une fonction décoratrice comme celle-ci et donnez-la à la classe ou à la méthode:

test_sample.py


import unittest

from util import slowtest


@slowtest
class TestA(unittest.TestCase):
    def test_a(self):
        pass


class TestB(unittest.TestCase):
    @slowtest
    def test_b(self):
        pass

S'il est exécuté normalement, le test cible sera ignoré:

% python -m unittest discover .
ss
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK (skipped=2)

Si vous voulez tout faire, procédez comme suit:

% cat runner_full.py
import unittest

import util

util.run_slowtest = True
unittest.TestProgram(argv=['', 'discover'])
% python runner_full.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Recommended Posts

Exécuter des tests de manière sélective
Exécuter automatiquement des tests lors de l'enregistrement des fichiers
Exécutez le test unitaire au moment où vous enregistrez le fichier