مرحبا هبر! أثناء العمل في مكتبة غلاف 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)
عند كل طلب.
هذا كل شئ!
من المثير للاهتمام سماع تقييم المجتمع لفائدة هذه الخدمة.