Skip to content

# Migrate from requests

## responses

Here's a few examples on how to migrate your code from the `responses` library to `respx`.

### Patching the Client

#### Decorator

    @responses.activate
    def test_foo():
        ...

    @respx.mock
    def test_foo():
        ...

> See Router Settings for more details.

#### Context Manager

    def test_foo():
        with responses.RequestsMock() as rsps:
            ...

    def test_foo():
        with respx.mock() as respx_mock:
            ...

> See Router Settings for more details.

#### unittest setUp

    def setUp(self):
        self.responses = responses.RequestsMock()
        self.responses.start()
        self.addCleanup(self.responses.stop)

    def setUp(self):
        self.respx_mock = respx.mock()
        self.respx_mock.start()
        self.addCleanup(self.respx_mock.stop)

> See unittest examples for more details.

### Mock a Response

    responses.add(
        responses.GET, "https://example.org/",
        json={"foo": "bar"},
        status=200,
    )

    respx.get("https://example.org/").respond(200, json={"foo": "bar"})

> See Routing Requests and Mocking Responses for more details.

### Mock an Exception

    responses.add(
        responses.GET, "https://example.org/",
        body=Exception("..."),
    )

    respx.get("https://example.org/").mock(side_effect=ConnectError)

> See Exception Side Effect for more details.

### Subsequent Responses

    responses.add(responses.GET, "https://example.org/", status=200)
    responses.add(responses.GET, "https://example.org/", status=500)

    respx.get("https://example.org/").mock(
        side_effect=[Response(200), Response(500)]
    )

> See Iterable Side Effect for more details.

### Callbacks

    def my_callback(request):
        headers = {"Content-Type": "application/json"}
        body = {"foo": "bar"}
        return (200, headers, json.dumps(resp_body))

    responses.add_callback(
        responses.GET, "http://example.org/",
        callback=my_callback,
    )

    def my_side_effect(request, route):
        return Response(200, json={"foo": "bar"})

    respx.get("https://example.org/").mock(side_effect=my_side_effect)

> See Mock with a Side Effect for more details.

### History and Assertions

### History

    responses.calls[0].request
    responses.calls[0].response

    respx.calls[0].request
    respx.calls[0].response

    request, response = respx.calls[0]
    respx.calls.last.response

> See Call History for more details.

#### Call Count

    responses.assert_call_count("http://example.org/", 1)

    route = respx.get("https://example.org/")
    assert route.call_count == 1

> See Call History for more details.

#### All Called

    with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps:
        ...

    with respx.mock(assert_all_called=False) as respx_mock:
        ...

> See Assert all Called for more details.

### Modify Mocked Response

    responses.add(responses.GET, "http://example.org/", json={"data": 1})
    responses.replace(responses.GET, "http://example.org/", json={"data": 2})

    respx.get("https://example.org/").respond(json={"data": 1})
    respx.get("https://example.org/").respond(json={"data": 2})

### Pass Through Requests

    responses.add_passthru("https://example.org/")

    respx.route(url="https://example.org/").pass_through()

> See Pass Through for more details.

## requests-mock

todo ... contribution welcome ;-)