如何解决如何在运行 pytest 测试之前安装 python 插件?
在使用 pytest 开始测试之前,我需要安装一个 python 插件,它是一个简单的 python 文件。我在 setup.py 中使用了 entry_points。我的问题有点复杂,让我们通过一个例子来解决这个问题,我们稍后再回到这个问题。
Core 提供了添加名为“my.plugin”的插件的功能。
核心封装逻辑
from importlib_Metadata import entry_points
def plugin_method(some_data):
plugins = entry_points()['my.plugin']
loaded_plugins = []
for p in plugins:
loaded_plugins.apend(p.load())
#Does some processing on the data and decides which method to call from plugin
#call plugin method
return result
我的包逻辑
setup.py
setup(
...
entry_points={'my.plugin': 'plugin1= plugin1.logic'}
...
)
logic.py
def method1(method_data):
print('method1 called')
return 1
def method2(method_data):
print('method1 called')
return 2
main.py
def method_uses_plugin()
# create data
plugin_method(data)
插件运行良好。 :)
问题
我为 method_uses_plugin 方法编写了一个测试用例。如果我在我的机器上安装了 pypackage,它工作正常,但如果没有完成安装(在 jenkins 管道中 ?)
我们通常不安装包来运行测试用例,因为测试用例应该直接使用源代码。
我们可能需要对 pytest 做一些事情来在 entry_points 中注册插件。我尝试了很多链接,但没有任何效果。
我的用例有点复杂,但可以找到类似的问题 here
解决方法
如果所有其他方法都失败了,您可以尝试将代码转换为可执行文件,并使用批处理命令为所需数量的软件包运行 pip install,然后运行您的程序。我相信在 Jenkins 中您可以以管理员身份运行批处理文件。
Invoke pip install from batch file
Run Batch file as an administrator in Jenkins
,有两个用例可以在实际源代码上运行测试。
在您的本地机器中
如果您想在工作时测试源代码,只需使用以下命令以可编辑模式安装包:
pip install -e .
来自手册页的 -e 文档:
-e,--editable <path/url>
Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
这会将包链接到代码的 .
位置,这意味着对源代码所做的任何更改都将反映在包中。
在持续集成 (CI) 中
由于您的 CI 在 docker 容器上运行,您只需复制其中的源代码,使用 pip install .
安装它,最后运行 pytest
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。