الاستهزاء بالطلبات والردود على اختبار بايثون
في اختبار بايثون، يصبح من الضروري الاستهزاء بالوحدات النمطية ووظائفها للتحكم في تدفق التنفيذ والتحقق من سيناريوهات محددة. من بين هذه الأمور، يتم استخدام نموذج الاستهزاء بالطلبات بشكل شائع لاختبار الوظائف أو الأساليب التي تعتمد على طلبات HTTP.فكر في ملف view.py بالكود التالي:def myview(request):
res1 = requests.get('aurl')
res2 = request.get('burl')
res3 = request.get('curl')
للسخرية من هذا السلوك، يمكنك استخدام حزمة Python وهمية. إليك كيفية تحقيق ذلك خطوة بخطوة:
الخطوة 1: تحديد السلوك الوهمي
للسخرية من وحدة الطلبات، حدد وظيفة ستحل محل request.get (). في هذه الوظيفة، يمكنك تحديد الاستجابة المطلوبة لكل عنوان URL.def mocked_requests_get(*args, **kwargs):
class MockResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
self.status_code = status_code
def json(self):
return self.json_data
if args[0] == 'aurl':
return MockResponse({'a': 'a'}, 200)
elif args[0] == 'burl':
return MockResponse({'b': 'b'}, 200)
elif args[0] == 'curl':
return MockResponse({'c': 'c'}, 200)
return MockResponse(None, 404)
الخطوة 2: تصحيح وحدة الطلبات
في حالة الاختبار الخاصة بك، استخدم مصمم mock.patch() لاستبدال الطلبات الفعلية وحدة مع وظيفتك الوهمية.@mock.patch('requests.get', side_effect=mocked_requests_get)
def test_myview(self, mock_get):
# Call the function you want to test
myview(None)
# Assertions for expected responses
...
الخطوة 3: التحقق من التأكيدات
ضمن وظيفة الاختبار الخاصة بك، يمكنك استخدام التأكيدات للتحقق من إرجاع الاستجابات المتوقعة.self.assertEqual(mock_get.call_args_list[0][0][0], 'aurl')
self.assertEqual(mock_get.call_args_list[1][0][0], 'burl')
self.assertEqual(mock_get.call_args_list[2][0][0], 'curl')
باتباع هذه الخطوات، يمكنك الاستهزاء بشكل فعال بطلبات HTTP والتحكم في الاستجابات في سيناريوهات اختبار Python الخاصة بك. يتيح لك ذلك عزل واختبار وظائف معينة مع ضمان عدم تداخل التبعيات الخارجية مع نتائجك. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3