Cypress es el MEJOR FRAMEWORK DE AUTOMATION E2E actualmente! No hay rival! Además de que es el framework más amigable para aprender! Aunque no es el único E2E en el mercado, y tampoco es el más usado como sí lo es Selenium. Pero es el MÁS POPULAR!
Cypress es un Framework de Automatización de Next Generation construido para web modernas. Esto es im simple proyecto el cual puedes usarlo para comenzar tu viaje por la Galaxia de la Automatización!
Ahora el Directorio de UPEX Galaxy, será mucho más simple.
- Para la carpeta
Tests
:- Cada Suite de US, deberá ser guardado en una carpeta del Componente correspondiente del SUT (ej: ShoppingCart),
- y la nomenclatura de archivos cambia a ser más directa:
GX-<ID>-<NombreCortoDeLaStory>
como ejemplo: "GX-5-AgregarItemAlCart.cy.js".
- En cuanto a la carpeta
cucumber-tests
:- Tendrán una mejor distribución de arhcivos; por carpetas separadas: Todos los archivos
.feature
dentro de la carpeta "Gherkin" y los archivos.js
dentro de "stepDefinitions" como tiene que ser. - La Nomenclatura de éste tipo de prueba se mantiene igual al normal (la misma nomenclatura mencionada arriba).
- Tendrán una mejor distribución de arhcivos; por carpetas separadas: Todos los archivos
- Clona el Proyecto:
git clone https://github.com/upex-galaxy/L2-cypex-orange.git
- Instala todas las dependencias:
npm i
- (la letra
i
es deinstall
y--legacy-peer-deps
es para instalar diferentes dependencias necesarias)
- (la letra
- Para abrir la App de Cypress, corre el comando:
npm test
- también puede usar
npx cypress open
(ya que en Package.json tenemos la variable "test" como el "cypress open") para abrir Cypress!
- también puede usar
- Para correr pruebas y generar Reportes XML y HTML, ejecuta:
npm run file */**/<filename>
- donde la variable "file" es:
cypress run --browser chrome --reporter cypress-multi-reporters --reporter-options configFile=jsconfig.json --record --key {key} --spec
, cuyo atajo es para que podamos correr las pruebas de un directorio que especifiquemos, usando el navegador de Chrome, generando 1 Reporte XML para importar a Jira y otro para generar un hermoso html, y adicionalmente actualizar el Cypress Dashboard del Proyecto.
- donde la variable "file" es:
- Para generar el archivo JSON Cucumber y Reporte HTML,
- Primero Descarga el Formatter según tu OS:
- Luego mueve el archivo descargado a la carpeta
cucumber-formatter
de este proyecto en tu repositorio local - y Sigue estas instrucciones de instalación: github.com/cucumber/json-formatter
- Modifica el archivo:
.cypress-cucumber-preprocessorrc.json
, para cambiar el nombre del formatter:- Renombra:
cucumber-json-formatter.exe
porcucumber-json-formatter
si usas Linux o MacOs.
- Renombra:
- Luego podrás generar archivo JSON de Cucumber para Importar las Pruebas a Jira.
- Para poder generar archivos HTML de Cucumber luego de correr las pruebas, Ejecuta:
npm run report:cucumber
- donde la variable "report:cucumber" es igual a:
node ./cucumber-html-report.js
cuyo atajo es para generar el Reporte Cucumber index.html en la carpetareports/cucumber-html-report
para evaluar TODOS el Resultado de Prueba Cucumber.
- donde la variable "report:cucumber" es igual a:
- Para correr una REGRESIÓN y generar un solo Reporte HTML global, ejecuta:
Luego ejecuta estos comandos, uno por uno:
npm run regression:report
npm run report:json npm run report:html
- Gracias a esto se va a generar un único Reporte mochawesome HTML para evaluar TODOS los Resultados de Prueba de la Regresión.
- AHORA CON CYPRESS DASHBOARD, puedes ver todas las ejecuciones y resultados de prueba del proyecto! Visita: CYPRESS DASHBOARD
-
Perfecta Nomenclatura del nombre de Archivo de prueba: {GX-ID}-{StoryShortName}.{extensionFile} ej: GX-50-AgregarItemsAlCart.cy.js
-
Archivo de Prueba dentro del directorio correcto; dentro de la carpeta del Componente correspondiente, ejemplo:
cypress/e2e/Tests/ComponentName/GX-1-StoryTestSuite.cy.js
. -
Buen diseño del Test Suite elaborado (Esto implica que se vean bien el código en general, que al menos funcione).
-
Tener el Markdown de la US en la carpeta Test-Plan en su correspondiente carpeta Sprint, ejemplo:
cypress/test-plan/in-sprint/sprint-9/userStory.md
. Esto implica que cada vez que se trabaje en un Sprint nuevo, se debería crear la carpeta correspondiente "sprint-" + número del sprint, como se muestra en el ejemplo arriba. -
NO usar fixture como PageObjectModel sino como Data-Entry (es decir, no agarrar elementos Web por fixtures, sino usar el Fixture para iterar Data o reutilizar variables).
- Antes en GX se usaba Fixture como POM, porque era fácil de aprender, pero hoy en día las entrevistas técnicas piden PageObject Model de la manera tradicional, sin usar Commands (Los Commands se usan para hacer generar algoritmos para múltiples suites o para generar precondiciones repetitivas).
-
En caso de usar Fixtures: Chequear que el archivo ".json" esté dentro de la carpeta correspondiente al componente, ejemplo:
cypress/fixtures/data/example.json
. -
En caso de usar PageObjectModel: Chequear que el "Page.js" esté dentro de la carpeta "pages" en la de "support", ejemplo:
cypress/support/pages/example.Page.js
. -
En caso de usar Commands: Asegurarse de aplicarlo para crear pasos de Precondiciones o Scripts de Algoritmos complejos (NO USAR como Pasos de Acción, eso sería tarea para el POM).
-
En caso de usar el CI Pipeline: Usar únicamente el archivo predeterminado del proyecto "CI-buildTest.yml", y asegurarse de modificarlo correctamente (Solo cambiar el Path del Test Suite y el parámetro de Importación TX para Jira) y no borrar o cambiar nada más, que funcione y pase los Checks.
-
En caso de usar Cucumber: Chequear que el archivo Gherkin (.feature) y los StepDefinitions (.js) estén correctamente diseñados y que la Ejecución en CI funcione y pase los Checks.
Challenge L2: Si se realiza una tarea completa con POM, CI y Cucumber correctamente, es motivo para subir a Nivel 2 automáticamente mediante un Challenge (una nueva US asignada).
- Es obligatorio realizar TODO lo anterior declarado, pero adicionalmente:
- Tener MUCHO mejor código en los Scripts.
- Obligatoriamente, realizar:
- PageObjectModel
- Commands (en caso de Precondiciones)
- CI Pipeline
- En caso de ser necesario, realizar:
- Commands (por Algoritmos)
- Fixture (por Data entries)
- Variables de Entorno (Cypress.env)
- En caso especial (dependiendo de la US) se puede intentar aplicar:
- Cucumber
- Chequear que todas estas 4 tareas estén bien hechas.
-
Obligatoriamente, realizar todo lo que está correcto (L1 y L2), sin saltarse ninguna instrucción debida.
-
El código tiene que ser bueno, refinado, y con buenas prácticas; el Reviewer de los L3 es más estricto.
-
Elaborar un Plan de Prueba Funcional en caso de que la Historia de Usuario lo necesite. Agregar dicho archivo Markdown en el directorio de Planes de Pruebas. Posibles pruebas: - Integration Testing (API) - E2E Testing (API + UI) - Visual Testing (Applitools, Percy, etc.) - Database Testing (SQL)
-
Realizar o Actualizar un Plan de Prueba de Smoke, Sanity o Regression dependiendo de la tarea asignada como L3.
-
Crear un nuevo Pipeline de CI para ejecutar, importar a Jira y Generar Reporte HTML, para las pruebas de Smoke, Sanity o Regression dependiendo de la tarea asignada como L3
-
Libertad para aplicar nuevas estrategias o dependencias para la realización del Plan de Pruebas. Esto implica investigación de acuerdo a la realización de nuevas pruebas.
🚩ENTRA EN UPEX DOCUMENTATION Y BUSCA LAS GUÍAS DE CYPRESS AL GRANO!
- How to Install Cypress
- Understanding Cypress Folder Structure
- How to execute Cypress Tests using Test Runner and CLI
- Writing your First Test in Cypress
- How to use Fixtures in Cypress Tests
- How to use readFile() and writeFile() in Cypress
- How to interact with multiple elements using each()
- Conditional Testing (If Else) in Cypress
- How to upload a file in Cypress
- How to download a file in Cypress
- API Testing in Cypress
- How to chain Multiple APIs in Cypress
- Mock API Response in Cypress using cy.server() and cy.route()
- How to handle JS Alert, Confirm and Prompt in Cypress
- How to use Skip and Only in Cypress
- How to execute Cypress Tests in order
- How to handle Shadow DOM in Cypress
- How to retry tests X number of times in Cypress
- How to handle Iframes in Cypress
- How to generate HTML reports in Cypress
- How to Add Tags like Smoke,E2E to Cypress Tests
- Cypress Page Object with Locator Functions and Custom Commands
- Cypress Dashboard
- How to visually generate tests with no coding in Cypress Studio
- How to mock an API using cy.intercept()
- How to integrate cypress with cucumber
- How to hover over elements in Cypress
- How to perform Database Testing(SQL) in Cypress
- How to use parents(), parent() and children() commands in Cypress
- How to perform Drag and Drop on HTML and Angular sites with Cypress
- How to handle new browser tab and window in Cypress
- How to use filter(), find() and within() commands in Cypress
- Commonly used JQuery commands in Cypress
- How to do recursion in Cypress
- How to handle basic auth in Cypress
- Cypress 10 Upgrade