Índice de contenidos
- 1. Introducción
- 2. Entorno
- 3. Preparar el proyecto
- 4. El primer Test
- 5. Generar el reporte
- 6. Conclusiones
- 7. Referencias
1. Introducción
Serenity es una herramienta que nos facilita hacer BDD centralizando los test de nuestra aplicación.
El reporte generado nos indica el estado funcional de nuestra aplicación con gran detalle y sirve también como documentación viva.
Nos ofrece muchas posibilidades, pero en este tutorial nos vamos a centrar en un reporte con Cucumber para la definición de escenarios y su implementación.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7, 16GB DDR3).
- Sistema Operativo: Mac OS Sierra
- Entorno de desarrollo: Intellij Idea CE
- Java 1.8
- Apache Maven 3.5.0
3. Preparar el proyecto
Vamos a usar Serenity con Cucumber. Para ello, incluimos la dependencia de Serenity-cucumber. Si veis las dependencias, incluye el core de serenity.
pom.xml
<dependencies> <dependency> <groupId>net.serenity-bdd</groupId> <artifactId>serenity-cucumber</artifactId> <version>1.6.4</version> </dependency> </dependencies>
También incluimos el failsafe plugin para que ejecute los test en la fase de verificación y el plugin de serenity para generar el reporte en la fase justo después de ejecutar los tests (post-integration-tests).
<plugins> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.19.1</version> <configuration> <includes> <include>RunTest.java</include> </includes> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>net.serenity-bdd.maven.plugins</groupId> <artifactId>serenity-maven-plugin</artifactId> <version>1.7.2</version> <executions> <execution> <id>serenity-reports</id> <phase>post-integration-test</phase> <goals> <goal>aggregate</goal> </goals> </execution> </executions> </plugin> </plugins>
Serenity incluye un fichero de propiedades llamado serenity.properties y que incluimos en el raíz de nuestro proyecto.
En él podemos definir muchas variables que utiliza serenity y agregar nuestras propiedades.
Podéis consultar todas las que existen
aquí.
Como ejemplo, vamos a incluir el título del reporte:
4. Declaración de un escenario con Cucumber
Creamos un fichero con extensión .feature en los resources de la parte de test del proyecto maven y describimos un escenario:
Creamos la clase que implemente los pasos del escenario.
public class MyFirstScenario { @Given("^some context$") public void user() throws Throwable { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @When("^some action is carried out$") public void navigatesTo(String url) throws Throwable { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Then("^a particular set of observable consequences should obtain$") public void mainPageIsDisplayed() throws Throwable { // Write code here that turns the phrase above into concrete actions throw new PendingException(); }
- Creamos el runner que va a ejectuar los tests:
import cucumber.api.CucumberOptions; import net.serenitybdd.cucumber.CucumberWithSerenity; import org.junit.runner.RunWith; @RunWith(CucumberWithSerenity.class) @CucumberOptions("src/test/resources/MyFirstFeature.feature") public class RunTest { }
@RunWith(CucumberWithSerenity.class) @CucumberOptions(features = {"src/test/resources/myWorkingFeatures", "src/test/resources/myPendingFeatures"}) public class RunTest { }
@RunWith(CucumberWithSerenity.class) @CucumberOptions(features = {"src/test/resources/myWorkingFeatures/frist.feature", "src/test/resources/myPendingFeatures/second.feature"}) public class RunTest { }
Los test definidos en este runner se pueden ejecutar desde la misma clase:
5. Generar el reporte
Nota:Todo el código de ejemplo generado para mostrar estos test, lo podéis consultar en github.
Anteriormente, en el tercer paso, incluimos un RunTest.java, que es el runner que acabamos de definir, para ser ejecutado como test de integración.
Al invocar «mvn verify», ejecutará el runner y generará el reporte de serenity.
Por defecto lo crea en target/site/serenity.
Ahí genera el fichero index.html que contiene el reporte.
En este ejemplo hemos definido varios escenarios de como cenan los niños pequeños según sus gustos o sus capacidades. Pulsando en cada test, se ve en detalle la ejecución de cada test.
Por ejemplo, vemos que Sofía cuando cena pescado con patatas, parece que no le gusta demasiado.
O Jorge, que la leche con cereales no deja nada, le encanta.
Aunque parece que todavía no es su momento para tomar tortilla, y hay un compromiso de hacerlo próximamente:
6. Conclusiones
Serenity nos ayuda a implementar los escenarios y tener un reporte del estado de nuestra aplicación. Tiene una buena integración con cucumber y es bastante sencilla tanto la configuración inicial como la implementación.
Esto es sólo el principio, iremos conociendo qué otras posibilidades nos ofrece Serenity.
Hola:
Muy buen tutorial de Serenity.
Se agradece!!!
Por otro lado, en el Runner no estás definiendo el plugin, además que la clase misma del Runner la estás dejando vacía. No implementaste, aparte, una clase Hooks?
Buenas tarde pregunta, cuando ejecuto me sale este erro:
[ERROR] Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:3.1: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.1 from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
He echo de todo pero no e podido sulucionarlo
Muchas gracias por el tutorial, pero cuando consulto el reporte que genera serenity, toma muy pocas imágenes y necesito que se tome mas imágenes ya que esta es la evidencia del funcionamiento.
Como hago para aumentar la toma de imágenes?
Hola Leidy. Gracias por tu comentario.
Es parte de configuración de cada STEP. Puedes consultar la documentación y su funcionamiento en el siguiente enlance.
https://github.com/serenity-bdd/serenity-documentation/blob/master/src/asciidoc/screenshots.adoc
Espero que sirva de ayuda.
Un saludo.
Hola Santiago
como ejecuto este paso «Al invocar «mvn verify»» ya que a mi no me aparece el index.html sino con una cadena de caracteres como nombre y mi reporte sale muy simple, sin la grafica de torta.
Gracias
Hola Andrés,
el index.html se encuentra en el target que genera el artefacto en tu espacio de trabajo. Si usas IntelliJ puedes buscarlo dentro del target y en tu navegador aparecerá una url similar a la siguiente.
http://localhost:63342/yourprohectname/target/site/serenity/index.html
Este cogerá las clases de estilo y lo mostrará correctamente.
Espero que sirva de ayuda.
Un saludo.
hola Como puedo incorporar las librerias de serenity a mi maven ya creado?
Saludos
Hola Víctor.
Con agregar la dependencia en tu pom
net.serenity-bdd
serenity-cucumber
y el plugin para ejecutar
net.serenity-bdd.maven.plugins
serenity-maven-plugin
Debería ser suficiente.
Puedes consultar el código de ejemplo de la sección de 7.Referencias si te quedan dudas.
Un saludo.
Hola,
He implementado un TC con cucumber y me funciona perfectamente pero no me reporta nada de los results.
He puesto las librerias tal y como indicas pero no me aparece el html con el resumen.Que puede estar pasando?
Saludos
Hola. Para que genere el html con las respuestas de tu test de cucumber tendrás que revisar que en el paso 5 no se te haya escapado nada. Si te queda alguna duda, visita el código fuente https://github.com/stoledano/serenity-cucumber-bdd por si te ayuda a detectar el problema.
Gracias por el tutorial,
Una pregunta, existe alguna forma de descargar el informe que se genera en otro formato que no sea html? (PDF, doc, etc)
Hola John. Están trabajando en ello. Puedes seguir las últimas actualizaciones en https://serenity-bdd.github.io/theserenitybook/latest/extended-reports.html
Un saludo.