Skip to content

Record/Replay feature returns incorrect HTTP status code #441

@mhaas

Description

@mhaas

I am not sure if this feature is already released since #10 is still open. However, "record and playback" is present in the main README, so I gave it a shot.

It seems that HTTP status codes are not replayed correctly:

def test_record_replay_2():
    record_file = "/tmp/http_2.json"

    if os.path.exists(record_file):
        context_manager = httpretty.HTTPretty.playback(record_file, allow_net_connect=False,
                                      verbose=True)
    else:
        context_manager = httpretty.HTTPretty.record(record_file, allow_net_connect=True, verbose=True)

    with context_manager:
        response = requests.get("https://httpstat.us/500")
    assert response.status_code == 500

On the second time the test is run, the "playback" feature will be used, but the assertion will fail:

        with context_manager:
            response = requests.get("https://httpstat.us/500")
>       assert response.status_code == 500
E       assert 200 == 500

More interestingly, this issue does not happen when the test is executed as follows:

def test_record_replay():
    record_file = "/tmp/http.json"

    def request_and_test():
        response = requests.get("https://httpstat.us/500")
        assert response.status_code == 500

    with httpretty.HTTPretty.record(record_file, allow_net_connect=True, verbose=True):
        request_and_test()

    with httpretty.HTTPretty.playback(record_file, allow_net_connect=False,
                                      verbose=True):
        request_and_test()

Is this an operator error here or is there a real bug here? I do not see the issue with my code, but that does not mean it is not there.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions