Verspotten von Anfragen und Antworten für Python-Tests
Bei Python-Tests ist es notwendig, Module und ihre Funktionalität zu verspotten, um den Ausführungsfluss zu steuern und überprüfen Sie bestimmte Szenarien. Unter diesen wird das Verspotten des Anforderungsmoduls häufig verwendet, um Funktionen oder Methoden zu testen, die auf HTTP-Anforderungen basieren.
Stellen Sie sich eine Datei „views.py“ mit dem folgenden Code vor:
def myview(request):
res1 = requests.get('aurl')
res2 = request.get('burl')
res3 = request.get('curl')
Um dieses Verhalten zu simulieren, können Sie das Python-Mock-Paket verwenden. So können Sie es Schritt für Schritt erreichen:
Schritt 1: Definieren Sie das Scheinverhalten
Um das Anforderungsmodul zu verspotten, definieren Sie eine Funktion, die „requests.get“ ersetzt (). In dieser Funktion können Sie für jede URL die gewünschte Antwort angeben.
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)
Schritt 2: Patchen Sie das Anforderungsmodul
Verwenden Sie in Ihrem Testfall den Dekorator „mock.patch()“, um die tatsächlichen Anforderungen zu ersetzen Modul mit Ihrer Mock-Funktion.
@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
...
Schritt 3: Behauptungen überprüfen
Innerhalb Ihrer Testfunktion können Sie Behauptungen verwenden, um zu überprüfen, ob die erwarteten Antworten zurückgegeben werden.
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')
Indem Sie diese Schritte befolgen, können Sie HTTP-Anfragen effektiv simulieren und die Antworten in Ihren Python-Testszenarien steuern. Dadurch können Sie bestimmte Funktionen isolieren und testen und gleichzeitig sicherstellen, dass externe Abhängigkeiten Ihre Ergebnisse nicht beeinträchtigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3