Escolhendo a ferramenta adequada para seus testes automatizados de API

Vanessa Marques
Fretebras Tech
Published in
6 min readJan 31, 2022

APIs (Applications Protocol Interface) possibilitam a comunicação entre mais de um sistema. Os testes de APIs são uma forma de assegurar que todas as informações que transitam entre o front(interface/consumer) e o backend (servidor/banco de dados) estejam corretas, com dados persistidos e lógica aplicada conforme o planejado.

Ao testar uma API Rest alguns pontos são verificados, como:

  • Status code condizente.
  • Tempo de resposta não muito elevado.
  • Response body retornando as informações esperadas pela funcionalidade.
  • Métodos (ex: POST, PUT, DELETE, GET..) de acordo com o tipo de solicitação.

Devemos priorizar os testes de API devido a uma série de benefícios, como por exemplo: Execuções mais ágeis em comparação aos testes de interface, consequentemente gerando um retorno mais rápido das validações, reduzindo o custo do teste e obtendo um feedback mais rápido.

Aqui na FreteBras já possuíamos testes automatizados de algumas das nossas APIs, porém não havia a definição de uma ferramenta e arquitetura padrão para desenvolvimento desses testes.

Devido ao crescimento constante da empresa 🦄, resultando em um aumento do time de qualidade e do escopo dos produtos, percebemos a necessidade de padronizar alguns processos, dentre eles as arquiteturas dos nosso projetos de automação. Para auxiliar na definição optamos por elaborar uma PoC.

Mas o que é uma PoC?

Ao iniciar um novo projeto diversos questionamentos surgem, como por exemplo: Qual padrão arquitetural utilizaremos? Qual linguagem e framework utilizar?

Todas essas dúvidas, além de outras, foram levantadas durante o processo de iniciação dos projetos de testes automatizados de API. Para auxiliar na nossa tomada de decisão, principalmente em relação ao framework que seria utilizado, optamos por testar as possíveis tecnologias a serem adotadas através de Provas de Conceitos.

“Prova de Conceito’’ (Proof of Concept, em inglês, ou simplesmente PoC) é o nome que se dá à demonstração da possibilidade de validação de uma ideia (ou conceito) … e, geralmente, segue um roteiro de testes.”

Fonte: https://www.napratica.org.br/o-que-e-prova-de-conceito/

Primeiramente realizamos uma busca rápida sobre frameworks utilizados atualmente no mercado para testes de API Rest, a partir dessa pesquisa selecionamos 6 ferramentas bastante comentadas na internet que chamaram nossa atenção e que estavam de acordo com as linguagens que temos interesse em trabalhar, portanto ficamos com: HttParty, PactumJS, Postman, PyTest, Robot Framework e SuperTest.

Em seguida definimos os critérios que utilizaríamos para avaliar as ferramentas, sendo eles:

  • Configuração de request global
  • Asserts customizados
  • Tratamento de exceções
  • Debbuger
  • Mecanismo de retry
  • Manipulação de dados
  • Report customizado
  • Mock
  • Teste de contrato

Distribuímos entre o time quais integrantes ficariam com qual framework, definimos um escopo de um produto interno para realizar os experimentos e iniciamos os testes.

Ferramentas

HTTParty

GEM(dependência) do Ruby utilizada para enviar e interpretar chamadas HTTP.

Principais vantagens:

  • Possui código aberto.
  • Através do uso de outras gemas como pry, rspec é possível estender o leque de operação da ferramenta.

PactumJS

Ferramenta de teste de API REST usada para automatizar testes e2e, integração, contrato e componente (ou nível de serviço).

Principais vantagens:

  • Propõe automação genérica de testes relacionados a serviços, ou seja, você pode automatizar APIs, realizar testes de contrato, testes funcionais e não funcionais em um único framework.
  • Pode atuar como um Mock Server autônomo para gerar contratos para teste de contrato.
  • Possui código aberto.

Postman

Ferramenta de testes de API que oferece a possibilidade de realização de testes manuais e testes automatizados na plataforma, além da execução dos testes automatizados no CI/CD através do Newman (permite que você execute e teste uma coleção do Postman diretamente da linha de comando). Também é oferecido a criação, edição e documentação de API para os desenvolvedores e QAs.

