Python3 тестовый прогон юнит-теста из классов - PullRequest
0 голосов
/ 05 марта 2020

Я хотел бы уточнить следующий вопрос. Жгут тестов должен иметь:

  1. Набор классов или модулей только с тестами, в этих классах нет участников
  2. Один участник, который способен запускать эти классы с тестами, частично или полный набор

Для этих целей я написал следующий код: 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 и не должен думать о способе запуска.

Есть ли способ удалить эту примитивную реализацию?

Заранее спасибо Александр

...