python - 如何通过多处理模块创建的工作进程在python中组合动态生成的测试套件
问题描述
我正在使用 Python3 的多处理运行一堆工作进程。在每个工作进程中,我正在创建一个动态测试用例(unittest.testcase 的子类)。在该类下,我正在创建一组名为“test_”的动态方法。因此,每个工作进程都会产生一个 test_suite。我想组合来自所有工作进程的测试套件,并使用我的主进程中的运行器实例调用它,以便我可以生成单个单元测试用例 HTML 报告。我试图找出最简单的方法来做到这一点。我尝试使用pickle将每个test_suite转换为字节并将其写入单独的文件甚至使用管理器队列共享文件,但这不起作用,因为它不断给出错误“在反序列化期间无法获取属性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
解决方案
我意识到这是不可能的,因为动态对象(测试方法)在父进程中不再可用,因此取消选择将不起作用,所以我不得不更改我的设计以在从父进程中捕获运行时对象后在父进程中创建测试方法和类从子进程
推荐阅读
- c++ - 避免 C++ 中 XML 解析器的链式 if 语句
- list - 在 Prolog 中改变列表的元素
- python - PysimpleGUI 在窗口中为 gif 设置动画
- c++ - 基类未定义,但包含其标头
- google-cloud-platform - 在 GCP 中将谷歌云功能从一个项目迁移到另一个项目?
- google-sheets - 如何在单个单元格中做一个数字范围?
- vb.net - 如何将文本框内容保存到应用程序本身?
- c# - 从 C# 表单上的用户输入更改文件的路径
- flutter - 在颤动中弹回包含 CarouselSlider 的页面
- c# - 根据具有不同值的最近可用时间从 SQL 中检索项目