API لتوليد استجابات الخادم مع أي رموز حالة

مرحبا هبر! أثناء العمل في مكتبة غلاف REST API ، واجهت مشكلة. لاختبار معالجة رموز استجابة الخادم الخاطئة (400 ، 500 ، 403 ، إلخ) ، من الضروري إنشاء ظروف بشكل مصطنع على الخادم لتلقي الرموز المقابلة. مع خادم تم تكوينه بشكل صحيح ، على سبيل المثال ، ليس من السهل الحصول على خطأ 500. ومن الضروري بطريقة ما اختبار وظائف معالج الأخطاء. لقد كتبت واجهة برمجة تطبيقات صغيرة تنشئ استجابات خاطئة للخادم - 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)


باختصار ، تحتوي الشفرة على وظيفة تقوم بإرجاع استجابة الخادم لطلب GET لعنوان URL محدد ؛ إذا حدث خطأ 403 نتيجة للطلب ، فسيظهر استثناء وحدة داخلية AccessError.



يجب اختبار هذا الرمز وتصحيحه. من الصعب جدًا إنشاء الشروط يدويًا للخطأ 403 ، بل وأكثر من ذلك ، على سبيل المثال ، 500 (يعمل الخادم جيدًا). لا يهتم المُختبِر في ظل الظروف التي سيُصدر فيها الخادم خطأ 403: فهو لا يختبر واجهة برمجة التطبيقات نفسها (على سبيل المثال) ، بل الوظيفة التي تستدعيها. لذلك ، لاختبار طرح استثناء برمز الحالة 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)عند كل طلب.



رابط إلى جيثب



هذا كل شئ!



من المثير للاهتمام سماع تقييم المجتمع لفائدة هذه الخدمة.




All Articles