TL; DR:如何获得pytest插件将正在运行的测试重定向到生成的进程(在不同的环境/ python解释器中)?
我正在开发一个python脚本,它由嵌入在第三方应用程序中的python解释器运行(即IDA)。我现在正在使用pytest
使用我为应用程序编写的pytest
插件为我的脚本创建测试。因为应用程序只在它自己的解释器中提供某些模块,所以任何测试都必须在应用程序内部的python解释器中运行。
我希望通过允许它在第三方应用程序内执行pytest
会话来改进我的pytest
插件,而不是在一个普通的解释器中。
我知道如何使我的测试和pytest
在应用程序内运行,这将类似于:
subprocess.call("C:\Program Files\IDA\idaq.exe" -S <My script>", shell=True)
我在哪里挣扎(我假设pytest
钩子,但是哪一个?)我应该在里面产生pytest
会话?如何确保将测试参数传递给新进程?
我认为这可以作为pytest插件使用,因为它有点类似于xdist
插件。
答案 0 :(得分:1)
除非有人走近并表现出兴趣,否则我不会太深入地回答这个问题,因为那会很长
我设法通过类似于pytest-xdist的分布式执行方式来做到这一点,而不是使用subprocess.Popen
来生成,而不是使用execnet
来远程执行python解释器。第三方应用程序的实例(指向要执行的python脚本)。我正在使用multiprocessing.Listener
and multiprocessing.Client
创建一个可以对python对象进行序列化的通信通道。
然后,我像xdist一样,创建了一个附加的pytest插件,该插件由应用程序加载的脚本register
进行了封装。那个pytest插件使用pytest's available hooking facilities注册了少数钩子,然后将其传递回原始pytest实例,这将再次触发它们,以模拟它们被pytest本身触发。
对于任何对我相信比pytest-xdist更易于理解的示例感兴趣的人,相关代码可以在我的github repo上找到。