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