Pepino - Tags
Parece simple cuando solo tenemos uno, dos o quizás cinco escenarios en un archivo de características. Sin embargo, en la vida real no sucede. Para cada característica bajo prueba, podemos tener 10, 20 o más escenarios en un solo archivo de características. Pueden representar diferentes propósitos (Prueba de humo / Prueba de regresión), diferentes prospectos (Desarrollador / QA / BA), diferentes estados (Listo para ejecución / Trabajo en progreso), etc. ¿Cómo administrar la ejecución para tal masa?
Para ello, Cucumber ya ha proporcionado una forma de organizar la ejecución de su escenario mediante el uso de etiquetas en el archivo de características. Podemos definir cada escenario con una etiqueta útil. Más tarde, en el archivo del corredor, podemos decidir qué etiqueta específica (y por tanto, como escenario (s)) queremos que Cucumber ejecute. La etiqueta comienza con "@". Después de "@" puede tener cualquier texto relevante para definir su etiqueta. Entendamos esto con un ejemplo.
Supongamos que hay dos o más escenarios en un archivo de características. Queremos ejecutar solo un escenario como parte de la prueba de humo. Entonces, lo primero es identificar ese escenario y lo segundo es etiquetarlo con el texto "@SmokeTest" al comienzo del escenario. Echemos un vistazo profundo a esto:
Step 1 - Crea un proyecto Maven llamado cucumberTag.
Step 2- Crea un paquete llamado cucumberTag debajo src/test/java
Step 3- Cree un archivo de características llamado cucumberTag.feature.
Escriba el siguiente texto dentro del archivo y guárdelo. Este archivo de características contiene dos escenarios en los que solo uno se ha marcado comoSmokeTest etiqueta.
Feature - Etiqueta de pepino
Scenario Outline - Funcionalidad de inicio de sesión para un sitio de redes sociales.
El usuario dado navega a Facebook
Cuando ingreso el nombre de usuario como "<nombre de usuario>" y la contraseña como "<contraseña>"
Entonces el inicio de sesión no debería ser exitoso
Ejemplos
| username | password |
| username1 | password1 |
| username2 | password2 |
El siguiente escenario se ha etiquetado como SmokeTest y debería ejecutarse. @Prueba de humo
Scenario:
El usuario dado navega a Facebook
Cuando ingreso el nombre de usuario como "<>" y la contraseña como "<>"
Luego, el usuario debe ser redirigido para reintentar el inicio de sesión.
Step 4 - Cree un archivo de definición de pasos.
Seleccione y haga clic con el botón derecho en el esquema del paquete.
Haga clic en el archivo 'Nuevo'.
Asigne al archivo un nombre como cucumberTag.java
Escriba el siguiente texto dentro del archivo y guárdelo.
package cucumberTag;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
public class cucumberTag {
WebDriver driver = null;
@Given("^user navigates to facebook$")
public void goToFacebook() {
driver = new FirefoxDriver();
driver.navigate().to("https://www.facebook.com/");
}
@When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$")
public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
driver.findElement(By.id("email")).sendKeys(arg1);
driver.findElement(By.id("pass")).sendKeys(arg2);
driver.findElement(By.id("u_0_v")).click();
}
@Then("^login should be unsuccessful$")
public void validateRelogin() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
@Then("^User should be redirected to login retry$")
public void loginRetry() {
if(driver.getCurrentUrl().equalsIgnoreCase(
"https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
System.out.println("Test Pass");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
Step 5 - Crea un archivo de clase de corredor.
Crea una clase de corredor llamada runTest.java dentro del paquete.
Escribe el siguiente código.
Guarda el archivo.
package cucumberTag;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
Ejecute la opción de prueba.
Haga clic derecho y seleccione la opción ‘Run as’.
Seleccione prueba JUnit.
Observará las siguientes cosas cuando ejecute este archivo de clase.
Facebook se abre en una nueva instancia del navegador web Firefox.
No se proporcionará ningún valor al campo de nombre de usuario y contraseña.
Se hará clic en iniciar sesión.
Se cargará la página de reintento de inicio de sesión.
No hay límite para definir etiquetas dentro del archivo de características. Según sus necesidades, puede derivar las etiquetas que se utilizarán y los escenarios que se ejecutarán.
Existen principalmente dos tipos de etiquetas:
Default tag- La etiqueta predeterminada tiene sus significados predefinidos. Ejemplo @ Dev, @ Ignore
Custom tag - Etiqueta personalizada le brinda total flexibilidad para elegir el texto apropiado para definir su etiqueta.
La etiqueta también se puede definir a nivel de función. Una vez que define una etiqueta a nivel de característica, se asegura de que todos los escenarios dentro de ese archivo de característica hereden esa etiqueta. Dependiendo de la naturaleza del escenario, podemos usar más de una etiqueta para la característica única. Siempre que Cucumber encuentre una llamada adecuada, se ejecutará un escenario específico.
El pepino también proporciona una forma de invertir la elección de etiquetas. Considere que de 25 escenarios definidos, 10 están marcados como prueba de humo. Estamos obligados a ejecutar solo escenarios de prueba de regresión.
Para esto, podemos usar “~” en la clase de corredor JUnit para excluir el escenario de prueba de humo. Se verá así.
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"[email protected]"})
public class runTest { }
Al definir varias etiquetas, también podemos definir operaciones lógicas y / o lógicas.
Definición de lógica o en clase de corredor - @dev,@wip - Dice que es necesario ejecutar escenarios que coincidan con cualquiera de esta etiqueta.
Definición de lógica o en clase de corredor - [@dev,[email protected]] − Dice que es necesario ejecutar escenarios que coincidan con ambas etiquetas.