2017-12-08 15 views
0

requestsをAPI呼び出しに使用する私のライブラリのユニットテストを容易にするために、requests-mockとpytestを使用しています。requests_mockを使用してHTTPリクエストの本体をアサートします

サーバーの応答を模擬するだけでなく、私のライブラリがHTTP本体に予想されるペイロードを送信することを確認する必要があることがよくあります。

私は私のテストでadditional_matcherコールバック使用して、間接的とはいえ、これを実行することができました:

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' 

をしかし、それはそれとして、要求の形式を確認するためにadditional_matcherコールバックを使用していると少し変な感じこの特定の要求呼び出しをまったく嘲笑すべきかどうかを判断することを本当に意図しています。

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

一般的にHTTPリクエストの検証をサポートするために要求-モックで使用パターンがあります:私は要求-モックを使用していなかった、私がより多くのようなものをやっているだろうと思われますか?

答えて

1

要求が呼び出されたり引数がありますが、私がやったことは、あなた

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'} 
のために、より許容できるかもしれないものをされている場合、私はまた、検証に任意のパターンを発見していません
関連する問題