martes, 15 de abril de 2025

Que hacer cuando la librería Ensure de serenitybdd te comienza a molestar

 Buenas lectores.

Me he encontrado con casos particulares usando la librería Ensure en el IDE de IntelliJ, es posible que se presente en cualquier otro IDE por consiguiente antes de investigar la razón mejor hice una migración al assert para no tener problemas a futuro.

Podemos tener algo así:

jadcode.attemptsTo( Ensure.that(ElementLocated.by("#firstName")) .isDisplayed());


Lo podemos cambiar por lo siguiente:

theActorInTheSpotlight().should(

seeThat(Visibility.of(LocationForm.FIRST_NAME), is(true)));


Si quedamos que no este visible y usando softasserts, sería de la siguiente forma:


theActorInTheSpotlight().should(

seeThat(Visibility.of(LocationInfoWindowView.LBL_STATUS_LASTREPORT), is(false)),

seeThat(Visibility.of(LocationInfoWindowView.LBL_LASTREPORT), is(false)));


Se puede observar que migramos el código a una forma común que todo IDE puede interpretar, sin embargo quieres una solución sin hacer los asserts manuales simplemente actualiza el IDE, con eso funciona.

En caso que te guste mi solución, recuerda agregar las librerias y las importaciones:

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;


Saludos.


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/02/que-hacer-cuando-la-libreria-ensure-de.html

Ejecutar un proyecto de Jmeter que usa Kafka desde azure devops

Buenas lectores.

Existen varias maneras de ejecutar Jmeter desde azure, sea integrado, sea como tarea para descargarlo, sea como maven, en fin, todo depende de tu necesidad. El problema es cuando usamos librerias que no están incluidas normalmente en Jmeter, aquí se nos dificulta un poco nuestra tarea de ejecutar nuestros scritps.

De momento no existe una manera optima de realizar el proceso, es decir, puedes simplemente agregando en tu pipeline la opción que descargue Jmeter y luego copias tus librerias a la carpeta de lib/ext , sin  embargo el proceso de descarga es lento , yo opté por tener todo versionado usando una versión fija y estandarizada para los procesos internos, así evito en el mismo pipeline problemas de descarga y configuraciones que siempre van a ser las mismas. La contra es que el proyecto se vuelve más pesado y demasiado estático, sin embargo, en mi caso es la más optima.

Los pasos son sencillos:

1- Subo el proyecto a azure repos, si no lo sabes hacer ya tengo un post relacionado con eso.

2- Creo un pipeline y le agrego una tarea cmd, en la línea de comandos ingresamos lo siguiente:

jmeter -n -t "$(Build.SourcesDirectory)/bin/projects/Trip/Genertor_Trip.jmx"

3- Ejecutamos

El archivo yml quedaría de la siguiente manera:

steps:

- script: 'jmeter -n -t "$(Build.SourcesDirectory)/bin/projects/Recorrido_Diario/Generar_Recorrido.jmx"'

  workingDirectory: bin

  displayName: 'Generate_Report'

Cabe anotar que le estamos diciendo que el workingDirectory sea el bin, esto para poder ejecutar directamente con la palabra jmeter, tu lo puedes configurar a tu antojo.

Adicional te dejo muchas fuentes para que pases una tarde entretenida resolviendo dudas que te vayan resultado.


Cordial saludo


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/02/ejecutar-un-proyecto-de-jmeter-que-usa.html

jueves, 13 de febrero de 2025

Soft Asserts: La Clave para una Automatización de Pruebas Más Flexible y Robusta

 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

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

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

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

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

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

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

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


Extensiones de chrome para testers

Buenas lectores.

Existen muchas extensiones que brindan utilidad al momento de realizar pruebas de software, sin embargo, esta lista es de las más indispensables en tu cajon de trucos

Fake Data - Un form filler que te ayudará a encontrár más

Funcionalidad: Inserta datos aleatorios en cualquier campo de formulario.

Pasos a seguir:

  1. Instala Fake Data en tu navegador.

  2. Abre cualquier formulario y haz clic derecho en el campo donde deseas insertar datos.

  3. Selecciona el tipo de datos que deseas insertar (nombre, correo electrónico, dirección, etc.).

  4. Puedes llenar campos individuales o completar todo el formulario a la vez.

Principales usos: Pruebas de formularios, generación de datos de prueba, automatización de tareas.

Beneficios: Aumenta la eficiencia al eliminar la necesidad de ingresar datos manualmente, reduce errores humanos y permite la creación de datos personalizados mediante código JavaScript.

