Как объединить динамически сгенерированный набор тестов в python с помощью рабочих процессов, созданных многопроцессорным модулем - PullRequest
0 голосов
/ 14 октября 2019

Я запускаю несколько рабочих процессов, использующих многопроцессорную обработку Python3. В каждом рабочем процессе я создаю динамический контрольный пример (подкласс unittest.testcase). Под классом я создаю набор динамических методов с именем «test_». Следовательно, каждый рабочий процесс приводит к test_suite. Я хочу объединить набор тестов из всех рабочих процессов и вызывать его с помощью экземпляра runner из моего основного приложения, чтобы я мог сгенерировать отдельный HTML-отчет о тестовом блоке. Я пытаюсь найти самый простой способ сделать это. Я пытался использовать pickle, чтобы преобразовать каждый test_suite в байт и записать его в отдельный файл или даже в общий файл, используя менеджер queque, но это не сработало, потому что оно продолжало выдавать ошибку "не могу получить атрибут XXXXX во время десериализации. Я думаю,потому что эти динамически сгенерированные классы больше не были доступны в родительском процессе. Спасибо за любые предложения

Вот класс контейнера и рабочая функция, которая генерирует динамический класс и методы.

class TestsContainer(unittest.TestCase):
    longMessage = True

def flow_driver(flow_obj, session=None):
    test_suite = unittest.TestSuite()
    test = ""
    klassname = 'Test_{0}'.format(str.upper(flow_obj[0]))
    d= {}
    for service in flow_obj[1]:
            result= some_function()
            d['test_service_{0}'.format(service)] = make_test_function(service, result)

    globals()[klassname] = type(klassname, (TestsContainer,), d)
    test = unittest.makeSuite(globals()[klassname])
    test_suite.addTest(test)
    return test_suite

def make_test_function(description, result):
    def test(self):
        #do something
    return test



1 Ответ

0 голосов
/ 22 октября 2019

Я понял, что это невозможно, потому что динамический объект (методы тестирования) больше не доступен в родительском процессе, поэтому снятие флажка не будет работать, поэтому мне пришлось изменить свой дизайн, чтобы создать методы тестирования и класс в родительском процессе после захвата запускаобъекты времени из дочернего процесса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...