使用Multiprocess时在装载程序上获取装载程序

时间:2013-07-05 18:52:14

标签: python plugins loader nose multiprocess

我们有一个鼻子插件,它使用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,由于原始问题,我仍然没有。我真的需要一些在测试加载之前在子进程中运行的钩子,它在范围内同时包含了加载器和插件实例...

0 个答案:

没有答案