Sobes.tech
Middle

De que forma pode automatizar os testes de API?

sobes.tech IA

Resposta da IA

Para automatizar os testes de API, utilizo o seguinte:

  1. Escolha de ferramentas:

    • Postman: Ótima solução para testes manuais e semi-automatizados, criação de coleções de requisições, escrita de scripts em JavaScript para verificações (assertions) e criação de ambientes.
    • Rest-Assured (para Java) / Requests (para Python): Bibliotecas para escrever testes automatizados no código. Permitem construir requisições de forma flexível, processar respostas e escrever verificações complexas.
    • Swagger/OpenAPI: Para gerar código cliente ou testes com base na especificação da API.
  2. Definição de cenários de teste: Análise da especificação da API, definição de endpoints, métodos (GET, POST, PUT, DELETE, etc.), parâmetros, cabeçalhos, corpo das requisições, códigos de estado esperados e formatos de resposta (JSON, XML). Desenvolvimento de cenários de teste positivos e negativos.

  3. Implementação de testes:

    • Com Postman:

      • Criação de coleções para agrupar testes.
      • Escrita de scripts Pre-request para preparar dados (por exemplo, obter token).
      • Escrita de Tests (scripts post-request) para verificar o status da resposta, cabeçalhos, corpo da resposta (usando pm.response.json(), pm.expect(), chai.expect()).
      • Uso de variáveis de ambiente para parâmetros que mudam entre ambientes (URL, credenciais).
      • Execução de coleções via Collection Runner ou Newman (para CI/CD).
      // Teste Postman
      pm.test("O código de status é 200", function () {
          pm.response.to.have.status(200);
      });
      
      pm.test("O corpo da resposta contém um campo específico", function () {
          const responseJson = pm.response.json();
          pm.expect(responseJson.data).to.have.property('id');
      });
      
    • Com Rest-Assured (Java):

      • Escrita de código em Java usando frameworks de teste (JUnit, TestNG).
      • Criação de requisições, especificação de parâmetros, cabeçalhos, corpo.
      • Execução da requisição (when().get(), post(), etc.).
      • Verificação da resposta (then().statusCode(int), body(String path, Matcher<?> matcher)).
      // Exemplo de Rest-Assured (Java) usando JUnit
      import io.restassured.RestAssured;
      import org.junit.jupiter.api.Test;
      import static io.restassured.RestAssured.given;
      import static org.hamcrest.Matchers.equalTo;
      
      public class ApiTest {
      
          @Test
          public void testGetUser() {
              RestAssured.baseURI = "https://api.example.com"; // Definir URL base
      
              given()
              .when()
                  .get("/users/1") // Enviar requisição GET para /users/1
              .then()
                  .statusCode(200) // Verificar que o código de estado é 200
                  .body("data.id", equalTo(1)); // Verificar campo no corpo da resposta
          }
      }
      
  4. Gestão de dados de teste: Uso de parametrização de testes para verificar diferentes combinações de dados de entrada. As fontes de dados podem ser arquivos CSV, JSON, bancos de dados.

  5. Execução de testes no pipeline CI/CD: Integração de testes automatizados de API no fluxo de integração contínua/entrega contínua usando ferramentas como Jenkins, GitLab CI, GitHub Actions. Isso permite executar testes automaticamente a cada commit e obter feedback rápido sobre a estabilidade da API. Para Postman, usa-se Newman, para soluções de código — executar o framework de testes.

  6. Análise de resultados e relatórios: Geração de relatórios de testes (por exemplo, usando Allure, relatórios HTML do TestNG/JUnit). Acompanhamento dos resultados e análise das causas de falhas.

Essa abordagem garante uma verificação regular e confiável da funcionalidade e estabilidade da API em diferentes etapas do desenvolvimento.