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

2024-04-19 18:58:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉Python中的单元测试。我试图模拟一个响应,但是url没有被模拟,返回的错误是模拟没有注册,并且给了我一个使用真实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

Tags: namehttpsinfocomresthosturlpytest
1条回答
网友
1楼 · 发布于 2024-04-19 18:58:03
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

相关问题 更多 >