requests_mock的Mocker中url参数可否用通配符?搭配pytest如何实现url模式匹配
结论
requests-mock默认不支持直接在URL字符串中加*作为通配符的匹配方式,你写的带*的URL只会匹配路径中实际包含*字符的请求,无法命中你真实调用的接口地址。
替代方案
除了使用requests.ANY匹配所有请求外,还有两种更精准的匹配方案可以实现你要的通配符效果:
- 前缀匹配
在注册mock规则时添加prefix=True参数,所有以你填写的URL为前缀的请求都会命中规则,示例:
with requests_mock.Mocker() as m: m.get( "http://api.openweathermap.org/geo/1.0/direct/", exc=request_exceptions.Timeout, prefix=True ) # 后续测试逻辑不变
- 正则匹配
如果需要更复杂的匹配规则,可以直接传入正则表达式作为URL参数,示例:
import re with requests_mock.Mocker() as m: m.get( re.compile(r"^http://api.openweathermap.org/geo/1\.0/direct/.*"), exc=request_exceptions.Timeout, ) # 后续测试逻辑不变
两种方案都可以替代你想要的*通配符效果,同时比requests.ANY的匹配范围更可控,避免误匹配其他不相关的请求。
内容的提问来源于stack exchange,提问作者anon_dcs3spp
相关产品推荐
相关产品推荐

