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