2017-12-08 3 views
0

Ich verwende requests-mock mit pytest, um Unit-Tests meiner Bibliothek zu erleichtern, die requests für API-Aufrufe verwendet.Assert Körper von HTTP-Anfragen mit requests_mock

Zusätzlich zu den Serverantworten muss ich oft überprüfen, ob meine Bibliothek die erwarteten Nutzdaten im HTTP-Body sendet.

ich in der Lage gewesen, dies zu tun, wenn auch indirekt, einen additional_matcher Rückruf in meinen Tests mit:

def mylibrary_foo(): 
    """Library method that is under test.""" 
    r = requests.post('http://example.com/foo', data='hellxo') 
    return r.text 

@requests_mock.Mocker() 
def test_foo(m): 
    def matcher(request): 
     assert request.body == 'hello' 
     return True 

    m.post('http://example.com/foo', text='bar', additional_matcher=matcher) 

    result = mylibrary_foo() 
    assert result == 'bar' 

Aber es fühlt sich ein wenig komisch den additional_matcher Rückruf wird mit Hilfe das Anforderungsformat, um zu überprüfen, wie es Es ist wirklich beabsichtigt zu bestimmen, ob dieser bestimmte Anforderungsaufruf überhaupt verspottet werden sollte oder nicht. Wäre ich nicht requests-Mock verwenden, so scheint es, würde ich etwas mehr wie tun:

def test_foo(): 
    # setup api_mock here... 
    mylibrary_foo() 
    api_mock.assert_called_with(data='hello') 

Gibt es ein Muster häufig mit Anfragen-mock verwendet HTTP-Request Überprüfung zu unterstützen?

Antwort

1

Ich habe auch keine Muster bei der Überprüfung, ob eine Anforderung genannt gefunden wird, noch was die Argumente sind, aber was ich tat, könnte für Sie

def test_foo(m): 
    ... 
    adapter = m.post('http://example.com/foo', text='bar') 
    result = mylibrary_foo() 

    # for `called` or `call_count` 
    assert adapter.call_count == 1 
    assert adapter.called 

    # for more in-depth checking of params/body, you can access `.last_request` and `.request_history` of `adapter` 
    assert adapter.last_request.json() == {'foo': 'bar'} 
    assert adapter.request_history[-1].json() == {'foo': 'bar'} 
mehr akzeptabel sein