Olá, Habr! Enquanto trabalhava em uma biblioteca de wrapper da API REST, tive um problema. Para testar o processamento de códigos de resposta do servidor errados (400, 500, 403, etc.), é necessário criar artificialmente condições no servidor para receber os códigos correspondentes. Com um servidor configurado corretamente, por exemplo, não é fácil obter um erro 500. Mas de alguma forma é necessário testar as funções do manipulador de erros. Eu escrevi uma pequena API que gera respostas erradas do servidor - httpme.tk
Como se inscrever no teste?
Por exemplo, existe um código como este ( 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)
Em suma, o código contém uma função que retorna uma resposta do servidor a uma solicitação GET para um determinado URL; se ocorrer um erro 403 como resultado da solicitação, uma exceção de módulo interno será gerada AccessError
.
Este código precisa ser testado e depurado. Não é fácil criar manualmente condições para o erro 403 e ainda mais, por exemplo, 500 (o servidor funciona muito bem). O testador não se importa em que condições o servidor emitirá um erro 403: ele não está testando a API em si (por exemplo), mas a função que a chama. Portanto, para testar o lançamento de uma exceção com um código de status 403, ele pode fazer assim ( python3 + pytest ):
import pytest
from mymodule import
def test_forbidden():
with pytest.raises(AccessError):
getter('http://httpme.tk/403')
Como usar?
Muito simples. Envie uma solicitação GET para o servidor em http://httpme.tk/<status_code>
. Por exemplo, assim ( cURL ):
curl -G http://httpme.tk/500
Ou assim ( python3 ):
from requests import get
get('http://httpme.tk/408') # <Response [408]>
O que tem dentro?
E dentro está um pequeno aplicativo Flask que chama uma função abort(status_code)
em cada solicitação.
Isso é tudo!
É interessante ouvir a avaliação da comunidade sobre a utilidade deste serviço.