Mocking de solicitações e respostas para testes Python
Nos testes Python, torna-se necessário simular módulos e suas funcionalidades para controlar o fluxo de execução e verificar cenários específicos. Entre eles, zombar do módulo de solicitações é comumente usado para testar funções ou métodos que dependem de solicitações HTTP.
Considere um arquivo views.py com o seguinte código:
def myview(request):
res1 = requests.get('aurl')
res2 = request.get('burl')
res3 = request.get('curl')
Para simular esse comportamento, você pode empregar o pacote simulado Python. Veja como você pode fazer isso passo a passo:
Etapa 1: Defina o comportamento simulado
Para simular o módulo de solicitações, defina uma função que substituirá requests.get (). Nesta função, você pode especificar a resposta desejada para cada 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)
Etapa 2: corrigir o módulo de solicitações
Em seu caso de teste, use o decorador mock.patch() para substituir as solicitações reais módulo com sua função simulada.
@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
...
Etapa 3: verificar asserções
Na sua função de teste, você pode usar asserções para verificar se as respostas esperadas são retornadas.
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')
Seguindo essas etapas, você pode simular solicitações HTTP com eficácia e controlar as respostas em seus cenários de teste Python. Isso permite isolar e testar funcionalidades específicas, garantindo que dependências externas não interfiram em seus resultados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3