1. Evaluación de Herramientas de IA para Generación de Pruebas
Actualmente se cuenta con una versión paga de Copilot en github, lo que permite utilizar esta IA en el desarrollo de código desde visual studio code. Es por esto que se realizaran las pruebas directamente con esta herramienta.
2. Demostración: Generación de un Test con GitHub Copilot
Escenario: Pruebas E2E en formulario de inicio de sesión (login)
Objetivo del Test: Verificar que el formulario muestra un error validando los campos y luego redirija a la página del home si todos los datos están correctos.
Paso a Paso con Copilot:
Escribir un comentario descriptivo en el archivo de pruebas:Copy
Generar test E2E en cypress, para validar el formulario de un login, que las pruebas primero realicen pruebas de validacion de campos y por ultimo que realice la accion/comportamiento esperado y que al validar los campos y los datos redirija al home, para este ejemplo usa data mockiada.
GitHub Copilot sugiere automáticamente el siguiente código (Cypress):y
describe('Login Page Tests', () => { beforeEach(() => { cy.visit('/login'); }); it('should login successfully with correct credentials', () => { cy.get('input[name="email"]').type('validemail@example.com'); cy.get('input[name="password"]').type('validpassword'); cy.get('form').submit(); cy.url().should('include', '/lender/Home'); }); it('should show error message with incorrect credentials', () => { cy.get('input[name="email"]').type('invalidemail@example.com'); cy.get('input[name="password"]').type('invalidpassword'); cy.get('form').submit(); cy.get('[data-cy="error-message"]').should('be.visible'); }); it('should show error message when email is missing', () => { cy.get('input[name="password"]').type('validpassword'); cy.get('form').submit(); cy.get('[data-cy="error-message"]').should('be.visible'); }); it('should show error message when password is missing', () => { cy.get('input[name="email"]').type('validemail@example.com'); cy.get('form').submit(); cy.get('[data-cy="error-message"]').should('be.visible'); }); it('should show MFA code modal when MFA is required', () => { cy.intercept('POST', '/api/authenticate', { statusCode: 200, body: { nextStep: 'CONFIRM_SIGN_IN_WITH_TOTP_CODE' }, }).as('authenticate'); cy.get('input[name="email"]').type('mfaemail@example.com'); cy.get('input[name="password"]').type('mfapassword'); cy.get('form').submit(); cy.wait('@authenticate'); cy.get('[data-cy="mfa-modal"]').should('be.visible'); }); it('should redirect to new password page when new password is required', () => { cy.intercept('POST', '/api/authenticate', { statusCode: 200, body: { nextStep: 'CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED' }, }).as('authenticate'); cy.get('input[name="email"]').type('newpasswordemail@example.com'); cy.get('input[name="password"]').type('newpassword'); cy.get('form').submit(); cy.wait('@authenticate'); cy.url().should('include', '/Activate-Account/lender'); }); });Resultado: Inicialmente no es el resultado esperado, el código requiere personalizar algunos componentes y agregar la data de prueba para cada caso.
3. Análisis de Integración con el Framework Actual
Suposición: Framework de testing actual es Cypress + React.
Aspecto | Evaluación |
|---|---|
Compatibilidad | Copilot funciona en cualquier IDE (VS Code, JetBrains) y genera código compatible con Cypress. |
Calidad del Código |
|
Dependencias | No requiere instalación adicional si ya se usa Cypress. |
Personalización | Requiere ajustar prompts para alinearse con estándares del equipo (ej: usar Page Objects). |
4. Conclusiones
Ventajas de Usar IA para Pruebas:
Rapidez: Reduce tiempo de escritura de tests repetitivos (ej: formularios).
Mantenimiento: Fácil de modificar y agregar nuevos test.
Riesgos:
Falsa seguridad: La IA puede generar tests que pasan pero no validan lógica crítica.
Deuda técnica: Código generado sin seguir estándares del equipo.
Falta de adaptabilidad a los componentes usados.
Recomendaciones:
Usar GitHub Copilot como asistente, no como reemplazo de creación de test.
Combinar con pruebas manuales para casos críticos (ej: flujos de pago).