Opinión: Es esencial para cualquier desarrollador o tester que trabaje con formularios, ya que ahorra tiempo y facilita la creación de datos de prueba realistas.


ModHeader - Modificar encabezados HTTP

Funcionalidad: Modifica encabezados de solicitud y respuesta HTTP.

Pasos a seguir:

  1. Instala ModHeader en tu navegador.

  2. Abre el panel de ModHeader y añade/elimina/modifica encabezados según tus necesidades.

  3. Guarda y activa los cambios para ver cómo afectan las respuestas del servidor.

Principales usos: Depuración de aplicaciones web, pruebas de rendimiento, simulación de diferentes entornos de red.

Beneficios: Permite ajustar y probar diferentes configuraciones de encabezados sin modificar el código fuente, facilitando la identificación y solución de problemas.

Opinión: Es una herramienta indispensable para cualquier desarrollador o tester que trabaje con aplicaciones web, ya que mejora la capacidad de depuración y optimización.


Clear Cache - Borrar caché y cookies

Funcionalidad: Elimina datos almacenados en caché y cookies del navegador.

Pasos a seguir:

  1. Abre tu navegador y ve a la configuración de privacidad.

  2. Selecciona la opción para eliminar datos de navegación.

  3. Elige el período de tiempo (última hora, desde siempre, etc.) y los tipos de información que deseas eliminar (caché, cookies, etc.).

  4. Haz clic en "Eliminar datos" para borrar la caché y las cookies.

Principales usos: Solución de problemas de carga de sitios web, mejora del rendimiento del navegador, eliminación de datos antiguos.

Beneficios: Ayuda a resolver problemas de formato y carga de sitios web, libera espacio en el dispositivo y mejora la privacidad al eliminar datos antiguos.

Opinión: Es una herramienta esencial para cualquier usuario de internet, ya que mejora la experiencia de navegación y la privacidad.


JavaScript deshabilitado en Chrome

Funcionalidad: Desactiva JavaScript en el navegador Chrome.

Pasos a seguir:

  1. Abre Chrome y ve a la configuración.

  2. Selecciona "Privacidad y seguridad" y luego "Configuración de contenido".

  3. En la sección "JavaScript", desactiva la opción "Permitido (recomendado)".

  4. Reinicia el navegador para que los cambios surtan efecto.

Principales usos: Pruebas de accesibilidad, depuración de JavaScript, mejora de la seguridad al reducir la superficie de ataque.

Beneficios: Permite identificar problemas de accesibilidad y seguridad, facilita la depuración de código JavaScript y mejora la experiencia del usuario al reducir el uso de scripts.

Opinión: Es una herramienta valiosa para desarrolladores y testers que necesitan evaluar la accesibilidad y seguridad de sus aplicaciones web. Recuerda siempre probar los requerimientos con js desactivado.


Fuentes:

https://chromewebstore.google.com/detail/fake-data-a-form-filler-y/gchcfdihakkhjgfmokemfeembfokkajj

https://chromewebstore.google.com/detail/modheader-modify-http-hea/idgpnmonknjnojddfkpgkljpfnnfcklj

https://chromewebstore.google.com/detail/pixel-perfect-pro/nnhifpoojdlddpnhjbhiagddgckpmpfb

https://chromewebstore.google.com/detail/clear-cache/cppjkneekbjaeellbfkmgnhonkkjfpdn

https://chromewebstore.google.com/detail/javascript-deshabilitado/jbjdopljoflabmgndibnfmnmojbafaog?hl=es-419



martes, 11 de febrero de 2025

Como saber el sistema operativo donde se está ejecutando la automatización de pruebas

 Buenas lectores.

Siguiendo con los tips de reconocer versiones, esta vez, vamos a revisar como identificamos la versión del sistema operativo donde se está corriendo el robot (automatización de pruebas). Eso es muy util cuando nos encontramos con la necesidad de interactuar con el sistema de archivos.


En java es super sencillo hacerlo, con esta simple sentencia:

System.getProperty("os.name");

 

Ejemplo real:


System.out.println(System.getProperty("os.name"));

if(System.getProperty("os.name").contains("Windows")) {

archive = "\\data_source.xlsx";

}else {

archive = "/data_source.xlsx";

}


El ejemplo anterior compara si estamos usando windows, añade a la cadena del archivo la dirección del archivo, si no es windows, en este caso es linux por ende, añade la cadena del archivo en formato linux.

