Documentação Técnica
O BP - LoadForge foi desenvolvido com uma filosofia "No-Boilerplate". Ao contrário de soluções baseadas em construtores visuais (No-Code), esta aplicação foi escrita 100% "à mão" para garantir performance máxima no navegador e controle total sobre a geração de scripts Python.
Esta documentação visa expor as decisões de arquitetura e trechos do código-fonte para fins de revisão técnica e auditoria.
Arquitetura
Utilizamos uma abordagem híbrida. A interface é uma SPA (Single Page Application) para reatividade instantânea, apoiada por um backend PHP leve apenas para persistência de dados.
Frontend Stack
- HTML5 Semântico
- Tailwind CSS (Styling)
- Alpine.js (Reatividade)
- Vanilla JS (Core Logic)
Backend Stack
- PHP 8.1+
- PDO (Database Abstraction)
- MySQL (Relational DB)
- REST API (JSON)
O Motor Gerador (Vanilla JS)
A geração do código Python não depende do servidor. Criamos um objeto `LocustGenerator` puro que recebe um JSON de configuração e compila a string final. Isso garante latência zero.
const LocustGenerator = {
generate(config) {
// Mapeia as tarefas visuais para funções Python decoradas
const tasksCode = config.tasks.map((task, index) => {
const method = task.method.toLowerCase();
return ` @task(${task.weight})
def task_${index + 1}(self):
self.client.${method}("${task.endpoint}")`;
}).join('\n\n');
// Retorna a classe completa do Locust
return `from locust import HttpUser, task, between
class LoadTestUser(HttpUser):
wait_time = between(${config.min_wait}, ${config.max_wait})
host = "${config.host}"
${tasksCode}`;
}
};
Segurança e Dados
Para a funcionalidade de "Compartilhamento de Link", optamos por não usar autenticação pesada. Em vez disso, geramos hashes únicos e usamos PDO com Prepared Statements para evitar SQL Injection, mesmo sendo uma ferramenta interna.
// Prevenção de SQL Injection via PDO
$stmt = $pdo->prepare("INSERT INTO scenarios (share_uuid, config_json) VALUES (:uuid, :json)");
try {
$stmt->execute([
':uuid' => $shortId, // ID gerado no backend (ex: aB3x9Z)
':json' => json_encode($input) // Payload validado
]);
// ...
} catch (PDOException $e) {
// Tratamento de erro silencioso para o cliente
error_log($e->getMessage());
}