Skip to content

ewertonapolonio/testagent

Repository files navigation

Sistema de Geração Automática de Testes Unitários

Este sistema utiliza o agente do StackSpot para gerar automaticamente testes unitários para arquivos Swift de qualquer projeto iOS.

📁 Estrutura de Arquivos

stktest/
├── createtests.py          # Script principal para gerar testes
├── helpers.py              # Funções auxiliares (autenticação, requests, etc.)
├── agent_prompt.md         # Prompt detalhado para o agente do StackSpot
└── README.md              # Este arquivo

🚀 Como Usar

1. Configuração do Ambiente Virtual

cd stktest

# Criar ambiente virtual (apenas na primeira vez)
python3 -m venv venv

# Ativar ambiente virtual e instalar dependências
source venv/bin/activate
pip install -r requirements.txt

Ou use o script de ativação:

./activate.sh

2. Configuração do Agente no StackSpot

  1. Acesse o painel do StackSpot
  2. Configure o agente com o prompt contido em agent_prompt.md
  3. Anote as credenciais (client_id, client_secret e agent_id)

3. Configuração das Credenciais

# Copie o template de ambiente
cp env_template.txt .env

# Edite o arquivo .env com suas credenciais reais
nano .env

Preencha as seguintes variáveis no arquivo .env:

# Configurações do Projeto
PROJECT_NAME=MeuProjeto
SOURCES_PATH=../src
TESTS_PATH=./tests
MAX_FILES_PER_RUN=3

# Credenciais do StackSpot
STACKSPOT_CLIENT_ID=seu_client_id_aqui
STACKSPOT_CLIENT_SECRET=seu_client_secret_aqui
STACKSPOT_AGENT_ID=seu_agent_id_aqui

4. Execução

# Ativar ambiente virtual (se não estiver ativo)
source venv/bin/activate

# Executar o script
python3 createtests.py

⚙️ Funcionalidades

✅ O que o sistema faz:

  • Analisa apenas classes: Filtra arquivos que contêm classes (não protocolos, enums ou structs simples)
  • Verifica arquivos existentes: Não sobrescreve testes que já existem
  • Estrutura de pastas: Mantém a mesma estrutura de pastas do código fonte
  • Geração de mocks: Cria mocks necessários para dependências externas
  • Estatísticas detalhadas: Mostra relatório completo do processo

🚫 O que o sistema NÃO faz:

  • Não cria testes para protocolos
  • Não cria testes para enums simples
  • Não cria testes para structs sem lógica de negócio
  • Não sobrescreve arquivos de teste existentes
  • Não cria testes para arquivos do sistema (AppDelegate, SceneDelegate, etc.)

📊 Exemplo de Saída

Iniciando análise de arquivos Swift...
⏭️  Pulando arquivo: AppDelegate.swift (arquivo do sistema)
⏭️  Pulando arquivo: Category.swift (não contém classes)
🧪 Criando arquivo de teste para: ./projeto/Network/Network.swift
📄 Arquivo de mock criado: ./tests/mocks/Network/MockNetworkClient.swift
✅ Arquivo de teste criado: ./tests/Network/NetworkTests.swift
⏭️  Teste já existe para: UserService.swift

==================================================
📊 RESUMO DO PROCESSO:
📁 Total de arquivos Swift analisados: 25
🏗️  Arquivos com classes encontrados: 12
✅ Testes criados: 8
⏭️  Testes pulados (já existiam): 4
==================================================
🎉 Processo concluído!

🔒 Segurança

Proteção de Credenciais

  • Arquivo .env: Credenciais são carregadas de variáveis de ambiente
  • Gitignore: Arquivo .env não é commitado no repositório
  • Template: Use env_template.txt como base para criar seu .env
  • Validação: Script verifica se as variáveis estão configuradas

Dados Sensíveis Identificados

  • STACKSPOT_CLIENT_ID: ID do cliente StackSpot
  • STACKSPOT_CLIENT_SECRET: Chave secreta do cliente
  • STACKSPOT_AGENT_ID: ID do agente configurado

🔧 Configurações Avançadas

Proxy (Opcional)

Para usar proxy corporativo, edite helpers.py:

USE_PROXY = True  # Altera de False para True

O sistema automaticamente obterá as credenciais do keychain do macOS.

Arquivos a Pular

Para adicionar mais arquivos que devem ser ignorados, edite a função should_skip_file() em createtests.py:

skip_files = [
    'AppDelegate.swift',
    'SceneDelegate.swift',
    'Info.plist',
    'SeuArquivo.swift'  # Adicione aqui
]

📝 Estrutura dos Testes Gerados

Os testes seguem as melhores práticas do iOS/Swift:

  • Framework: XCTest
  • Estrutura: setUp/tearDown
  • Nomenclatura: testMethodName_WhenCondition_ShouldReturnExpectedResult
  • Mocks: Protocol-based mocking
  • Cobertura: Métodos públicos, cenários de sucesso/falha, edge cases

🐛 Solução de Problemas

Erro de Autenticação

  • Verifique se as credenciais do StackSpot estão corretas
  • Confirme se o agente está ativo no painel

Erro de JSON

  • O agente pode retornar resposta inválida
  • Verifique o prompt configurado no StackSpot
  • Execute novamente para arquivos específicos

Arquivos não encontrados

  • Verifique se o caminho sources_path está correto
  • Confirme se a pasta de código fonte existe

📋 Requisitos

Sistema

  • Python 3.6+
  • macOS (para keychain, se usar proxy)
  • Acesso ao StackSpot

Pacotes Python

  • requests>=2.28.0 - Para requisições HTTP
  • keyring>=23.0.0 - Para gerenciamento de credenciais
  • pandas>=1.5.0 - Para processamento de dados
  • openpyxl>=3.0.0 - Para leitura de arquivos Excel

Instalação Automática

Todos os pacotes são instalados automaticamente com:

pip install -r requirements.txt

🤝 Contribuição

Para melhorar o sistema:

  1. Adicione novos padrões de detecção de classes
  2. Melhore o prompt do agente
  3. Adicione mais validações
  4. Implemente testes para o próprio sistema

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published