gremlins.js es una librería de monkey testing para aplicaciones web y Node.js que simula interacciones aleatorias de usuarios para detectar fallos.
Uso básico
Ejecución mediante CDN
<script src="https://cdn.jsdelivr.net/npm/gremlins/dist/gremlins.js"></script>
<script>
gremlins.createHorde().unleash();
</script>
Personalización de la horda
gremlins.createHorde()
.allGremlins()
.gremlin(function () {
// Acción personalizada ejecutada a intervalos regulares
document.activeElement.blur();
})
.unleash();
Ejemplo de configuración completa
gremlins.createHorde()
.gremlin(gremlins.species.formFiller())
.gremlin(gremlins.species.clicker()
.clickTypes(['click'])
.canClick(element => element.tagName !== 'A')
.showAction((x, y) => { /* Indicador visual de clic */ }))
.gremlin(gremlins.species.scroller())
.gremlin(gremlins.species.typer())
.mogwai(gremlins.mogwais.alert())
.mogwai(gremlins.mogwais.fps())
.mogwai(gremlins.mogwais.gizmo().maxErrors(2))
.unleash();
Ganchos del ciclo de vida (Lifecycle Hooks)
Before y After síncronos
gremlins.createHorde()
.before(function () {
this.log('Iniciando ejecución de monkey test');
console.profile('gremlins');
})
.after(function () {
this.log('Monkey testing finalizado');
console.profileEnd();
})
.unleash();
Ganchos asíncronos
gremlins.createHorde()
.before(function (done) {
setTimeout(() => {
this.log('Configuración asíncrona completada');
done();
}, 500);
})
.unleash();
Referencia de especies
Gremlins (Atacantes)
- formFiller: Rellena controles de formulario (input, textarea, select) con datos válidos aleatorios.
- clicker: Hace clics aleatorios en elementos activos de la vista.
- scroller: Desplaza la ventana en direcciones y distancias aleatorias.
- typer: Escribe teclas al azar en los campos de entrada activos.
- toucher: Genera gestos táctiles en pantallas táctiles.
Mogwais (Guardianes)
- alert: Intercepta y registra llamadas a
window.alert. - fps: Monitoriza la tasa de fotogramas por segundo (FPS) y alerta ante caídas.
- gizmo: Detiene la ejecución si el recuento de errores de JavaScript supera el límite fijado.