Как я выполняю все модульные тесты Python в каталоге?

В настоящее время это не документировано и невозможно выполнить аутентификацию AAD на LocalDB.

267
задан Tonechas 4 January 2017 в 14:40
поделиться

3 ответа

Вы можете использовать программу запуска тестов, которая сделает это за вас. нос очень хорош, например. При запуске он находит тесты в текущем дереве и запускает их.

Обновлено:

Вот код из моих дней до появления носа. Вероятно, вам не нужен явный список имен модулей, но, возможно, остальные будут вам полезны.

testmodules = [
    'cogapp.test_makefiles',
    'cogapp.test_whiteutils',
    'cogapp.test_cogapp',
    ]

suite = unittest.TestSuite()

for t in testmodules:
    try:
        # If the module defines a suite() function, call it to get the suite.
        mod = __import__(t, globals(), locals(), ['suite'])
        suitefn = getattr(mod, 'suite')
        suite.addTest(suitefn())
    except (ImportError, AttributeError):
        # else, just load all the test cases from the module.
        suite.addTest(unittest.defaultTestLoader.loadTestsFromName(t))

unittest.TextTestRunner().run(suite)
103
ответ дан 23 November 2019 в 02:22
поделиться

Это - старый вопрос, но что работало на меня, теперь (в 2019):

python -m unittest *_test.py

Все мои тестовые файлы находятся в той же папке как исходные файлы, и они заканчивают _test.

1
ответ дан 23 November 2019 в 02:22
поделиться

Хорошо, немного изучив приведенный выше код (в частности, используя TextTestRunner и defaultTestLoader ), я смог подойти довольно близко. В конце концов я исправил свой код, просто передав все наборы тестов в один конструктор наборов, вместо того, чтобы добавлять их «вручную», что устранило другие мои проблемы. Итак, вот мое решение.

import glob
import unittest

test_files = glob.glob('test_*.py')
module_strings = [test_file[0:len(test_file)-3] for test_file in test_files]
suites = [unittest.defaultTestLoader.loadTestsFromName(test_file) for test_file in module_strings]
test_suite = unittest.TestSuite(suites)
test_runner = unittest.TextTestRunner().run(test_suite)

Да, наверное, проще просто использовать нос, чем делать это, но не в этом суть.

30
ответ дан 23 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: