Ваша проблема в том, что вы передаете бегуну вместо тестового класса модуль тестирования.Если вы посмотрите документацию unittest
для loadTestsFromTestCase
, вы увидите, что ее аргумент должен быть TestCase
-производным классом.
Я сократил ваш пример доминимальная версия, чтобы немного упростить мой ответ:
In tests.py
:
import unittest
class MyTestCase(unittest.TestCase):
def test_something(self):
assert True
runner.py
, основанный на вашем:
from unittest import TestLoader, TestSuite, TextTestRunner
import tests
example_tests = TestLoader().loadTestsFromTestCase(tests)
suite = TestSuite(example_tests)
runner = TextTestRunner()
runner.run(suite)
Это дастследующий вывод:
$ python runner.py
Traceback (most recent call last):
File "runner.py", line 4, in <module>
example_tests = TestLoader().loadTestsFromTestCase(tests)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 85, in loadTestsFromTestCase
if issubclass(testCaseClass, suite.TestSuite):
TypeError: issubclass() arg 1 must be a class
Если я переключу runner.py
на использование класса вместо этого, он будет работать:
from unittest import TestLoader, TestSuite, TextTestRunner
from tests import MyTestCase
example_tests = TestLoader().loadTestsFromTestCase(MyTestCase)
suite = TestSuite(example_tests)
runner = TextTestRunner()
runner.run(suite)
Вывод:
$ python runner.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Вы должны бытьвозможность адаптировать это к вашему коду.При этом интеграция pytest может не работать с HtmlTestRunner, который основан на unittest.Обязательно посмотрите pytest-html