From 8bbd89ba26e7b3d6265a1f3ce30b4e2ed74e7597 Mon Sep 17 00:00:00 2001
From: Javier <10879637+javiertuya@users.noreply.github.com>
Date: Sun, 29 Sep 2024 18:04:43 +0200
Subject: [PATCH] Add zerocode postdeploy test
---
.github/workflows/build.yml | 13 +++++--
README.md | 6 +++-
pom.xml | 6 ++++
.../descuento/st/TestPostDeployZerocode.java | 21 ++++++++++++
src/test/resources/zerocode.properties | 5 +++
.../resources/zerocode/zerocode-scenario.json | 34 +++++++++++++++++++
6 files changed, 82 insertions(+), 3 deletions(-)
create mode 100644 src/test/java/giis/demo/descuento/st/TestPostDeployZerocode.java
create mode 100644 src/test/resources/zerocode.properties
create mode 100644 src/test/resources/zerocode/zerocode-scenario.json
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 496d573..a6c3439 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -226,13 +226,20 @@ jobs:
done
#La configuracion para este test se hace con chrome headless contra la aplicacion desplegada
- - name: Test configuration
+ - name: Selenium web test configuration
run: |
echo "remote.web.driver.url=headless" > src/test/resources/selenium.properties
echo "application.url=https://${{ env.APP_NAME }}.azurewebsites.net" >> src/test/resources/selenium.properties
echo "application.port=" >> src/test/resources/selenium.properties
echo "*** Selenium properties:" && cat src/test/resources/selenium.properties
- #Ejecuta maven para los test test de sistema
+ - name: Zerocode api test configuration
+ run: |
+ echo "web.application.endpoint.host=https://${{ env.APP_NAME }}.azurewebsites.net" > src/test/resources/zerocode.properties
+ echo "web.application.endpoint.port=443" >> src/test/resources/zerocode.properties
+ echo "web.application.endpoint.context=" >> src/test/resources/zerocode.properties
+ echo "*** Zerocode properties:" && cat src/test/resources/zerocode.properties
+
+ #Ejecuta maven para los test de sistema
- name: Build and test
run: mvn test -Dtest=**/st/** -Dmaven.test.failure.ignore=false -U --no-transfer-progress
- name: Generate post deploy test checks
@@ -252,6 +259,8 @@ jobs:
path: |
target/site/junit*/
target/site/screenshot/
+ target/logs/
+ target/zerocode*.html
#Cada build crea una imagen en github packages, limpieza
- if: ${{ github.ref == 'refs/heads/main' }}
name: Cleanup main packages
diff --git a/README.md b/README.md
index 1402f92..a6f19b9 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ Este proyecto ilustra:
- Utilización de mocks
- Pruebas de servicios rest y controladores (MockMvc)
- Pruebas de un interfaz de usuario web con Selenium
+ - Pruebas del API con Zerocode
- Uso de lombok para generar automaticamente getters y setters de entidades y DTOs
- Automatización de pruebas BDD con JBehave (unitarias y de interfaz de usuario)
- Estructura de un proyecto maven y configuración del pom.xml:
@@ -39,7 +40,9 @@ Este proyecto ilustra:
- [rama main: producción](https://samples-test-spring-main.azurewebsites.net/)
- [otras ramas: preproducción/integración](https://samples-test-spring-develop.azurewebsites.net/)
- NOTA: el primer acceso a estos despliegues puede tardar bastantes segundos hasta que el container esté listo
- - Prueba Post-deploy de sistema (st) con selenium
+ - Prueba Post-deploy de sistema (st) con
+ [selenium](https://github.com/SeleniumHQ/selenium)
+ y [zerocode](https://github.com/authorjapps/zerocode)
- Ejemplo de despliegue en Heroku (obsoleto)
- Integración continua con Jenkins (para ejecución on-premise):
- Fichero Jenkinsfile con la configuración de la pipeline
@@ -74,4 +77,5 @@ La instalacion anterior compilará, ejecutará pruebas y dispondrá de los repor
- `site/screenshot`: Imagenes tomadas durante las pruebas web con Selenium
- `site/jacoco`: reports de cobertura de código.
- `target/jbehave`: reports estandar de jbehave
+- `target/zerocode-junit*.html`: reports estandar de zerocode
- `reports/testapidocs/index.html`: javadoc del proyecto (generados en la fase `package`)
diff --git a/pom.xml b/pom.xml
index fda265d..1c42633 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,6 +156,12 @@
test
+
+ org.jsmart
+ zerocode-tdd
+ 1.3.44
+
+
diff --git a/src/test/java/giis/demo/descuento/st/TestPostDeployZerocode.java b/src/test/java/giis/demo/descuento/st/TestPostDeployZerocode.java
new file mode 100644
index 0000000..9ec3a9a
--- /dev/null
+++ b/src/test/java/giis/demo/descuento/st/TestPostDeployZerocode.java
@@ -0,0 +1,21 @@
+package giis.demo.descuento.st;
+
+import org.jsmart.zerocode.core.domain.TargetEnv;
+import org.jsmart.zerocode.core.domain.TestPackageRoot;
+import org.jsmart.zerocode.core.runner.ZeroCodePackageRunner;
+import org.junit.runner.RunWith;
+
+/**
+ * Ejemplo de prueba del API fuera del entorno de Spring Boot con Zerocode
+ * (https://github.com/authorjapps/zerocode) que permite especificar escenarios
+ * de prueba en Json y ejecutarlos.
+ *
+ * Se ejecutara sobre la aplicacion desplegada en Azure desde el entorno CI
+ * (GitHub Actions). Para probar en local, lanzar el servidor desde
+ * src/main/java
+ */
+@TargetEnv("zerocode.properties") // configura direccion del host
+@TestPackageRoot("zerocode") // ejecuta todos los tests (.json o .yaml) en esta carpeta
+@RunWith(ZeroCodePackageRunner.class) // este runner buscara los test y los ejecutara
+public class TestPostDeployZerocode {
+}
diff --git a/src/test/resources/zerocode.properties b/src/test/resources/zerocode.properties
new file mode 100644
index 0000000..c35c5ee
--- /dev/null
+++ b/src/test/resources/zerocode.properties
@@ -0,0 +1,5 @@
+# Configuracion para ejecutar en local los tests especificados en json con zerocode
+# En CI estas propiedades se remplazaran por las de la aplicacion desplegada
+web.application.endpoint.host=http://localhost
+web.application.endpoint.port=8080
+web.application.endpoint.context=
diff --git a/src/test/resources/zerocode/zerocode-scenario.json b/src/test/resources/zerocode/zerocode-scenario.json
new file mode 100644
index 0000000..986c018
--- /dev/null
+++ b/src/test/resources/zerocode/zerocode-scenario.json
@@ -0,0 +1,34 @@
+{
+ "scenarioName": "Zerocode postdeploy test scenario",
+ "steps": [
+ {
+ "name": "Get and verify all discounts",
+ "url": "/api/descuentos",
+ "operation": "GET",
+ "request": { },
+ "assertions": {
+ "status": 200,
+ "body.SIZE": 3,
+ "body" : [
+ { "id" : 1, "descuento" : 15 },
+ { "id" : 2, "descuento" : 20 },
+ { "id" : 3, "descuento" : 10 }
+ ]
+ }
+ },
+ {
+ "name": "Get and verify filtered discounts",
+ "url": "/api/descuentos?edad=20",
+ "operation": "GET",
+ "request": { },
+ "assertions": {
+ "status": 200,
+ "body.SIZE": 2,
+ "body" : [
+ { "id" : 2, "descuento" : 20 },
+ { "id" : 3, "descuento" : 10 }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file