Principais vantagens:

  • Possui tratamento de exceções.
  • Possui nativamente o recurso de Mock Servers.
  • Possui configurações de ambiente robusta e com vários níveis (pasta, coleção e workspace).
  • Interface gráfica, facilitando a usabilidade de ingressantes na tecnologia e desenvolvimento.

PyTest

Framework de testes em python, open-source de código aberto. A ferramenta proporciona a escrita desde testes pequenos até testes funcionais complexos de maneira fácil. Rico em plugins, com ele é possível escrever testes em diferentes formatos e para diferentes fins.

Dentro de uma arquitetura de testes de API, o PyTest funcionará como nossa estrutura de teste unitário, fornecendo o executor de teste, uma biblioteca de asserções e outras funcionalidades básicas advindas dos seus plugins (ex: relatórios, execuções em paralelo…).

Principais vantagens:

  • A comunidade python é muito ativa e unida.
  • Descoberta automática de módulos e funções de teste.
  • Documentação rica.
  • Uso do CLI altamente eficaz.

Robot Framework

Ferramenta para automação de testes de aceitação (ATDD) que propõe automações genéricas de testes, ou seja, com ela é possível automatizar sites, webapps, APIs, desktop e mobile utilizado um único framework.

Para iniciar o desenvolvimento com robot não é preciso o conhecimento específico em uma linguagem de programação. Através da abordagem keyword-driven a ferramenta propõe uma codificação mais simples.

Principais vantagens:

  • Ferramenta de código aberto.
  • É possível estender os recursos da ferramenta através da implementação de plugins que podem ser implementados utilizando as linguagens Python e Java.
  • A abordagem keyword-driven pode ser uma grande vantagens para pessoas que não possuem conhecimento prévio de alguma linguagem de programação.

Supertest

Biblioteca para facilitar o teste de solicitações de HTTP. Pode ser utilizado para outros tipos de testes (stress, unitário, aceitação, entre outros). Tem sua sintaxe escrita em JavaScript e é open source.

Principais vantagens:

  • Simplicidade na instalação e manutenção.
  • Juntamente com outras bibliotecas como chai.js, mocha e joi podem formar um ecossistema robusto de teste de API.

Comparando recursos entre as ferramentas

Após os estudos e as experimentações realizadas nas ferramentas e baseado nos critérios definidos como fatores importantes para nossos projetos, checamos ao seguinte comparativo:

OBS: A tabela comparativa só leva em consideração so recursos nativos da ferramenta.

Comparativo dos frameworks de testes de API

Conclusão

Para realizar a escolha da ferramenta levamos em consideração mais alguns critérios além dos citados anteriormente.

  • Conhecimento do time nas linguagens de codificação utilizadas pelas ferramentas e curva de aprendizado de linguagens não utilizadas.
  • Nível de maturidade da ferramenta (frequências de atualização, número de usuários…)
  • Suporte da comunidade (artigos, fóruns e tutoriais disponíveis sobre a ferramenta)
  • Custo para utilizar os recursos da ferramenta.

Levando em consideração somente os critérios em destaque na tabela comparativa, as ferramentas mais favoráveis seriam o PactumJS, Postman e PyTest.

Portanto escolhemos: …NENHUMA DELAS!

Mas podemos justificar.

  • PyTest: Apesar de ter a maioria dos recursos que precisamos, a linguagem utilizada pela ferramenta (Python) não era de expertise de grande parte do time.
  • Postman: Houveram preocupações em relação aos custos (mensalidade por usuário), além de que novos recursos só são liberados pela empresa detentora da ferramenta.

E o PactumJS?

Apesar de queridinho por parte do time, a ferramenta ainda é bem recente e não tem tanto suporte da comunidade, conteúdos relacionados são escassos.

E afinal qual foi a escolhida?

Optamos por…

SuperTest

Calma calma, vamos explicar.

Apesar de não possuir todos os recursos nativamente, existem várias bibliotecas de Javascript que aliadas ao SuperTest possibilitam a criação de uma estrutura robusta para desenvolvimento de testes automatizados de API.

OBS: Em breve, lançaremos a continuação deste post apresentando como ficou nossa arquitetura.

Autores

Esse post foi escrito em parceria com os QA’s:

--

--