Skip to content

11 ‐ Testes de Integração

Wellington Luiz de Faria edited this page Dec 4, 2024 · 3 revisions

Testes de Integração

11.1 Introdução

11.1.1 O que são os Testes de Software

Os testes de software consistem em um conjunto de práticas destinadas a verificar, validar e avaliar a qualidade de um sistema ou aplicação. O objetivo principal é identificar defeitos ou inconsistências no software antes de sua entrega ao usuário final, assegurando que ele funcione conforme o esperado.

De modo geral, os testes de software são classificados em três principais categorias:

  • Testes Funcionais: Verificam se o software atende aos requisitos especificados, validando funcionalidades específicas do sistema.
  • Testes Não Funcionais: Avaliam aspectos como desempenho, escalabilidade, usabilidade e segurança, que não estão diretamente ligados às funcionalidades, mas são cruciais para a qualidade geral do software.
  • Testes de Manutenção: Garantem que alterações no sistema, como correções de bugs ou melhorias, não introduzam novos problemas.

Os testes podem ser realizados de forma automatizada, utilizando ferramentas específicas, ou manualmente, dependendo da complexidade e do contexto do projeto. Eles são aplicados em diversas etapas do ciclo de desenvolvimento, incluindo testes unitários (validam partes isoladas do código), testes de integração (verificam interações entre módulos), testes de sistema (analisam o sistema completo) e testes de aceitação (validação final com o cliente).

11.1.2 Como e Quais Testes Serão Implementados no Projeto Tupan

O projeto Tupan adotará tanto testes unitários quanto testes de integração. Este documento define padrões para a criação e execução dos testes, incluindo quem será responsável, quando os testes devem ser criados, os recursos necessários, os fluxos e as diretrizes para lidar com falhas, e as responsabilidades pela resolução de problemas.


11.2 Criação dos testes

11.2.1 Recursos necessários para a criação dos testes de integração

  • Documentação detalhada dos requisitos.
  • Critérios de aceitação bem definidos.
  • Cenários de testes bem definidos.
  • Ferramentas e ambientes de teste configurados adequadamente.

11.2.2 Responsabilidade pela Criação

A criação dos testes de integração é responsabilidade dos testadores, profissionais especializados em desenvolver e validar cenários de testes.

11.2.3 Cenários de testes

Os cenários de testes devem ser criados logo após a definição dos critérios de aceitação das User Story's.

11.2.4 Ferramentas de teste

As ferramentas de teste utilizadas para o frontend e backend são respectivamente:

  • Jest
  • Pytest

11.2.5 Ambiente de teste

O ambiente de teste é configurado com um banco de dados preparado especificamente para ser populado com os dados necessários durante a execução dos testes, garantindo um cenário adequado para validação das funcionalidades.

11.2.6 Testes

Os testes de integração devem ser elaborados na branch develop assim que os critérios de aceitação das User Story's e os cenários de testes forem definidos.

Os testes de integração devem popular o banco de dados com dados específicos para cada cenário de testes, sendo responsabilidade do script de teste criar esses dados. Para garantir um ambiente limpo entre os testes, existe uma fixture configurada para excluir os dados do banco ao final de cada execução, permitindo que o próximo teste insira as informações necessárias de forma isolada e controlada.


11.3 Execução dos Testes

11.3.1 Responsabilidade pela execução dos testes

Os testes de integração serão realizados por meio de um pipeline com acionamento manual, que deverá ser executado pelos testadores. Esses testes devem ser executados exclusivamente na branch develop.

Caso os testes passem sem nenhum erro o testador deve acionar o checkbox de que passou nos testes de integração que estará no card da tarefa.

11.3.2 Comportamento em Caso de Falhas

Quando uma falha for detectada:

  • Logs detalhados serão gerados para apoiar a análise do problema.
  • Os testadores serão responsáveis por analisar as falhas identificadas nos testes de integração e notificar os responsáveis, seja do frontend ou do backend, conforme a origem do problema.
  • A correção das falhas identificadas nos testes ficará a cargo do indivíduo que foi notificado pelo testador sobre a falha.

