1. ホーム
  2. python

requests ライブラリを使用する Python アプリのユニットテスト

2023-08-13 12:54:32

質問

私は、Kenneth Reitz の リクエストライブラリ を使用して REST 操作を行うアプリケーションを書いていますが、requests はモジュールレベルのメソッドを介してそのメソッドを提供するので、これらのアプリケーションをユニットテストする良い方法を見つけるのに苦労しています。

私が欲しいのは、2つのサイド間の会話を合成する能力です; 一連のリクエストのアサーションとレスポンスを提供します。

どのように解決するのですか?

ユーザーの利便性と使いやすさをターゲットにしながら、ライブラリがエンドユーザーのユニットテストについて空白のページを持つことは、実際には少し奇妙です。しかし、Dropbox による使いやすいライブラリがあり、意外なことにその名も responses . 以下はその イントロポスト . を採用しなかったと書かれています。 httpretty を採用できず、その理由も書かず、似たようなAPIを持つライブラリを書いたと書いてあります。

import unittest

import requests
import responses


class TestCase(unittest.TestCase):

  @responses.activate  
  def testExample(self):
    responses.add(**{
      'method'         : responses.GET,
      'url'            : 'http://example.com/api/123',
      'body'           : '{"error": "reason"}',
      'status'         : 404,
      'content_type'   : 'application/json',
      'adding_headers' : {'X-Foo': 'Bar'}
    })

    response = requests.get('http://example.com/api/123')

    self.assertEqual({'error': 'reason'}, response.json())
    self.assertEqual(404, response.status_code)