Como fazer testes de API externa (caixa preta)

14

Suponha que você esteja usando APIs de um fornecedor, como garantir que a API esteja funcionando conforme o esperado?

Minha principal preocupação é que, algumas vezes, o fornecedor pressionou as alterações no código e quebrou a API. Queremos ter algum tipo de software automático para testá-las continuamente. Como lidar com isso?

user34401
fonte
Dependendo do idioma, pode haver ferramentas que podem ajudar (estou pensando em Pex for C # libraries / APIs).
Steven Evers

Respostas:

10

Resposta curta: você precisa de um conjunto de testes para uma API de fornecedor de terceiros - portanto, você precisará desenvolver um.

Não espere que outra pessoa faça isso por você e não espere uma "bala mágica" para gerar automaticamente os testes certos.

Algumas coisas que você pode tentar adicionalmente:

  • pergunte ao fornecedor se eles fornecem uma lista de "alterações recentes" para cada nova versão
  • pergunte a eles como eles se preocupam com a compatibilidade da API / informe que esse é um recurso importante para você
  • verifique se a API fornece ganchos de teste específicos, saída de log ou algo parecido para peças que não puderam ser testadas facilmente
  • agrupar chamadas importantes da API com seu próprio código de log, gravar entrada e saída relacionada da API em um arquivo de log, isso facilitará a depuração de coisas se algo inesperado acontecer
  • adicione asserções às chamadas da API para verificar pré e pós-condições; portanto, se uma nova versão da API mostrar um comportamento inesperado no seu aplicativo, você será informado antecipadamente por uma mensagem de erro

Se essas coisas funcionarem ou não, depende de quem é seu fornecedor e que tipo de API você tem em mente. Uma API que produz alguma saída inspecionável, como arquivos, é muito mais fácil de testar do que uma API que controla algum dispositivo físico, no qual você deve observar o comportamento da coisa para decidir se a chamada à API foi bem-sucedida ou não.

Doc Brown
fonte
Eu concordo totalmente, mas me parece que o interlocutor não tem experiência com unidades de teste e não conhece o esquema de trabalho com elas. Quero dizer: encontre pontos críticos, escreva unidades de teste, execute todos os testes, depure, durante a depuração encontre novos pontos críticos, escreva novas unidades, repita as últimas 4 etapas após cada alteração na API.
Gangnus
@ Gangnus: IMHO, o OP não nos contou nada sobre suas experiências anteriores com testes de unidade. Se ele tiver problemas com isso, tenho certeza que ele sabe fazer uma pergunta mais específica. Além disso, o tópico aqui não é "testes de unidade", mas "testes de integração automatizados". Aqueles requerem tipicamente um esquema diferente do que, por exemplo, teste de unidade no estilo TDD.
Doc Brown
Sim, ele não tinha dito isso. Mas se ele perguntar "como garantir que a API esteja funcionando conforme o esperado", sem mencionar as unidades de teste ", parece-me", que ele não as conhece. Quanto aos testes de integração automatizados, ele não os conhece, mesmo com maior probabilidade, ele mencionou apenas "algum tipo de software automático". Você espera do povo o mesmo conhecimento que o seu, mas nesses temas 99% dos programadores (inclusive eu) sabem muito menos. e 90% muito, muito, muito menos.
Gangnus
0

Com base no fraseado do pôster, é mais do que apenas testar, IMO. Depois de escrever seu teste de unidade para a API e garantir que tudo esteja funcionando conforme o esperado, você precisa monitorar APIs de terceiros para detectar problemas antes que os usuários o façam. Esse é o risco real das APIs de terceiros - não é o seu código e você não tem controle sobre a quantidade de testes realizados na API ou quando / se ela muda.

(Isenção de responsabilidade: nomes de produtos usados ​​aqui) Se você usar o soapUI para escrever seus testes de API, esses testes poderão ser reutilizados no AlertSite como um monitor operacional para garantir que a API continue funcionando conforme o esperado. Se o teste falhar, você poderá receber um alerta antes que seus usuários liguem para você e reclamar que seu aplicativo não funciona.

Lorinda Brandon
fonte
0

Implemente testes de aprendizado para sua área de interesse (recursos que você planeja usar). Testes de aprendizado são testes de integração escritos pelo desenvolvedor em relação ao contrato público da API. Os testes não devem ser escritos com relação aos detalhes da implementação interna, mesmo que o código fonte da API esteja disponível. Esse tipo de teste de aprendizado serve a dois propósitos -

  1. Isso melhora drasticamente a sua compreensão da API de terceiros.
  2. Os testes ajudam a verificar se a nova versão reivindicada é realmente compatível com versões anteriores ou não.
Anand Patel
fonte
0

Existem 2 abordagens para esse problema ...

seu aplicativo está em produção com tráfego real do usuário:

se você tiver um aplicativo em produção com tráfego ativo e que depende de uma API externa, não terá outra opção a não ser monitorar de perto e ter bons limites para saber o mais rápido possível quando a API externa fizer alterações sem notificar.

você sempre deve levar em consideração que:

  • mudança da API ao longo do tempo
  • o fornecedor da API pode ter erros
  • os kits de teste dos fornecedores de APIs podem ter bugs ou não cobrir totalmente toda a funcionalidade da API de produção

seu aplicativo é uma instalação e possui versões / lançamentos planejados:

nesse caso, você tem um período de carência para falhar ... o usuário ao vivo não é afetado imediatamente pelas alterações externas da API.

na minha opinião, essa é uma tarefa mais fácil. escreva um teste (teste completo de ponta a ponta) que faça transações / http / solicitações reais para seu aplicativo que chamam a API externa e verifique se não há falhas. sem kits de teste, sem zombar da transação real.

Após a conclusão dessa tarefa, você pode executá-la a cada 24H, 1 min, etc.

boas práticas:

  • automatizar tudo
  • tem uma pessoa que você pode entrar em contato rapidamente com o fornecedor da API externa
  • não confie cegamente no fornecedor teste tudo
  • falha rapidamente - se o seu serviço depende muito da API externa, não deixe seu serviço falhar. falhe rapidamente e retorne mensagens de erro adequadas

Ferramentas:

Nimrod007
fonte