Я хотел бы уточнить следующий вопрос. Жгут тестов должен иметь:
- Набор классов или модулей только с тестами, в этих классах нет участников
- Один участник, который способен запускать эти классы с тестами, частично или полный набор
Для этих целей я написал следующий код: Runner:
import os
import sys
import unittest
import HtmlTestRunner
import command_line_parser
import logging_utils
import logging
import test
def run_test_suite():
test_name = os.path.basename(sys.argv[0])
args = command_line_parser.parser_factory()
logging_utils.init_logging(test_name, args.env_name, args.log_folder)
LOG = logging.getLogger()
sys.argv[1:] = args.unittest_args
loader = unittest.TestLoader()
start_dir = 'path\to\tests'
suite = loader.discover(start_dir, pattern="test_*.py")
LOG.debug("Found : " + str(suite.countTestCases()) + " tests")
runner = HtmlTestRunner.HTMLTestRunner(output=args.report_folder + test_name)
runner.run(suite)
if __name__ == '__main__':
run_test_suite()
пример набора тестов
import logging
import unittest
import login_utils
import page_utils
import webdriver_utils
class test_ui_welcome(unittest.TestCase):
def __init__(self, env_name: str):
self.env_name = env_name
unittest.TestCase.__init__(self)
def setUp(self):
self.driver = webdriver_utils.get_webdriver_instance(self.env_name)
self.LOG = logging.getLogger()
super(test_ui_welcome, self).setUp()
def tearDown(self) -> None:
webdriver_utils.close_all_instance()
def test_login(self):
login_utils.pon_browser_login(self.driver, self.env_name)
page_id = page_utils.get_page_id(self.driver)
self.LOG.debug("id = " + page_id)
assert page_id == "0"
def runTest(self):
super.runTest()
Затем я обнаружил следующее для запуска теста из командной строки класс с набором тестов должен содержать примитивную реализацию метода runTest, такую как
def runTest(self):
super.runTest()
В случае удаления этой примитивной реализации модуль unittest находит один тест и ничего не делает, чтобы избежать этой реализации. метода testRun в тестовых классах. Я хотел бы иметь чистый чистый тестовый код в тестовых классах без бегуна. Автор тестовых классов должен думать о логике теста c и не должен думать о способе запуска.
Есть ли способ удалить эту примитивную реализацию?
Заранее спасибо Александр