如何在pytest-bdd中实现软断言?使用时遇文件找不到错误
解决pytest-bdd结合--soft-asserts时的FileNotFoundError问题
问题根源
启用--soft-asserts参数后,pytest-soft-asserts插件会修改pytest的内部上下文,导致pytest.FEATURE_FILE(__file__)中的__file__变量指向了虚拟环境site-packages下的插件文件,而非你的项目测试脚本,因此会去错误路径寻找feature文件,触发找不到文件的错误。
解决方案
1. 替换pytest.FEATURE_FILE为显式路径
直接通过相对或绝对路径指定feature文件,避免依赖可能被插件篡改的上下文:
import os from pytest_bdd import scenarios # 假设feature文件和当前测试脚本在同一目录 feature_file = os.path.join(os.path.dirname(__file__), "你的feature文件名.feature") scenarios(feature_file)
如果feature文件在其他目录,直接写相对路径(比如../features/your_feature.feature)或者拼接绝对路径即可。
2. 检查插件版本兼容性
部分版本的pytest-bdd和pytest-soft-asserts存在路径解析冲突,尝试升级到稳定兼容版本:
- 升级pytest-bdd:
pip install --upgrade pytest-bdd - 升级pytest-soft-asserts:
pip install --upgrade pytest-soft-asserts
如果升级后问题仍存在,可以尝试降级到已知兼容的版本组合(比如pytest-bdd6.1.1 + pytest-soft-asserts0.7.0,可根据实际测试调整)。
3. 验证路径正确性
在测试脚本开头添加路径打印,确认__file__的值是否符合预期:
import os print(f"当前脚本路径: {__file__}") print(f"当前脚本目录: {os.path.dirname(__file__)}")
运行时加--soft-asserts参数,查看输出的路径是否指向你的项目文件,而非site-packages下的插件文件,以此确认问题根源。
内容的提问来源于stack exchange,提问作者S_G
相关产品推荐
相关产品推荐

