La automatización de pruebas ha revolucionado la forma en que desarrollamos y mantenemos software, proporcionando velocidad y precisión que simplemente no son posibles con las pruebas manuales. Sin embargo, cuando se trata de validar múltiples condiciones dentro de una prueba, el uso de aserciones tradicionales puede ser limitante. Aquí es donde entran en juego los soft asserts.
¿Qué son los Soft Asserts?
Los soft asserts o aserciones suaves son una técnica utilizada en la automatización de pruebas que permite que una prueba continúe su ejecución incluso después de que una aserción falle. A diferencia de las aserciones tradicionales (hard asserts), que detienen inmediatamente la ejecución de la prueba cuando una condición no se cumple, los soft asserts permiten que todas las aserciones se evalúen y reporten al final de la ejecución de la prueba.
Ventajas de los Soft Asserts
Identificación Completa de Errores: Una de las mayores ventajas de los soft asserts es que permiten identificar y reportar múltiples fallos dentro de una sola ejecución de prueba. Esto proporciona una visión más completa de los problemas que puedan existir en el código.
Mejora en el Análisis de Resultados: Al permitir que todas las aserciones se ejecuten, los soft asserts facilitan un análisis más profundo y detallado de los resultados de las pruebas. Esto es especialmente útil en entornos donde se ejecutan múltiples pruebas automatizadas de manera concurrente.
Aumento de la Eficiencia: Al no detener la ejecución de la prueba ante el primer fallo, se evita la necesidad de ejecutar la prueba múltiples veces para identificar todos los posibles errores. Esto resulta en una mayor eficiencia y ahorro de tiempo.
Reducción del Estrés: Para los desarrolladores y testers, trabajar con aserciones suaves reduce el estrés de tener que lidiar con pruebas que fallan constantemente. En lugar de enfrentarse a pruebas fallidas por un único error, pueden centrarse en corregir múltiples errores de una sola vez.
¿Cuándo Utilizar los Soft Asserts?
Los soft asserts son especialmente útiles en los siguientes escenarios:
Pruebas de Integración: Cuando se realizan pruebas de integración, es posible que quieras verificar múltiples aspectos de la integración sin detener la prueba en el primer fallo. Los soft asserts permiten validar todas las condiciones necesarias y reportar los resultados al final.
Pruebas de UI: En pruebas de interfaz de usuario, donde es crucial verificar varios elementos y condiciones, los soft asserts garantizan que todas las validaciones se realicen, proporcionando una visión completa de la experiencia del usuario.
Pruebas Complejas: En pruebas que involucran múltiples pasos o condiciones, los soft asserts aseguran que todas las condiciones sean evaluadas, facilitando la identificación de múltiples problemas en una sola ejecución.
Implementación de los Soft Asserts
Implementar soft asserts puede variar dependiendo de la herramienta o marco de trabajo que estés utilizando. Aquí tienes un ejemplo básico en Java con TestNG:
import org.testng.asserts.SoftAssert;
import org.testng.annotations.Test;
public class SoftAssertExample {
@Test
public void testSoftAsserts() {
SoftAssert softAssert = new SoftAssert();
System.out.println("Checking the first condition...");
softAssert.assertTrue(false, "First condition failed");
System.out.println("Checking the second condition...");
softAssert.assertEquals("actual", "expected", "Second condition failed");
System.out.println("All conditions checked.");
softAssert.assertAll(); // Report all failures at the end of the test
}
}
En este ejemplo, ambas condiciones son evaluadas y los resultados se reportan al final de la prueba, en lugar de detenerse en la primera falla.
En caso de estar usando SerenityBDD podemos usar softasserts de la siguiente manera:
theActorInTheSpotlight().should(
seeThat(Visibility.of(LocationInfoWindowView.LBL_STATUS_LASTREPORT), is(false)),
seeThat(Visibility.of(LocationInfoWindowView.LBL_LASTREPORT), is(false)));
Solo ten en cuenta importar las librerias que son:
import static net.serenitybdd.screenplay.GivenWhenThen.seeThat;
import static net.serenitybdd.screenplay.actors.OnStage.theActorInTheSpotlight;
import static org.hamcrest.CoreMatchers.*;
import net.serenitybdd.screenplay.questions.Visibility;
Los soft asserts son una herramienta poderosa en la automatización de pruebas, proporcionando flexibilidad y permitiendo un análisis más exhaustivo de los errores. Al incorporarlos en tus pruebas, puedes mejorar significativamente la eficiencia y efectividad de tus suites de pruebas.
Fuentes:
https://automatizaciondefuncionales.blogspot.com/2024/02/que-hacer-cuando-la-libreria-ensure-de.html
https://serenity-bdd.github.io/docs/screenplay/screenplay_ensure
https://github.com/serenity-bdd/serenity-screenplay-train-demo/blob/master/src/test/java/serenitylabs/tutorials/trains/features/steps/BuyTicketsStepDefinitions.java
https://serenity-bdd.info/docs/articles/soft-asserts.html