我们有一个鼻子插件,它使用loadTestsFromTestClass
从成员方法动态生成测试用例。不幸的是,当您尝试使用多进程插件运行测试时,我们的插件会分崩离析,因为多进程插件使用loadTestsFromNames
加载子进程中的所有测试,从而完全绕过在父进程中运行的所有动态生成要运行的名称。我一直在努力解决这个问题,但遇到了问题。
我们使用prepareTestLoader
钩子将加载器存储到插件的每个实例,我想在loadTestsFromName
中使用加载器(这个基本模式用于内置isolate
插件也是如此)。问题是prepareTestLoader
挂钩似乎只是从core.TestProgram.parseArgs
触发,而工作进程甚至根本不创建TestProgram
,所以当工人点击loadTestsFromName
时} hook,它们引发AttributeError
,因为prepareTestLoader
从未被调用过,因此加载器从未被添加到插件实例中。
我确实有测试名称,而后者又有模块路径,所以我可以尝试使用nose.importer.Importer
来抓取模块,然后从那里进行动态加载,但我宁愿保持更高如果可能,在nose
内的级别。有没有人有任何想法或经验,没有直接修改nose
直接从prepareTestLoader
内部nose.plugins.multiprocess.__runner
挂钩?
修改
当我有一个模块并且可以在其上找到与测试名称的第一部分匹配的属性时,我通过从loadTestsFromTestClass
调用loadTestsFromName
来破解动态加载测试的变通方法,但我不能真的测试它,因为loadTestsFromTestClass
依赖于loader.makeTest
,由于原始问题,我仍然没有。我真的需要一些在测试加载之前在子进程中运行的钩子,它在范围内同时包含了加载器和插件实例...