python-requests - 为什么 requests-mock 装饰器模式会在 pytest 中抛出“fixture 'm' not found”错误?
问题描述
我正在使用requests库发出 HTTP GET 请求。例如(截断):
requests.get("http://123-fake-api.com")
我已经按照requests-mock 装饰器模式编写了一个测试。
import requests
import requests_mock
@requests_mock.Mocker()
def test(m):
m.get("http://123-fake-api.com", text="Hello!")
response = requests.get("http://123-fake-api.com").text
assert response.text == "Hello!"
当我使用pytest运行测试时,出现以下错误。
E fixture 'm' not found
为什么 requests-mock 装饰器会抛出“fixture 'm' not found”错误?我该如何解决?
解决方案
您收到错误是因为 Python 3 中无法识别 Requests Mock 装饰器(请参阅 GitHub 问题)。要解决该错误,请使用如何在具有模拟装饰器的测试中使用 pytest capsys 中引用的解决方法?.
import requests
import requests_mock
@requests_mock.Mocker(kw="mock")
def test(**kwargs):
kwargs["mock"].get("http://123-fake-api.com", text="Hello!")
response = requests.get("http://123-fake-api.com")
assert response.text == "Hello!"
附加选项
您还可以使用以下替代方法之一。
1.请求模拟的pytest插件
使用 Requests Mock 作为pytest fixture。
import requests
def test_fixture(requests_mock):
requests_mock.get("http://123-fake-api.com", text="Hello!")
response = requests.get("http://123-fake-api.com")
assert response.text == "Hello!"
2.上下文管理器
使用 Requests Mock 作为上下文管理器。
import requests
import requests_mock
def test_context_manager():
with requests_mock.Mocker() as mock_request:
mock_request.get("http://123-fake-api.com", text="Hello!")
response = requests.get("http://123-fake-api.com")
assert response.text == "Hello!"
推荐阅读
- flutter - Fluter 小部件未运行 initState 并将其正确传递给 Widget
- html - 按钮内的 Gif (HTML, CSS)
- c++ - 遍历资源字符串表
- javascript - 如何在当前浏览器中添加对新“可插入流”功能的支持?
- json - 从 API json 中删除 password_digest?
- java - Java 8 ZonedDateTime 格式日期
- pywin32 - 有人知道如何在虚拟环境中使用 pywin32 吗?
- php - PHP dom解析器:只有在另一个元素之后才获取元素计数?
- r - 在同一数据框中总结多个组的更好方法
- python - python strftime不带前导0