11.3.3 Acompanhamento e Correções

As falhas identificadas devem ser registradas como issues no GitHub, permitindo seu rastreamento e priorização.

  • Detalhes da Issue:
    • Critérios de aceitação associados à tarefa em que o teste apresentou falha.
    • Logs de execução do teste, fornecendo informações para facilitar a análise e resolução.

Após as correções, os testes devem ser reexecutados para verificar se o problema foi solucionado e garantir que nenhuma nova falha foi introduzida. Somente após essa validação a issue poderá ser marcada como resolvida.


11.4 Configuração do ambiente de testes

11.4.1 Backend

Biblioteca Utilizada

  • Pytest: Framework para criação e execução dos testes.

Estrutura de Diretórios

Os testes de integração serão armazenados dentro de ./src/tupan/tests/integration.

Exemplo de Estrutura:

/src
    /tupan
        /usuarios
            __init__.py
            admin.py
            views.py
            urls.py
            serializers.py
            /tests
                test_views.py
                test_urls.py
        /usuarios
            test_views.py
        /tests
            /integration
                conftest.py
                pytest.ini
                test_examplo.py

11.4.2 Frontend

Biblioteca Utilizada

  • Jest: Framework para criação e execução dos testes.

Estrutura de Diretórios

Os testes serão organizados em uma pasta dedicada dentro de src, com subpastas para escopos específicos e uma pasta ìntegration contendo os testes de integração.

Exemplo de Estrutura:

/src
    /app
    /components
        /alertas
            confirmacao.tsx
        /estacao
            estacao.tsx
    /hooks
    /tests
        /estacao
            adicionarEstacao.test.ts
        /integration
            integrationEstacoes.test.ts

Nota: Testes fora das subpastas abrangem múltiplos escopos.

11.4.3 Pipeline

A execução da pipeline dos testes de integração deve ser realizada manualmente através do GitHub.

name: Django Integration Tests

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.12]
    steps:
    - uses: actions/checkout@v4

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements-dev.txt

    - name: Start PostgreSQL service
      run: |
        docker run --name postgres-db -d \
          -e POSTGRES_USER=${{ secrets.DB_USERNAME }} \
          -e POSTGRES_PASSWORD=${{ secrets.DB_PASSWORD }} \
          -e POSTGRES_DB=${{ secrets.DB_NAME }} \
          -p 5432:5432 postgres:13
        # Wait until PostgreSQL is ready
        until docker exec postgres-db pg_isready -U ${{ secrets.DB_USERNAME }}; do
          echo "Waiting for PostgreSQL to be ready...";
          sleep 5;
        done

    - name: Create .env file
      run: |
        echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
        echo "DB_USER=${{ secrets.DB_USERNAME }}" >> .env
        echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env
        echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env
        echo "DB_HOST=localhost" >> .env
        echo "DB_PORT=5432" >> .env

    - name: Apply Django Migrations
      run: |
        python src/tupan/manage.py makemigrations
        python src/tupan/manage.py migrate

    - name: Run Integration Tests
      run: |
        cd src/tupan/tests/integration && pytest

    - name: Stop PostgreSQL container
      run: |
        docker stop postgres-db
        docker rm postgres-db

11.5 Exemplo de card

Criação da tela de Dashboards

O que fazer:

Criar a tela de exibição dos dashboards com as informações das estações.

Restrições:

Não exibir dashboards que não apresentem informações

Falha:

Se um dashboard não possui nenhum valor a exibir o mesmo deve ser ocultado da página

Conteúdo:

Dados das estações metereológicas.


Aceitação:

  • Os dashboards devem apresentar informações de fácil leitura;
  • Legendas/títulos explicativos de cada dashboard exibido;
  • Passou nos testes unitários
  • Passou nos testes de integração

Apoio:

Não há material de apoio.