Primeros Pasos con Serenity y Cucumber

12
35321

Índice de contenidos

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:
  • @RunWith : el runner de cucumber con serenity
  • @CucumberOptions: es propio de cucumber. Tiene varias opciones de configuración, pero sólo necesitamos asociarle la ruta de las features. Pueden ser más de una feature o carpetas:
  • 
        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.

    7. Referencias

    12 COMENTARIOS

    1. 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?

    2. 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

    3. 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?

    4. 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 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.

    5. 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

    6. 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)

    DEJA UNA RESPUESTA

    Por favor ingrese su comentario!

    He leído y acepto la política de privacidad

    Por favor ingrese su nombre aquí

    Información básica acerca de la protección de datos

    • Responsable:
    • Finalidad:
    • Legitimación:
    • Destinatarios:
    • Derechos:
    • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad