任意のステータスコードでサーバー応答を生成するためのAPI

こんにちは、Habr!REST APIラッパーライブラリで作業しているときに、問題が発生しました。誤ったサーバー応答コード(400、500、403など)の処理をテストするには、対応するコードを受信するための条件をサーバー上に人為的に作成する必要があります。たとえば、適切に構成されたサーバーでは、500エラーを取得するのは簡単ではありません。また、エラーハンドラー関数をテストする必要があります。誤ったサーバー応答を生成する小さなAPIを作成しました-httpme.tk



テストに適用する方法は?



たとえば、次のようなコードがあります(python3):



from requests import session as requests_session

session = requests_session()
session.hooks = {
    'response': lambda r, *args, **kwargs: raise AccessError(' , ..     ') if r.status_code == 403  else pass
}

class AccessError(Exception):
    """ ''  """
    pass

def getter(url):
    return session.get(url)


つまり、コードには、指定されたURLに対するGET要求に対するサーバー応答を返す関数が含まれています。要求の結果として403エラーが発生した場合、内部モジュール例外がスローされAccessErrorます。



このコードはテストしてデバッグする必要があります。エラー403の条件を手動で作成するのは簡単ではありません。たとえば、500(サーバーはうまく機能しすぎます)などです。テスターは、サーバーがどのような条件下で403エラーを発行するかを気にしません。たとえば、API自体ではなく、それを呼び出す関数をテストしています。したがって、403ステータスコードで例外をスローすることをテストするには、次のように実行できます(python3 + pytest):



import pytest
from mymodule import 

def test_forbidden():
    with pytest.raises(AccessError):
        getter('http://httpme.tk/403')


使い方?



とてもシンプルです。のサーバーにGETリクエストを送信しますhttp://httpme.tk/<status_code>たとえば、次のようになります(cURL):



curl -G http://httpme.tk/500


またはこのように(python3):



from requests import get

get('http://httpme.tk/408')  # <Response [408]>


中身は?



そして内部には、すべての要求で関数を呼び出す小さなFlaskアプリケーションがありますabort(status_code)



GitHubへのリンク



それで全部です!



このサービスの有用性についてのコミュニティの評価を聞くのは興味深いことです。




All Articles