En caso de querer algo mas específico porque corremos el robot en más sistemas operativos podemos hacer lo siguiente:


private static String OS = System.getProperty("os.name").toLowerCase();

if(OS.contains("win")){
System.out.println("windows!");
}
if("mac"){
System.out.println("mac!");
}


Y así sucesivamente.


Fuentes:
https://stackoverflow.com/questions/14288185/detecting-windows-or-linux
https://automatizaciondefuncionales.blogspot.com/2023/08/como-saber-el-sistema-operativo-donde.html

Subir un proyecto de automatización a Azure repos

 Buenas lectores.


Constantemente estamos  creando proyectos y siempre se nos olvidan los comandos para hacerlo, esto es normal puesto que nuestro día a día está enfocado en otras cosas y este proceso se hace una vez cada proyecto. Así que decidí dejar escrito los comandos para que siempre tengas accesos a el.


1- Creas un nuevo repositorio donde vas a subir tu repositorio local



2- Copias la ruta que te crea o simplemenete lo clonas




3- En tu folder local inicias git y subes tus cambios, recuerda cambiar el origin por el que copiamos desde azure

git init

git add .

git commit -m "first commit"

git remote add origin https://github.com/NOMBRE_USUARIO/NOMBRE_PROYECTO.git

git push -u origin master


4- Disfrutar tu proyecto en azure totalmente versionado.


NOTA:

El resto de cambios que quieras subir a azure puedes hacerlo mediante 

git push

Sin necesidad de especificar nuevamente el origin


Saludos cordiales.


Fuentes:

https://gist.github.com/cgonzalezdai/cc33db72a6fe5178637aabb562eae35c

https://learn.microsoft.com/es-es/azure/devops/repos/git/create-new-repo?view=azure-devops

https://automatizaciondefuncionales.blogspot.com/2024/02/subir-mi-proyecto-local-azure-repos.html

domingo, 29 de diciembre de 2024

Selenium 4.27 - Deprecación del método getAttribute

¡Hola lectores!

Si has actualizado a Selenium 4.27 y te has llevado la sorpresa de que al usar el método getAttribute aparece como deprecado, no te preocupes. Aquí te explico qué debes hacer para actualizarte y, sobre todo, cómo mantener tu código limpio y sin deuda técnica.

¿Qué es el método getAttribute?

El método getAttribute ha sido una herramienta fundamental en Selenium para obtener el valor de un atributo de un elemento HTML. Por ejemplo, si querías obtener el valor de un campo de entrada, usarías getAttribute("value").

¿Por qué está siendo deprecado?

El método getAttribute ha sido deprecado en Selenium 4.27 por varias razones:

  • Uso incorrecto: Muchos usuarios intentaban usar getAttribute para obtener el texto visible (innerText), lo cual llevaba a resultados inconsistentes en diferentes navegadores.

  • Nueva aproximación: Selenium quiere hacer las cosas más fáciles y limpias para los desarrolladores. Al alejarse de getAttribute, la biblioteca fomenta el uso de métodos más específicos diseñados para sus respectivas tareas.

Nuevos métodos: getDomProperty y getDomAttribute

Para reemplazar getAttribute, Selenium ha introducido dos nuevos métodos:

  • getDomProperty: Para propiedades del DOM como value, checked, selected, etc.

  • getDomAttribute: Para atributos HTML como id, class, href, src, etc.

Ventajas de los nuevos métodos

  • Precisión: Estos métodos son más precisos y específicos, lo que reduce la posibilidad de errores y resultados inconsistentes.

  • Rendimiento: Al ser más específicos, estos métodos pueden mejorar el rendimiento de tus pruebas.

  • Compatibilidad: Los nuevos métodos están mejor alineados con los estándares modernos de navegadores web, lo que garantiza una mayor compatibilidad.

Ejemplo de migración

Antes (usando getAttribute):

WebElement element = driver.findElement(By.id("username"));

String value = element.getAttribute("value");


Después (usando getDomProperty):

WebElement element = driver.findElement(By.id("username"));
String value = element.getDomProperty("value");

Conclusión

La deprecación del método getAttribute en Selenium 4.27 es un paso importante hacia pruebas más precisas y fiables. Al adoptar los nuevos métodos getDomProperty y getDomAttribute, tus scripts de automatización serán más robustos y futuros.

Espero que esta información te sea útil. Si tienes alguna pregunta o necesitas más detalles, no dudes en comentar. ¡Hasta la próxima!


Fuentes:
https://www.youtube.com/watch?v=qMiu4DIomyE