运行 第 3 方应用程序的自定义解释器中的所有 pytest 测试
Running all pytest tests inside a 3rd party application's custom interpreter
TL;DR: 如何获得 pytest 插件以将 运行ning 测试重定向到生成的进程(在不同的 environment/python 解释器中)?
我正在开发一个 python 脚本,该脚本由嵌入第三方应用程序(即 IDA)的 python 解释器 运行 编写。我现在正在使用 pytest
为我的脚本创建测试,使用我为应用程序编写的 pytest
插件。因为应用程序使某些模块只能在它自己的解释器中使用,所以任何测试都必须 运行 在应用程序内部的 python 解释器中进行。
我想改进我的 pytest
插件,允许它在第三方应用程序而不是普通解释器中执行 pytest
会话。
我知道如何在应用程序内部导致我的测试和 pytest
到 运行,这将与此类似:
subprocess.call("C:\Program Files\IDA\idaq.exe" -S <My script>", shell=True)
我正在纠结于何处(我假设是 pytest
挂钩,但是哪一个?)我应该在其中生成 pytest
会话吗?我怎样才能确保测试参数传递给新进程?
我认为这可以作为 pytest 插件,因为它有点类似于 xdist
插件。
我不会回答得太深入,除非有人过来表示有兴趣,因为它会有点长
我已经设法通过类似于 pytest-xdist 的分布式执行方式的方法来做到这一点,而不是使用 execnet
to execute python interpreters remotely, I'm using subprocess.Popen
to spawn an instance of the third party application (pointing to a python script for it to execute). I'm using multiprocessing.Listener
and multiprocessing.Client
创建一个可以序列化(基本)的通信通道 python 对象。
然后,我像 xdist 一样,创建了一个额外的 pytest 插件,该插件由应用程序加载的脚本register
编辑。那个 pytest 插件使用 pytest's available hooking facilities 注册了一些钩子,然后将它们传回原始的 pytest 实例,这将再次触发它们以模拟它们被 pytest 本身触发。
对于我认为比 pytest-xdist 更容易理解的示例感兴趣的任何人,可以在我的 github repo.
上找到相关代码
TL;DR: 如何获得 pytest 插件以将 运行ning 测试重定向到生成的进程(在不同的 environment/python 解释器中)?
我正在开发一个 python 脚本,该脚本由嵌入第三方应用程序(即 IDA)的 python 解释器 运行 编写。我现在正在使用 pytest
为我的脚本创建测试,使用我为应用程序编写的 pytest
插件。因为应用程序使某些模块只能在它自己的解释器中使用,所以任何测试都必须 运行 在应用程序内部的 python 解释器中进行。
我想改进我的 pytest
插件,允许它在第三方应用程序而不是普通解释器中执行 pytest
会话。
我知道如何在应用程序内部导致我的测试和 pytest
到 运行,这将与此类似:
subprocess.call("C:\Program Files\IDA\idaq.exe" -S <My script>", shell=True)
我正在纠结于何处(我假设是 pytest
挂钩,但是哪一个?)我应该在其中生成 pytest
会话吗?我怎样才能确保测试参数传递给新进程?
我认为这可以作为 pytest 插件,因为它有点类似于 xdist
插件。
我不会回答得太深入,除非有人过来表示有兴趣,因为它会有点长
我已经设法通过类似于 pytest-xdist 的分布式执行方式的方法来做到这一点,而不是使用 execnet
to execute python interpreters remotely, I'm using subprocess.Popen
to spawn an instance of the third party application (pointing to a python script for it to execute). I'm using multiprocessing.Listener
and multiprocessing.Client
创建一个可以序列化(基本)的通信通道 python 对象。
然后,我像 xdist 一样,创建了一个额外的 pytest 插件,该插件由应用程序加载的脚本register
编辑。那个 pytest 插件使用 pytest's available hooking facilities 注册了一些钩子,然后将它们传回原始的 pytest 实例,这将再次触发它们以模拟它们被 pytest 本身触发。
对于我认为比 pytest-xdist 更容易理解的示例感兴趣的任何人,可以在我的 github repo.
上找到相关代码