Подскажите пожалуйста как сделать последовательный запуск тестов в Python / Unittest ?
У меня есть 5 тесткейсов: test1.py, test2.py, test3.py …Каждый модуль содержит класс, наследуемый от TestCase, c одним тестом.
Хочу сделать из них набор, чтобы последовательно запускались. Прочитал про методы TestLoader() и run() в библиотеке unittest, но никак не получается правильно скрипт написать. Пробовал определить функцию suite(), в которой бы компоновался набор из разных модулей, но в лучшем случае только первый тесткейс запускается.
Ну вы хотя бы кодом поделились бы, чтобы посмотреть что там не так.
В общем, попытался написать за вас.
Есть модули test_1.pytest_2.pytest_3.py которые выглядят вот так вот:
import unittest
class TestClass1(unittest.TestCase):
def test_something(self):
pass
Для того чтобы сформировать запуск с определенной последовательностью я сделал еще один файл run.py где необходимо переоределить load_tests protocol, который запускается автоматически TestLoader. Как работает unittest можно посмотреть в документации или же например посмотреть вот этот урок Поиск 🔍 организации или лица - Предоставление сведений из ЕГРЮЛ/ЕГРИП в электронном виде.
from test_1 import TestClass1
from test_2 import TestClass2
from test_3 import TestClass3
import unittest
from unittest import TestSuite
def load_tests(loader, tests, pattern):
suite = TestSuite()
for test_class in (TestClass1, TestClass2, TestClass3):
tests = loader.loadTestsFromTestCase(test_class)
suite.addTests(tests)
return suite
unittest.main(verbosity=2)
Так вот Вы сами определяете себе последовательность загрузки (TestClass1, TestClass2, TestClass3) и потом запускаете тест. Можно пойти еще дальше и не хардкодить такую последовательность, а формировать ее автоматически по определенной логике, чтобы каждый раз не записывать сюда новоразработанные тест классы. Но это уже совсем другая история
На выходе получаем вот такую последовательность
test_something (test_1.TestClass1) ... ok
test_something (test_2.TestClass2) ... ok
test_something (test_3.TestClass3) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
***Repl Closed***
Я думаю подход понятен, и я надеюсь это то что нужно было.
Ещё можно посмотреть подход из proboscis (Proboscis — proboscis 1.0 documentation) там используется depends_on как в TestNG, но опять-таки вопрос - для какого вида тестов, наверное пробоскис больше для функциональных.