首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest的内置插件盘点30. python_path | 修改sys.path添加模块import路径

本文系《pytest源码剖析》系列内容

30. python_path

插件路径:_pytest.python_path

实现的 hook

调用的 hook

定义的 fixture

插件功能

创建配置文件选项pythonpath,将指定路径添加到sys.path

代码片段

@pytest.hookimpl(tryfirst=True)def pytest_load_initial_conftests(early_config: Config) -> None: # `pythonpath = a b` will set `sys.path` to `[a, b, x, y, z, ...]` for path in reversed(early_config.getini("pythonpath")): sys.path.insert(0, str(path))

@pytest.hookimpl(trylast=True)def pytest_unconfigure(config: Config) -> None: for path in config.getini("pythonpath"): path_str = str(path) if path_str in sys.path: sys.path.remove(path_str)

加载用例前,修改 sys.path

用例执行结束后,还原 sys.path

简评

本插件内容简单,代码量少,内容上没什么好说的

值得思考的问题是:通过插件添加 path 和在测试文件中修改sys.path有何区别

我能想到的有这么几个:

集中管理,避免在多个文件中重复设置

优先级高,甚至高于conftest.py

支持热插拔,通过启动 \ 禁用插件即可控制是否生效

无需 python 文件,这对纯 excel 或纯 yaml 用例的项目友好

...

记得之前在命令行直接执行pytest来启动测试框架的话会有一个问题,

就是当前目录中的模块,无法被测试用例导入,

当前觉得很烦,想出了很多解决办法,比如:

根目录创建 conftest.py

根目录创建用例文件

通过环境变量修改 path

通过代码修改 path

等等...

有了这个插件,只需要配置文件中加一行就搞定了

[pytest]; 支持从当前目录中导入模块pythonpath = ./

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OcX9V_n8HotKsGtgBjA41BQQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券