pyfakefs导致requests测试报错,additional_skip_names配置无效求助
解决pyfakefs与requests的证书文件冲突问题
问题根源是pyfakefs接管了文件系统操作,导致requests依赖的certifi证书文件路径被虚拟文件系统拦截,无法访问真实的证书文件。你之前尝试用additional_skip_names但配置对象错误,应该针对certifi模块或其证书文件路径来配置,而不是requests模块。
以下是两种可行的解决方法:
方法1:跳过certifi模块的文件系统拦截
使用additional_skip_modules参数,让pyfakefs不对certifi模块的文件操作做虚拟处理,这样requests就能正常访问真实的证书文件:
import pytest import certifi @pytest.mark.parametrize("fs", [{"additional_skip_modules": [certifi]}], indirect=True) def test_my_unit_test_using_requests(fs): test_using_requests()
方法2:跳过证书文件路径的虚拟
直接指定certifi证书文件的真实路径,让pyfakefs不对该路径做拦截:
import pytest import certifi @pytest.mark.parametrize("fs", [{"additional_skip_names": [certifi.where()]}], indirect=True) def test_my_unit_test_using_requests(fs): test_using_requests()
全局配置(可选)
如果多个测试都需要这个配置,可以在conftest.py中自定义fs fixture,全局生效:
import pytest import certifi from pyfakefs.fake_filesystem_unittest import Patcher @pytest.fixture def fs(): patcher = Patcher(additional_skip_modules=[certifi]) patcher.setUp() yield patcher.fs patcher.tearDown()
这样所有使用fs fixture的测试都会自动跳过certifi的文件系统拦截,无需每个测试单独配置。
内容的提问来源于stack exchange,提问作者Nicolas Berthier
相关产品推荐
相关产品推荐

