如何用Pytest参数化和响应来模拟url



我是Python单元测试的新手。我试图模拟一个响应,但该url没有被模拟返回错误,即模拟没有注册,并提示我使用真实的url,使用真实的网址,但它需要以某种方式被模拟。尝试了pytest参数化,但没有成功。

这就是我迄今为止所尝试的:

FAKE_HOST = "https://fake-host.com"
@pytest.mark.parametrize(
("fake_url"),
[(FAKE_HOST, "https://fake-host.com")],
)
@responses.activate
def test_item(fake_url):
responses.add(
responses.GET,
f"{fake_url}/rest/info?name=item",
status=200,
)
resp = requests.get(
"https://{fake_url}/rest/info?name=item"
)
assert resp.status_code == 200
import requests

def example2():
r = requests.get("http://httpbin.org/" + "get")
if r.status_code == 200:
response_data = r.json()
return r.status_code, response_data["url"]
else:
return r.status_code, ""

def test_get_response_success(monkeypatch):
class MockResponse(object):
def __init__(self):
self.status_code = 200
self.url = "http://httpbin.org/get"
self.headers = {"foobar": "foooooo"}
def json(self):
return {"fooaccount": "foo123", "url": "https://fake-host.com"}
def mock_get(url):
return MockResponse()
monkeypatch.setattr(requests, "get", mock_get)
assert example2() == (200, "https://fake-host.com")

你考虑过使用monkepyatching吗?

最新更新