Sobes.tech
Middle

Como vai verificar o serviço web?

sobes.tech IA

Resposta da IA

A verificação do serviço web inclui várias etapas-chave e tipos de testes:

  1. Compreensão dos requisitos e especificações:

    • Estudo da documentação (Swagger/OpenAPI, WSDL, especificações funcionais).
    • Esclarecimento de pontos pouco claros com a equipa de desenvolvimento ou analistas de negócio.
  2. Planeamento de testes:

    • Definição da estratégia de teste.
    • Seleção de métodos e ferramentas de teste.
    • Planeamento do volume de dados de teste.
  3. Testes de funcionalidade:

    • Cenários positivos: Verificação do comportamento esperado com dados de entrada corretos.
    • Cenários negativos: Verificação do tratamento de dados incorretos, erros, valores limite.
    • Teste de todas as operações (GET, POST, PUT, DELETE, etc.).
    • Validação da estrutura de pedidos e respostas (JSON, XML).
    • Verificação dos estados de resposta HTTP (2xx - sucesso, 4xx - erro do cliente, 5xx - erro do servidor).
    • Reinício do servidor durante a operação (para cenário negativo).
  4. Testes de integração:

    • Verificação da interação do serviço web com outros serviços ou sistemas.
    • Uso de ferramentas que possam emular respostas de serviços dependentes (servidores simulados).
  5. Testes de desempenho:

    • Testes de carga: Verificação do comportamento do serviço sob carga esperada.
    • Testes de stress: Verificação do funcionamento sob carga superior à esperada para determinar o ponto de falha.
    • Testes de estabilidade (Testes de resistência): Verificação do funcionamento do serviço sob carga durante um período prolongado.
    • Medição do tempo de resposta e da largura de banda.
  6. Testes de segurança:

    • Verificação de autenticação e autorização.
    • Validação de entrada para prevenir injeções SQL, XSS e outras vulnerabilidades.
    • Verificação da presença de HTTPS.
  7. Testes de dados:

    • Verificação da correção dos dados devolvidos pelo serviço.
    • Verificação da integridade dos dados em operações de criação, atualização e eliminação.
    • Testes com grandes volumes de dados.
  8. Automatização de testes:

    • Automatização de testes funcionais rotineiros.
    • Uso de bibliotecas e frameworks para automatizar testes de API (Rest Assured, JUnit/TestNG, Pytest, Postman Newman).
    • Configuração de CI/CD para a execução automática de testes.
  9. Ferramentas:

    • Postman, Insomnia (testes manuais e automatizados).
    • Apache JMeter, LoadRunner, Gatling (testes de desempenho).
    • OWASP ZAP, Burp Suite (testes de segurança).
    • Bibliotecas para linguagens de programação (Rest Assured para Java, Requests para Python, etc.).
  10. Relatórios:

    • Registo dos defeitos encontrados com descrição detalhada dos passos, resultados esperados e reais, dados de requisição/resposta, estado HTTP e logs.
    • Elaboração de relatórios de progresso dos testes.

Exemplo de teste automatizado em Java usando Rest Assured:

import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;

class UserServiceTest {

    @Test
    void testGetUserById() {
        int userId = 1;
        given()
            .baseUri("http://api.example.com") // URL base do serviço
            .when()
            .get("/users/" + userId) // Método e endpoint
            .then()
            .statusCode(200) // Verificação do código de estado
            .body("id", equalTo(userId)) // Verificação do campo na resposta
            .body("name", equalTo("John Doe")); // Verificação de outro campo
    }

    @Test
    void testCreateUser() {
        String requestBody = "{\n" +
                             "  \"name\": \"Jane Smith\",\n" +
                             "  \"email\": \"jane.smith@example.com\"\n" +
                             "}";

        given()
            .baseUri("http://api.example.com")
            .contentType("application/json") // Definir tipo de conteúdo
            .body(requestBody) // Corpo da requisição
            .when()
            .post("/users") // Método e endpoint para criar
            .then()
            .statusCode(201) // Verificação do código "Criado"
            .body("name", equalTo("Jane Smith"))
            .body("id", org.hamcrest.Matchers.notNullValue()); // Verificação de que o ID foi criado
    }
}