É cada vez mais comum que sites e aplicativos incorporem serviços terceirizados para estender e criar novas funcionalidades, muitos deles atualmente envolvem APIs. Qualquer serviço terceirizado, especialmente os dependentes dessas interfaces, precisa ser testado e monitorado frequentemente.
Há diversos fatores que podem ocasionar no mau funcionamento da API como:
Pontos de extremidade da API com tempo de inatividade;
Bugs na integração;
Lentidão para autenticar API;
API pouco robusta, ou seja, não consegue lidar com picos nas solicitações de entrada ou nas respostas de saída;
Latência nas chamadas de API, adicionando e criando gargalos de desempenho.
A maioria dos problemas acima apresenta uma solução específica, entretanto melhor que buscar a solução de um problema é saber se prevenir contra ele. A maneira mais eficiente de evitar dores de cabeça com estes empecilhos é por meio de testes e monitoramento das APIs.
A realização desses testes é um item prioritário para que você tenha sucesso com suas APIs. É por meio deles que se verifica o funcionamento, o desempenho e a confiabilidade de diversos aplicativos e sistemas que utilizam suas APIs nas suas comunicações.
Além disso, quando falamos de ciclo de vida de APIs é importante ter mente tais testes. As APIs não apenas agregam valor a um aplicativo, mas também aceleram os processos de negócios. Caso sua API não funcione como planejado ou sua eficácia seja questionável, dificilmente outras empresas ou desenvolvedores se interessarão por ela, mesmo que ela seja gratuita.
No caso de um e-commerce, por exemplo, se API do gateway de pagamentos não for capaz de verificar corretamente os dados do cartão do usuário, se sua integração com as opções de pagamento no site estiver quebrada, há risco de carrinhos abandonados, além de uma péssima User Experience. Se o site em questão também utilizar APIs para automatizar o gerenciamento de inventário, um desempenho ruim da API pode gerar atrasos no atendimento de pedidos, afetando as receitas do site.
Provedores de APIs devem levar em consideração em sua estratégia de monitoramento:
Disponibilidade: as APIs devem apresentar funcionamento a qualquer hora do dia, a falta de disponibilidade afeta o desempenho do aplicativo e o usuário final.
Segurança: monitorar uma API significa testar a confiabilidade desta em suas transações, a troca de dados de ser feita de forma segura e sem bots de extração de dados.
Benchmarking: os dados coletados pela ferramenta de monitoramento devem ser abrangentes e fáceis de analisar, para que assim eles ajudem a comparar o desempenho da sua API com a dos concorrentes
SLA: A ferramenta de monitoramento alertará em casos de degradação ou interrupção do desempenho da API.
No caso de aplicativos que consomem várias APIs é vital manter uma constância nos monitoramentos. Cada integração de API deve ser testada regularmente quanto aos gargalos de desempenho.
Com relação aos testes de APIs, o desenvolvedor deve se manter atento às seguintes questões:
A API funciona como esperado?
Ela é capaz de lidar com grande volume de chamadas?
Requisitos de segurança como autenticação, permissões de acesso e controle foram definidos pela API?
A API leva a resultados consistentes?
A interface é fácil de usar? Ela se integra bem a outras plataformas e aplicativos?
A API disponibiliza documentação adequada para a realização dos testes?
Como funcionam os testes de API?
Testar uma API pode representar uma parte desafiadora dos testes de qualidade de software e de aplicativos, isso porque sua estrutura pode ser complexa e na maioria das vezes elas se baseiam em protocolos e padrões que comumente não são encontrados em outros tipos de teste.
De maneira resumida, testar uma API significa fazer solicitações para o endpoint desta e então validar sua resposta. Com isso é possível determinar se a API atende ou não as expectativas quanto a segurança e funcionalidade por exemplo.
Ao trabalhar com testes de APIs há uma série de validações que devem ser consideradas. Elas são:
Validação do status retornado;
Validação do header de retorno;
Validação do body de response;
Validação do comportamento da API quando o serviço está indisponível;
Validação do comportamento da API ao enviar um JSON/XML com estrutura incorreta.
A seguir explicarei algumas das práticas mais eficientes quando o assunto é teste de APIs:
1. Documente todos requisitos de teste
Antes que você crie casos de testes de APIs, é preciso compreender os seguintes detalhes:
objetivo da API
workflow do aplicativo
integrações suportadas pela API
recursos e funções da API
Saber documentar tais requisitos é fundamental para a implementação da API. Isso auxiliará a planejar melhor todo o processo de testes.
2. Dê atenção às pequenas funções da API
Optar por escrever os casos de testes maiores, pulando os que são menores não é a melhor tática no caso de testes de APIs, já que através das pequenas funções de API é possível escrever pequenos códigos de teste e assim analisar se o resultado foi ou não o esperado.
3. Execute testes automatizados
Gradualmente testes manuais vem dando lugar aos automatizados, isso ocorre porque automatizar esse processo permite que a execução das chamadas de API seja mais eficiente, clara e com mais foco. Por isso saiba investir em ferramentas que automatizem os testes de sua API.
4. Realize agendamento diário dos testes
Uma ótima medida ao longo do processo de testes é agendar verificações diárias. Portanto, os testes de API devem ser planejados com antecedência, sendo isso apenas possível graças às ferramentas de teste de API automatizadas que vêm com recursos como:
Comandos de testes incorporados;
Ferramentas de gestão de testes;
Ferramentas de rastreamento de defeitos;
Geração de relatórios de log visuais.
Diariamente, quando você acessar o sistema poderá ver os resultados de tais testes e comprovar se os resultados estão os não dentro do esperado. Se os testes falharem basta verificar as saídas e validar os erros.
5. Priorize a segurança
Testes de segurança de uma API não devem ser de forma alguma deixados de lado ou subestimados. O que acontece algumas vezes é o caso de desenvolvedores ignorarem a implementação de restrições de segurança da interface. Quando bem executados e com regularidade os testes podem garantir que sua API seja o mais segura possível durante seu ciclo de vida.
Um erro em um único aplicativo irá afetar apenas ele, no entanto quando o erro ocorre em uma API utilizada, isso afetará todos os aplicativos que dependem dela. Dessa forma inclua cenários de segurança em seus testes para averiguar questões relacionadas à autenticação necessária e a importância de dados criptografados.
Ao invés de realizar apenas testes funcionais execute aqueles que simulem diferentes tipos de ataques. É importante que você conheça para quais tipos de problemas de segurança nas APIs direcionar os testes. Uma ótima fonte de informação é o WHID (Web Hacking Incident Database), que lista os tipos mais prováveis de violação de segurança. Eles são:
Injeção de SQL;
Scripts entre sites;
Negação de serviço;
Localização previsível de recursos;
Divulgação não intencional de informações.
Erros de teste de API que você deve passar longe
É preciso cuidado no momento de testar as API, afinal de contas nenhum desenvolvedor quer que todo seu trabalho duro e o uso de recursos disponíveis sejam desperdiçados pela falta de testes ou mesmo pela sua má condução.
Agora que você conhece algumas das melhores práticas relacionadas aos testes de APIs, vale destacar também os principais erros cometidos nessa hora.
1. Considerar o teste de API uma ação autônoma.
A integração de APIs a sistemas e aplicativos é capaz de agregar valor ao negócios e acelerar diversos processos do setor de TI. Logo pôr em prática um teste de API sem levar em conta como a interface pode se comportar no ecossistema é inútil. Os erros das APIs não possuem as mesmas causas, logo o ambiente na qual elas são implementadas tem um importante papel a desempenhar.
O ideal é que todos os times envolvidos na API em questão sejam notificados sobre os resultados dos testes. Se você como desenvolvedor, por exemplo, testar a API por conta própria e não comunicar ao restante da equipe os resultados, há chances de futuras falhas na API.
2. Associar o bom desempenho do aplicativo a qualidade da API
Não há nada de errado em uma API ser integrada ao servidor back-end de um aplicativo móvel com facilidade, na verdade isso é algo muito bom. Entretanto, isso pode transmitir um sentimento de falsa confiança, já que o bom desempenho do aplicativo não descarta a chance de erros básicos na API subjacente. O funcionamento do aplicativo do usuário final não deve se tornar o fator determinante da qualidade de uma API. Existe sim a possibilidade de futuras falhas na interface, levando a uma série de verificações em todos os elementos da cadeia de chamadas.
3. Esquecer de verificar a escalabilidade
Conforme ocorre um aumento da base de usuários da API também se faz necessário um aumento da própria API. A partir daí é preciso que você coloque a verificação de escalabilidade dentro dos seus testes regulares, evitando as possibilidades de sobrecarga do usuário, juntamente com problemas financeiros e legais. Além de confirmar a escalabilidade adequada da sua API, estabeleça um mecanismo de Governança de API.
4. Ignorar falhas pouco frequentes
É esperado funcionamento constante da API e não apenas a maior parte do tempo, ou seja, falhas pouco frequentes não devem passar batido. Ela ainda sim afetam o desempenho da API. Não é incomum que problemas intermitentes sejam deixados de lados por desenvolvedores, o que é explicado por um simples motivo: a incomoda verificação de todo o log de tráfego da API.
O que você desenvolvedor precisa considerar é que problemas pequenos podem aumentar com o tempo e afetar os usuários finais da API. Por exemplo, um problema ligado a usabilidade, mesmo que pequeno, não deve ser ignorado, muito menos encoberto pelo provedor da API. Se a frequência do problema aumentar com o tempo a depuração da interface também será mais complexa.
Como posso testar minhas APIs?
Existem diversas ferramentas disponíveis no mercado que auxiliam na realização dos testes de APIs. É indicado que no momento de escolha da ferramenta você procure por uma que admita configurar de forma simples os parâmetros do header, o método de request e o body da sua requisição.
Neste artigo irei focar em duas ferramentas muito utilizadas: Postman e SoapUI.
1. Postman
Originalmente o Postman era um plugin do browser Chrome, agora ele possui versões nativas para Mac e Windows. Além dos testes, a ferramenta também ajuda na criação, no compartilhamento e na documentação de APIs. Tudo isso permitindo que o usuário crie e salve suas solicitações HTTP e HTTPs simples e complexas.
Algumas de suas características:
Permite testes automatizados;
Facilita testes exploratórios;
Possui interface rica;
Ferramenta gratuita, mas possui versão paga para sincronização de código entre equipes;
Funciona em qualquer plataforma: Windows, MacOS e Linux;
Converte JSON em várias linguagens (ex: Python, PHP, RUBY);
Não obriga a equipe de testes a aprender uma nova linguagem de programação.
Um exemplo de empresa que utiliza essa ferramenta para o teste de suas APIs é a Cielo.
2. SoapUI
A SoapUI é ferramenta open source da SmartBear. rata-se de uma solução voltada para o consumo e testes funcional de Web Services, APIs REST e SOAP.
Dentre as suas principais características, vale destacar as seguintes:
Criação de testes orientados a dados (data driven tests);
Elaboração de cenários complexos que suportam testes assíncronos;
Reutilização de scripts;
Gestão de múltiplo endpoints;
Realização de testes funcionais, de performance, de segurança e de carga;
Execução de diversos testes em paralelo;
Gestão de ambientes de teste;
Versão gratuita e paga.
Apple, Microsoft e Mastercard são exemplos de empresas que fazem uso dessa ferramenta.
Nunca subestime testes de APIs
As APIs são essenciais para criar uma experiência eficaz e conectada aos clientes e muitas empresas além das de tecnologia já perceberam o real valor de uma API. Em uma época de crescimento constante de aplicativos e plataformas interconectadas a realização de testes em APIs se tornou uma necessidade.
A sua prática pode até ser desafiadora dada a estrutura complexa das APIs, mas eles garantem o controle de qualidade da interface, revelando bugs, inconsistências e desvios do comportamento esperado do aplicativo. O mais indicado é que os testes sejam executados no início do processo de desenvolvimento. Quanto mais cedo um problema for detectado, mais rápido e barato será corrigi-lo. Em 2002 a correção de bugs em softwares custou à economia dos EUA aproximadamente US$ 59,5 bilhões. Já em 2016, esse valor saltou para US$ 1,1 trilhão.
Uma dos principais benefícios da realização dos testes é a rapidez com que eles podem fornecer uma imagem do status do produto no processo de desenvolvimento. Eles também permitem que o desenvolvedor realize teste automatizados a baixo custo, por exemplo, novas startups que não possuem inicialmente capacidade para arcar com grande número de recursos (tempo e pessoas) a fim de criar cobertura mais ampla.
Os testes de API também auxiliam o desenvolvedor a localizar violações que provavelmente seriam perdidas em outros tipos de testes, pois há o risco de o sistema ser tomado por solicitações parametrizadas, mas não apenas isso. O desenvolvedor pode executar ações que não são expostas na interface do usuário (UI), mesmo que seu back-end o ofereça suporte.
Uma vez que você tenha uma API, esta provavelmente será acessada por seus usuários, o que pode deixar você mais aberto a futuras violações. Testar sua API adequadamente oferecerá recursos além dos usuais da UI.