Я запускаю несколько рабочих процессов, использующих многопроцессорную обработку 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