SerenityBDD - Almacenar valores en memoria (pasar información entre steps)

Buenas lectores.

En algunas ocasiones nos encontramos con la necesidad de almacenar algún valor para luego ser usado en otro sitio, algunos ejemplos son:

  • Pasar información entre clases
  • Persistir valores 
  • Pasar información entre los steps 

Cabe aclarar que existen muchas formas de solucionar esta necesidad, sin embargo, hoy la idea es ligarnos directamente al framework de SerenityBDD. Para esto tenemos dos formas más comunes de hacelo.


1. Usando variables globales

Primero almacenamos el valor que necesitamos en la memoria de Serenity, esto aplica para cualquier valor, es decir, variables (String, int, boolean), clases, listas etc...


Almacenar el valor:

Serenity.setSessionVariable("User Name").to("Jane");

Explicación de la sintaxis:

Serenity.setSessionVariable : Invoca la sesión para almacenar

("User Name") : Define el nombre de la asignación 


Extraer el valor:

Lo unico que resta es traer el valor por medio del identificador 

String currentUserName = Serenity.sessionVariableCalled("User Name");

Explicación de la sintaxis:

Serenity.sessionVariableCalled("User Name") : Trae el valor que tengamos como referencia "User Name", en este caso traera el valor Jane que le enviamos.


2. Usando el patron screenplay

Si estamos usando SerenityBDD muy probablemente estemos trabajando sobre el patron screenplay, para que nuestro código siga siendo legible y acorde a la metodología podemos implementar algunas soluciones como las siguientes:

2.1 Sin crear el stage

private String noteKey = "stickerLocation";

private String stickerImage = "sticker_a.png";

actor.remember(noteKey, locationOf(getImageData(stickerImage)));

actor.should(seeThat(

          locationOf(getImageData(stickerImage)),equalTo(actor.recall(noteKey))))


2.2 Creando el stage

Agregamos la creación del stage a nuestro step y/o a nuestros hooks


@Before

public void SetTheStage(){

     OnStage.setTheStage(new OnlineCast());

}

Luego ejecutamos lo mismo que en el punto 2.1

theActorInTheSpotlight().remember("","")


Y finalmente invocamos nuestro valor:

String valueRecall = theActorInTheSpotlight().recall("","");


Conclusiones

Como se puede observar es facil persistir información sobre el mismo framework sin llegar a usar otras formas como la inyección de dependecias permitiendo mantener un nivel de código no tan complejo y siguiendo con el patron de diseño.


Fuentes:

https://johnfergusonsmart.com/sharing-state-steps-serenity-bdd/

https://www.tabnine.com/code/java/classes/net.serenitybdd.screenplay.Actor

https://www.youtube.com/watch?v=CTU5ByCKqiY

Comentarios

Entradas populares de este blog

Tiempo de espera "muerto" explicito en Playwright

Como tener un condicional en Playwright en caso que siga aun presente un elemento