Testes de Validação Automatizados com Amazon Nova Act em Modo Sem Interface Gráfica

Validação Ágil de Funcionalidades Críticas com Inteligência Artificial

A automação de testes é fundamental para equipes de desenvolvimento que realizam múltiplas implantações diárias. Os testes de validação rápida (conhecidos como smoke tests) representam uma alternativa prática aos testes de ponta a ponta tradicionais, que frequentemente demandam horas para execução e criam gargalos nas linhas de produção.

O conceito de smoke test concentra-se em validar as funcionalidades mais críticas de uma aplicação logo após sua implantação. Em vez de verificar cada detalhe da interface, esses testes focam em fluxos essenciais como autenticação de usuário, navegação principal e transações-chave. A execução típica ocorre em minutos, não em horas, tornando-os ideais para pipelines CI/CD que dependem de feedback rápido sobre mudanças no código.

Uma Abordagem Inteligente para Automação de Testes

Amazon Nova Act introduz uma mudança significativa na forma como testes de interface são construídos. Em vez de depender de seletores CSS frágeis e scripts de teste complexos, a plataforma utiliza compreensão de interface baseada em inteligência artificial e processamento de linguagem natural. Isso permite escrever testes com instruções em inglês simples que se adaptam automaticamente a mudanças na interface, eliminando a fragilidade dos métodos tradicionais.

A solução apresentada integra um executor de testes em Python, validação de fluxos de comércio eletrônico para jornadas completas do usuário, integração com GitLab CI/CD para automação nativa, e execução paralela para potencializar a eficiência dos recursos. O modo headless (sem interface gráfica) permite que os testes rodem em segundo plano, um requisito essencial para ambientes automatizados.

Construindo a Solução Passo a Passo

Preparação do Projeto e Dependências

O primeiro passo envolve criar um projeto Python e instalar as dependências necessárias. A abordagem utiliza UV, um gerenciador de pacotes Python moderno que oferece funcionalidade similar ao npm para projetos Node.js:

uv init nova-act-smoke-tests
code nova-act-smoke-tests
uv add nova-act

UV é particularmente eficiente pois gerencia automaticamente a instalação de dependências e criação de ambientes virtuais. Para completar a configuração, é necessário ter acesso ao Amazon Nova Act com chave de API, um repositório no GitLab, e familiaridade com Python e CI/CD.

Implementação do Teste de Autenticação

O primeiro teste valida o fluxo completo de login. A solução utiliza uma aplicação de demonstração chamada SauceDemo, um aplicativo de comércio eletrônico adequado para exemplos educacionais:

import os
from nova_act import NovaAct

SAUCEDEMO_URL = "https://www.saucedemo.com/"

def test_login_flow():
    """Test complete login flow and product page verification"""
    with NovaAct(starting_page=SAUCEDEMO_URL) as nova:
        nova.act("Enter 'standard_user' in the username field")
        nova.act("Enter 'secret_sauce' in the password field")
        nova.act("Click the login button")
        nova.act("Verify Products appear on the page")

def main():
    if not os.getenv("NOVA_ACT_API_KEY"):
        exit("❌ Set NOVA_ACT_API_KEY environment variable")
    
    print("🚀 Starting Nova Act Smoke Test")
    try:
        test_login_flow()
        print("✅ Login test: PASS")
    except Exception as e:
        print(f"❌ Login test: FAIL - {e}")
        exit(1)
    
    print("🎉 All tests passed!")

if __name__ == "__main__":
    main()

Observe que as chaves de API são armazenadas em variáveis de ambiente, nunca no código-fonte, mantendo informações sensíveis separadas da base de código e fora do controle de versão.

Expandindo para Fluxos Completos de Negócio

Um teste prático deve validar jornadas completas do usuário, não apenas funcionalidades isoladas. A solução expande o escopo para incluir todo o fluxo de comércio eletrônico:

def test_ecommerce_workflow():
    """Test complete e-commerce workflow: login → shop → checkout → logout"""
    with NovaAct(starting_page=SAUCEDEMO_URL, headless=False) as nova:
        # Login
        nova.act("Enter 'standard_user' in the username field")
        nova.act("Enter 'secret_sauce' in the password field")
        nova.act("Click the login button")
        nova.act("Verify Products appear on the page")
        
        # Shopping
        nova.act("Select Sauce Labs Backpack")
        nova.act("Add Sauce Labs Backpack to the cart")
        nova.act("Navigate back to products page")
        nova.act("Select Sauce Labs Onesie")
        nova.act("Add Sauce Labs Onesie to the cart")
        
        # Cart verification
        nova.act("Click cart and Navigate to the cart page")
        nova.act("Verify 2 items are in the cart")
        
        # Checkout
        nova.act("Click the Checkout button")
        nova.act("Enter 'John' in the First Name field")
        nova.act("Enter 'Doe' in the Last Name field")
        nova.act("Enter '12345' in the Zip/Postal Code field")
        nova.act("Click the Continue button")
        
        # Order completion
        nova.act("Verify Checkout:Overview page appears")
        nova.act("Click the Finish button")
        nova.act("Verify 'THANK YOU FOR YOUR ORDER' appears on the page")
        
        # Logout
        nova.act("Click the Back Home button")
        nova.act("Click the hamburger menu on the left")
        nova.act("Click the Logout link")
        nova.act("Verify the user is on the login page")

Este teste abrangente valida autenticação, descoberta de produtos, adição ao carrinho, preenchimento de informações de envio, conclusão de pedido e logout—essencialmente, toda a experiência crítica do cliente.

Imagem original — fonte: Aws

Integração com Pipeline CI/CD

Configurando o GitLab CI/CD

O verdadeiro valor dos testes aparece quando são executados automaticamente em cada mudança de código. A integração com GitLab CI/CD transforma a execução manual em automação contínua:

stages:
  - test

smoke-tests:
  stage: test
  image: mcr.microsoft.com/playwright/python:v1.40.0-jammy
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_COMMIT_BRANCH == "develop"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_PIPELINE_SOURCE == "web"
  before_script:
    - pip install uv
    - uv sync
    - uv run playwright install chromium
  script:
    - uv run python smoke_tests.py
  variables:
    HEADLESS: 'true'
    NOVA_ACT_SKIP_PLAYWRIGHT_INSTALL: 'true'

Esta configuração define regras que acionam os testes automaticamente quando código é enviado para branches principais, durante solicitações de merge, ou quando disparados manualmente. O modo headless é ativado definindo HEADLESS: 'true', permitindo que testes rodem em ambiente sem interface gráfica.

As chaves de API são gerenciadas através de variáveis seguras do GitLab CI/CD. O processo envolve acessar Configurações > CI/CD > Variáveis, adicionar uma nova variável chamada NOVA_ACT_API_KEY, marcar a opção de mascarar o valor nos logs, e salvar. Essa abordagem mantém credenciais sensíveis criptografadas e acessíveis apenas ao pipeline.

Imagem original — fonte: Aws

Modo Headless para Ambientes Automatizados

A diferença entre modo headless e modo visual é crucial. Durante desenvolvimento local, a interface gráfica fornece feedback valioso para depuração. Em ambientes de CI/CD, browsers sem interface gráfica executam com eficiência sem overhead visual:

headless = os.getenv("HEADLESS", "false").lower() == "true"
with NovaAct(starting_page=SAUCEDEMO_URL, headless=headless) as nova:
    # test code

Quando a variável de ambiente não está definida durante desenvolvimento local, headless é False, abrindo a janela do browser. Em CI/CD, definir HEADLESS=true executa tudo em background, otimizando recursos computacionais.

Otimização através de Execução Paralela

Conforme a suite de testes cresce, execução sequencial cria gargalos. A solução implementa execução paralela usando ThreadPoolExecutor do Python:

from concurrent.futures import ThreadPoolExecutor, as_completed

def main():
    if not os.getenv("NOVA_ACT_API_KEY"):
        exit("❌ Set NOVA_ACT_API_KEY environment variable")
    
    print("🚀 Starting Nova Act Tests (Parallel)")
    tests = [
        ("Login Flow", test_login_flow),
        ("E-commerce Workflow", test_ecommerce_workflow)
    ]
    
    max_workers = int(os.getenv("MAX_WORKERS", "2"))
    
    results = []
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        future_to_test = {
            executor.submit(run_test, name, func): name 
            for name, func in tests
        }
        for future in as_completed(future_to_test):
            results.append(future.result())
    
    passed = sum(results)
    total = len(results)
    print(f"\n📊 Results: {passed}/{total} tests passed")
    
    if passed == total:
        print("🎉 All tests passed!")
    else:
        exit(1)

ThreadPoolExecutor gerencia um pool de threads de trabalho, permitindo múltiplas instâncias de browser executarem simultaneamente. Cada thread roda um teste separado, reduzindo significativamente o tempo total de execução. Com dois workers, testes que levariam 10 minutos sequencialmente podem executar em aproximadamente 5 minutos.

O número de workers é configurável através da variável de ambiente MAX_WORKERS. Começar com dois workers e ajustar com base na capacidade do ambiente é a prática recomendada. Cada instância paralela consome recursos significativos e incorre em uso de API, portanto, o equilíbrio entre velocidade e custos deve ser monitorado.

Práticas Recomendadas para Produção

A implementação robusta requer atenção a alguns princípios fundamentais:

  • Testes independentes: Cada teste deve funcionar corretamente independentemente da ordem de execução ou de outros testes rodando simultaneamente
  • Lógica de retry: Wrapping de funções de teste com try-catch e mecanismos de retry reduzem falhas causadas por problemas transitórios de rede
  • Timeouts apropriados: Configurar timeouts razoáveis no pipeline CI/CD previne travamentos indefinidos
  • Rotação de chaves: Implementar rotação de chaves de API a cada 90 dias mantém padrões de segurança
  • Monitoramento de performance: Rastrear tempos de execução ajuda identificar regressões de performance cedo

Após implementação e testes bem-sucedidos, é importante limpar recursos para evitar custos futuros. Isso inclui remover ou desabilitar pipelines não utilizados, rotacionar chaves API e revogar chaves não utilizadas, deletar repositórios de demonstração, e limpar credenciais armazenadas em cache.

Recursos Complementares

Para aprofundamento em tópicos relacionados, a AWS disponibiliza documentação adicional:

Conclusão

A implementação de testes de validação automatizados usando Amazon Nova Act em modo headless oferece uma alternativa moderna e eficiente aos frameworks tradicionais. A abordagem de linguagem natural reduz significativamente a manutenção comparada a frameworks baseados em seletores CSS. Combinada com gerenciamento moderno de pacotes como UV e integração nativa com GitLab CI/CD, essa solução fornece execução rápida e confiável de testes que escala com o fluxo de desenvolvimento.

O modelo apresentado não apenas detecta problemas antes deles atingirem produção, mas também fornece o feedback rápido que é essencial para implantação contínua confiante, mantendo padrões elevados de qualidade da aplicação. Equipes de desenvolvimento podem adaptar esse framework para cenários específicos de suas aplicações, estendendo-o com testes adicionais que correspondam a jornadas críticas de usuário únicas do seu negócio.

Fonte

Implement automated smoke testing using Amazon Nova Act headless mode (https://aws.amazon.com/blogs/machine-learning/implement-automated-smoke-testing-using-amazon-nova-act-headless-mode/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *