Percebi durante o teste de integração que, na verdade, trabalho em casos de uso recorrentes com APIs repousantes (ou em interfaces HTTP em geral) verifico aqui e ali com o bash + cURL.
Começa a parecer bastante bagunçado e fica mais difícil de manter. Por que entregar bagunça?
Os casos de uso típicos são:
- Verifique se um URL retorna o código de resposta http, por exemplo, 200
- Verifique se o tipo de conteúdo corresponde a algum MIME necessário nesse caso
- Verifique se o conteúdo retornado corresponde a algum padrão ou passa em um procedimento de validação abstrata
O que encontrei até agora e considero uma opção viável sem reinventar a roda é:
- experimente o PyCurl - na esperança de implementar totalmente todas as opções de cURL esp. proxy, mas também outros switches que podem ser necessários
- use o testng de unidade embutido do Python
Então, eu poderia ter, por exemplo, um teste de unidade por serviço que gostaria de verificar:
import unittest, pycurl
class TestService (unittest.TestCase):
def test_1(self):
self.assertEqual(pycurl.returncode("some_url"), 200)
def test_2(self):
self.assertTrue(pycurl.response("some_url").matches ("xxx") )
def test_3(self):
self.assertTrue (pycurl.ContentType("some_url").equal("xxx"))
if __name__ == '__main__':
unittest.main()
Isso faz sentido ou existe um conjunto de ferramentas de alto nível (mas não muito complexo para captar e integrar)?
testing
continuous-deployment
python
curl
Peter Muryshkin
fonte
fonte
Respostas:
Você pode olhar para ferramentas como o Postman, que se concentra no teste de APIs REST com JavaScript - ele tem alguns recursos interessantes, mas você perde o uso do Python.
Em vez disso, sugiro examinar os plugins relacionados ao REST para pytest , uma estrutura de teste Python que simplifica seu código de teste, enquanto ainda executa testes escritos usando
unittest
.O Pytest possui um enorme conjunto de plugins que simplificam várias tarefas, incluindo:
Tavern , especializada em testes de APIs REST e parece altamente relevante aqui - como "Testes de unidade do Postman for Python".
pytest-curl-report - ao testar com a
requests
biblioteca, imprimirá umcurl
comando que você pode usar para reproduzir o erro do shell.Testinfra - concentra-se no teste do servidor (por exemplo, estado dos pacotes do sistema operacional, arquivos, processos, etc., geralmente testados em servidores remotos) - é altamente recomendável se você também precisar desse tipo, por exemplo, para testar o código Ansible.
Se você não gosta do Tavern, é claro que pode usá
pycurl
-lopytest
, o que facilita o diagnóstico exato do que falhou. Este exemplo do site pytest-curl-report usa apenas recursos genéricos do pytest:O Pytest permite escrever todos os testes de forma simples
assert
e, opcionalmente, incluir uma mensagem útil como parte da saída. Por exemplo, um de seus testes pode ser escrito:fonte