6.4.1 Sistema de Testing Automático
Implementación de pruebas automáticas de verificación:
#include "ArduinoJson.h"
struct TestResultado {
String nombre_test;
bool resultado;
float valor_medido;
float valor_esperado;
float tolerancia;
String mensaje;
};
void ejecutarTestsAutomaticos() {
Serial.println("=== Ejecutando Tests Automáticos ===");
TestResultado tests[5];
int total_tests = 5;
int tests_exitosos = 0;
// Ejecutar tests
tests[0] = testPotenciaTransmision();
tests[1] = testSensibilidadRecepcion();
tests[2] = testFrecuenciaCentral();
tests[3] = testAnchoBanda();
tests[4] = testConectividad();
// Mostrar resultados
for (int i = 0; i < total_tests; i++) {
Serial.printf("Test %d: %s - %s\n", i+1, tests[i].nombre_test.c_str(),
tests[i].resultado ? "PASS" : "FAIL");
Serial.printf(" Medido: %.2f, Esperado: %.2f, Tolerancia: %.2f\n",
tests[i].valor_medido, tests[i].valor_esperado, tests[i].tolerancia);
Serial.printf(" Mensaje: %s\n", tests[i].mensaje.c_str());
if (tests[i].resultado) {
tests_exitosos++;
}
}
// Resumen
Serial.printf("\nResumen: %d/%d tests exitosos\n", tests_exitosos, total_tests);
if (tests_exitosos == total_tests) {
Serial.println("ESTADO: Todos los tests pasaron");
} else {
Serial.println("ESTADO: Algunos tests fallaron");
generarReporteFallas(tests, total_tests);
}
}
TestResultado testPotenciaTransmision() {
TestResultado test;
test.nombre_test = "Potencia de Transmisión";
test.valor_esperado = 20.0; // dBm
test.tolerancia = 1.0; // dB
// Medir potencia
test.valor_medido = medirPotenciaTransmision();
// Evaluar resultado
float error = abs(test.valor_medido - test.valor_esperado);
test.resultado = (error <= test.tolerancia);
if (test.resultado) {
test.mensaje = "Potencia dentro de tolerancia";
} else {
test.mensaje = "Potencia fuera de tolerancia";
}
return test;
}
TestResultado testSensibilidadRecepcion() {
TestResultado test;
test.nombre_test = "Sensibilidad de Recepción";
test.valor_esperado = -90.0; // dBm
test.tolerancia = 3.0; // dB
// Medir sensibilidad
test.valor_medido = medirSensibilidadRecepcion();
// Evaluar resultado
float error = abs(test.valor_medido - test.valor_esperado);
test.resultado = (error <= test.tolerancia);
if (test.resultado) {
test.mensaje = "Sensibilidad dentro de tolerancia";
} else {
test.mensaje = "Sensibilidad fuera de tolerancia";
}
return test;
}
TestResultado testFrecuenciaCentral() {
TestResultado test;
test.nombre_test = "Frecuencia Central";
test.valor_esperado = 2437.0; // MHz
test.tolerancia = 0.1; // MHz
// Medir frecuencia
test.valor_medido = medirFrecuenciaCentral();
// Evaluar resultado
float error = abs(test.valor_medido - test.valor_esperado);
test.resultado = (error <= test.tolerancia);
if (test.resultado) {
test.mensaje = "Frecuencia dentro de tolerancia";
} else {
test.mensaje = "Frecuencia fuera de tolerancia";
}
return test;
}
TestResultado testAnchoBanda() {
TestResultado test;
test.nombre_test = "Ancho de Banda";
test.valor_esperado = 20.0; // MHz
test.tolerancia = 1.0; // MHz
// Medir ancho de banda
test.valor_medido = medirAnchoBanda();
// Evaluar resultado
float error = abs(test.valor_medido - test.valor_esperado);
test.resultado = (error <= test.tolerancia);
if (test.resultado) {
test.mensaje = "Ancho de banda dentro de tolerancia";
} else {
test.mensaje = "Ancho de banda fuera de tolerancia";
}
return test;
}
TestResultado testConectividad() {
TestResultado test;
test.nombre_test = "Conectividad";
test.valor_esperado = 1.0; // Conectado
test.tolerancia = 0.0; // Exacto
// Verificar conectividad
test.valor_medido = (WiFi.status() == WL_CONNECTED) ? 1.0 : 0.0;
// Evaluar resultado
test.resultado = (test.valor_medido == test.valor_esperado);
if (test.resultado) {
test.mensaje = "Conectividad OK";
} else {
test.mensaje = "Conectividad fallida";
}
return test;
}
float medirFrecuenciaCentral() {
// Simulación de medición de frecuencia central
return 2437.0; // MHz
}
float medirAnchoBanda() {
// Simulación de medición de ancho de banda
return 20.0; // MHz
}
void generarReporteFallas(TestResultado* tests, int total) {
Serial.println("=== Reporte de Fallas ===");
for (int i = 0; i < total; i++) {
if (!tests[i].resultado) {
Serial.printf("FALLA: %s\n", tests[i].nombre_test.c_str());
Serial.printf(" Motivo: %s\n", tests[i].mensaje.c_str());
Serial.printf(" Valor medido: %.2f\n", tests[i].valor_medido);
Serial.printf(" Valor esperado: %.2f\n", tests[i].valor_esperado);
Serial.printf(" Tolerancia: %.2f\n", tests[i].tolerancia);
}
}
}