Puede añadir condiciones de control de flujo (bucles, condiciones, esperas, agrupación, etc.) a sus escenarios de prueba. Esto mejora el uso de configuraciones de escenarios/procesos de prueba más complejos y, en última instancia, resuelve los desafíos de prueba de escenarios intrincados mediante funciones de pruebas automatizadas.Bucles For#
Cuando necesita enviar una sola petición varias veces de forma consecutiva, usar un bucle for es un enfoque eficiente. A continuación se explica cómo usar eficazmente los bucles for en sus escenarios de prueba de Apidog:Configurar el recuento de iteraciones: Decida cuántas veces debe ejecutarse el bucle. Puede ser un número fijo o una {{variable}}.
Añadir peticiones: Dentro de un bucle for, puede incluir una o más peticiones, así como otros bucles o ramas condicionales. Esta flexibilidad permite escenarios de prueba complejos en los que es necesario probar varias acciones en secuencia.
Condición Break If: Puede añadir una condición Break if a un bucle for. Esto terminará inmediatamente el bucle si se cumple la condición. Puede arrastrar y ajustar la posición de Break if o incluso añadir varias condiciones Break if para gestionar diferentes escenarios.
Gestión On Error: Gestione los errores añadiendo condiciones On Error al bucle. Si se produce un error, se activarán las acciones especificadas:Ignorar: El bucle continúa con la siguiente petición.
Continuar: Omite las peticiones restantes del ciclo actual y pasa a la siguiente iteración.
Interrumpir la ejecución: Detiene el bucle y continúa con las peticiones posteriores fuera del bucle.
Finalizar la ejecución: Detiene por completo todo el escenario de prueba.
La condición On Error está fija al inicio del bucle y no se puede mover.
Usar el índice del bucle en las peticiones#
El índice actual del bucle puede usarse como una variable local dentro de las peticiones para ajustar dinámicamente parámetros o cuerpos de petición. Para utilizarlo:1
Añada un bucle for e incluya una petición dentro del bucle.
2
Haga clic en el icono de varita mágica
🪄 en el parámetro de la petición y seleccione "Recuperar datos del paso previo".
La función "Recuperar datos del paso previo" solo está disponible en el módulo "Pruebas" y no en el módulo "APIs".
Al usar "Recuperar datos del paso previo", el valor solo puede obtenerse cuando se ejecuta todo el escenario de prueba en conjunto; no se puede acceder a él al ejecutar pasos individuales.
3
Elija la opción del bucle, normalmente etiquetada como "Repetir n veces".
4
Seleccione "Índice actual del bucle".
5
Obtendrá una variable dinámica como
{{$.5.index}}. Haga clic en "Insertar" y se reemplazará en tiempo de ejecución por el índice actual del bucle, como
0 o
5.
El índice del bucle siempre empieza en 0.
Bucles ForEach#
Cuando tiene un array que contiene varios elementos (una lista de contenido específico o una lista obtenida de pasos anteriores) y necesita realizar la misma operación en cada elemento de la lista (por ejemplo, primero obtener una lista de productos y luego añadir cada producto de la lista al carrito de compras), debe usar un bucle ForEach.En un bucle ForEach, las operaciones dentro del bucle se ejecutarán para cada elemento del array.La diferencia con un bucle For es que no necesita preocuparse por el número de iteraciones; solo debe centrarse en el contenido del array del bucle.Configurar el array del bucle: En un bucle ForEach, debe establecer un array como objeto del bucle. Puede usar una variable o introducir manualmente un array, como ["a","b","c"].
Añadir peticiones: Dentro de un bucle ForEach, puede añadir una o más peticiones, o añadir otros bucles o ramas condicionales, etc.
Condición Break If y gestión On Error: Puede añadir Break if y On error al bucle ForEach, de forma coherente con el bucle for mencionado anteriormente.
En la configuración avanzada del bucle ForEach, también puede personalizar las opciones de gestión de excepciones para Break If y On Error. Para obtener más información, consulte Reglas de juicio.
Ejemplo de uso de ForEach#
Considere dos endpoints: uno para recuperar una lista de información de mascotas y otro para obtener los detalles de una sola mascota. Si necesita obtener los detalles de una mascota añadida recientemente a la lista, puede configurar este escenario usando un bucle ForEach en sus pruebas automatizadas.1.
El primer paso fuera del bucle ForEach sería solicitar el endpoint de lista de información de mascotas para recuperar los datos reales de la lista. Normalmente, la respuesta de esta interfaz contiene un array con información básica sobre varias mascotas, como el ID y el nombre de la mascota.
2.
Configure un bucle ForEach con el array de origen como un subconjunto del array de mascotas de la respuesta del paso anterior.
3.
Dentro del bucle, configure una petición al endpoint "Obtener información de mascota" y use el valor del elemento del bucle ForEach para completar el parámetro ID en esta petición.
Usar el elemento del bucle en las peticiones#
El elemento/índice actual del bucle puede usarse como una variable local dentro de las peticiones para ajustar dinámicamente parámetros o cuerpos de petición. Para utilizarlo:1
Añada un bucle ForEach e incluya una petición dentro del bucle.
2
Haga clic en el icono
varita mágica en el parámetro de la petición y seleccione "Recuperar datos del paso previo".
3
Elija la opción del bucle, normalmente etiquetada como "Repetir cada elemento en
{{array}}".
4
Seleccione "Elemento actual del bucle". Puede utilizar JSONPath para extraer propiedades del elemento.
5
Obtendrá una variable dinámica como
{{$.17.element}}. Haga clic en "Insertar" y se reemplazará en tiempo de ejecución por el elemento actual del bucle, que es un elemento del array del bucle.
Elemento actual del bucle: El sistema extrae automáticamente elementos del array especificado en el bucle ForEach y los almacena en la variable designada. Al inicio de cada iteración, esta variable se actualiza con el valor del elemento actual del array. Si el elemento es un objeto, puede usar JSONPath para extraer un subcampo específico, como {{$.1.element.data.name}}.Índice actual del bucle: El índice del bucle actual se almacena en esta variable. Empieza en 0 y aumenta en 1 al comienzo de cada iteración posterior, reflejando el índice actual.
Cuando necesita enviar diferentes peticiones según distintos escenarios, puede usar una instrucción If para añadir ramas condicionales. Cuando se cumplen las condiciones especificadas, se ejecutará el paso correspondiente; de lo contrario, se omitirá. Para obtener detalles más específicos, consulte Reglas de juicio.Configurar la instrucción If: La instrucción If admite varias condiciones, como igual a, no igual a, contiene, no contiene, etc. Se pueden usar tanto constantes como variables en cualquiera de los lados de la condición.
Añadir peticiones: Se pueden añadir varias peticiones dentro de una rama condicional, así como otros bucles o ramas condicionales.
Ejecutar ramas condicionales: Si se cumplen las condiciones establecidas en la configuración, se ejecutará el paso de prueba; de lo contrario, se omitirá.
Instrucción Else: Se puede añadir una instrucción Else dentro de una rama condicional para gestionar escenarios cuando no se cumple la condición If.
Ejemplo de uso de If#
El propietario de una tienda de mascotas, según el estado de ventas de las mascotas del día anterior, necesita cambiar el estado de venta de una mascota a "Vendida" si se vendió. De lo contrario (else), necesita comprobar la lista de mascotas que aún están en venta.1.
Haga clic en el botón "Añadir paso" en la parte inferior y seleccione "Ramificación condicional".
2.
Introduzca la variable saleStatus obtenida de la respuesta de la petición API en el cuadro de entrada después de "If" y seleccione la condición "equals". Finalmente, introduzca true como valor de comparación.
3.
Pase el cursor sobre la operación de ramificación condicional para ver la opción " + Else". Haga clic en ella para añadir el paso "Lista de mascotas en venta" (en caso de que no se cumpla la condición, es decir, para consultar la lista de mascotas que aún están en venta).
Reglas de juicio#
Al usar la instrucción If en un escenario de prueba, puede definir reglas condicionales para controlar la ejecución de la prueba. Si se cumplen las condiciones, se ejecutará el paso correspondiente; de lo contrario, se omitirá. Del mismo modo, en la configuración de Break If para los bucles ForEach y For, puede establecer reglas de juicio para controlar el flujo de ejecución de forma más flexible.| Regla | Descripción |
|---|
| Igual a | Comprueba si dos valores son iguales. |
| No igual a | Comprueba si dos valores no son iguales. |
| Existe | Comprueba si existe un campo o una variable. |
| No existe | Comprueba si un campo o una variable no existe. |
| Menor que | Comprueba si un valor es menor que otro. |
| Menor o igual que | Comprueba si un valor es menor o igual que otro. |
| Mayor que | Comprueba si un valor es mayor que otro. |
| Mayor o igual que | Comprueba si un valor es mayor o igual que otro. |
| Coincide con Regex | Comprueba si una cadena coincide con la expresión regular especificada. |
| Contiene | Comprueba si una cadena o array contiene el valor especificado. |
| No contiene | Comprueba si una cadena o array no contiene el valor especificado. |
| Está vacío | Comprueba si un campo, array o variable está vacío. |
| No está vacío | Comprueba si un campo, array o variable no está vacío. |
| En lista | Comprueba si un valor pertenece a una lista especificada. |
| No en lista | Comprueba si un valor no pertenece a una lista especificada. |
Al realizar comprobaciones condicionales (como mayor que, mayor o igual que, igual a o no igual a), si los valores que se comparan son enteros o cadenas, el sistema convertirá automáticamente las cadenas en números para una comparación precisa. Por ejemplo, si compara una cadena "18" con el número 18, el sistema convertirá la cadena "18" en el número 18 antes de comparar.Igual a#
Comprueba si dos valores son iguales. Si son iguales, se cumple la condición y se ejecutará el paso de prueba; de lo contrario, se omitirá.Escenario: Compruebe si la edad del usuario extraída del paso previo es igual a 18.
Ejemplo de condición: {{$.5.response.body.data.age}} Equals 18
Efecto real de ejecución: Si el valor de edad extraído del paso previo es 18 (la cadena se convertirá automáticamente en un número), el paso se ejecutará, como mostrar información específica o realizar ciertas acciones.
No igual a#
Comprueba si dos valores no son iguales. Si no son iguales, se cumple la condición y se ejecutará el paso de prueba; de lo contrario, se omitirá.Escenario: Compruebe si el estado del pedido extraído del paso previo no es igual a "Pagado".
Ejemplo de condición: {{$.4.response.body.data.status}} Does not equal Paid
Efecto real de ejecución: Si el estado del pedido extraído del paso previo es otro valor (como "Pendiente" o "Enviado"), el paso se ejecutará.
Existe#
Comprueba si existe un determinado campo o variable. Si existe, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el campo email existe en los datos de usuario extraídos del paso previo.
Ejemplo de condición: {{$.3.response.body.data.email}} Exists
Efecto real de ejecución: Si el campo email está presente en los datos de usuario extraídos del paso previo, el paso se ejecutará.
No existe#
Comprueba si un determinado campo o variable no existe. Si no existe, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el campo phone no existe en los datos de usuario extraídos del paso previo.
Ejemplo de condición: {{$.2.response.body.data.phone}} Does not exist
Efecto real de ejecución: Si el campo phone está ausente en los datos de usuario extraídos del paso previo, el paso se ejecutará.
Menor que#
Comprueba si un valor es menor que otro. Si lo es, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el stock del producto extraído del paso previo es menor que 10.
Ejemplo de condición: {{$.1.response.body.data.stock}} Less Than 10
Efecto real de ejecución: Si el valor de stock extraído del paso previo es 8, se cumple la condición y se ejecutará el paso.
Menor o igual que#
Comprueba si un valor es menor o igual que otro. Si lo es, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si la edad extraída del paso previo es menor o igual que 12.
Ejemplo de condición: {{$.2.response.body.data.age}} Less than or equal 12
Efecto real de ejecución: Si el valor de edad extraído del paso previo es 10, se cumple la condición y se ejecutará el paso.
Mayor que#
Comprueba si un valor es mayor que otro. Si lo es, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el importe del pedido extraído del paso previo es mayor que 1000.
Ejemplo de condición: {{$.1.response.body.data.amount}} Greater than 1000
Efecto real de ejecución: Si el valor del importe del pedido extraído del paso previo es 1105, se cumple la condición y se ejecutará el paso.
Mayor o igual que#
Comprueba si un valor es mayor o igual que otro. Si lo es, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si los puntos del usuario extraídos del paso previo son mayores o iguales que 500.
Ejemplo de condición: {{$.3.response.body.data.points}} Greater than or equal 500
Efecto real de ejecución: Si el valor de puntos extraído del paso previo es 600, se cumple la condición y se ejecutará el paso.
Coincide con Regex#
Comprueba si una cadena coincide con una expresión regular especificada. Si coincide, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el formato de correo electrónico extraído del paso previo es correcto.
Ejemplo de condición: {{$.2.response.body.data.email}} Matches with Regex /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
Efecto real de ejecución: Si el formato de correo electrónico extraído del paso previo coincide con la expresión regular (por ejemplo, test@gmail.com), el paso se ejecutará.
Las expresiones regulares deben escribirse usando la sintaxis "literal", donde el patrón se encierra entre /, con modificadores opcionales (por ejemplo, g para coincidencia global, i para no distinguir entre mayúsculas y minúsculas) añadidos al final. Para obtener más información sobre cómo escribir expresiones regulares, puede consultar la documentación de MDN. Contiene#
Comprueba si una cadena o array contiene un valor especificado. Si lo contiene, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si la lista de roles de usuario extraída del paso previo contiene el rol "admin".
Ejemplo de condición: {{$.3.response.body.data.roles}} Contains admin
Efecto real de ejecución: Si la lista de roles extraída del paso previo contiene "admin", el paso se ejecutará.
No contiene#
Comprueba si una cadena o array no contiene un valor especificado. Si no lo contiene, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el carrito de compras del usuario extraído del paso previo no contiene un determinado producto.
Ejemplo de condición: {{$.4.response.body.data.cartItems}} Does not contain productId123
Efecto real de ejecución: Si el array de carrito extraído del paso previo no contiene el producto productId123, el paso se ejecutará.
Está vacío#
Comprueba si un campo, array o variable está vacío. Si lo está, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el campo de observaciones extraído del paso previo está vacío.
Ejemplo de condición: {{$.2.response.body.data.remarks}} Is empty
Efecto real de ejecución: Si el campo de observaciones extraído del paso previo está vacío, el paso se ejecutará.
No está vacío#
Comprueba si un campo, array o variable no está vacío. Si no está vacío, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si las observaciones del pedido extraídas del paso previo están completadas.
Ejemplo de condición: {{$.1.response.body.data.orderRemarks}} Is not Empty
Efecto real de ejecución: Si las observaciones del pedido extraídas del paso previo no están vacías, el paso se ejecutará.
En lista#
Comprueba si un valor pertenece a una lista especificada. Si pertenece, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el producto seleccionado por el usuario extraído del paso previo está en la lista de productos recomendados.
Ejemplo de condición: {{$.3.response.body.data.productId}} In List ["prod123", "prod456", "prod789"]
Efecto real de ejecución: Si el ID de producto extraído del paso previo es "prod456", el paso se ejecutará.
En Apidog, al introducir una lista, cada elemento debe introducirse por separado y separarse pulsando la tecla Entrar.
No en lista#
Comprueba si un valor no pertenece a una lista especificada. Si no pertenece, se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.Escenario: Compruebe si el código promocional introducido por el usuario extraído del paso previo no está en la lista de códigos promocionales usados.
Ejemplo de condición: {{$.4.response.body.data.promoCode}} Not in List ["usedCode1", "usedCode2"]
Efecto real de ejecución: Si el código promocional extraído del paso previo es "newPromo", se cumple la condición y se ejecutará el paso; de lo contrario, se omitirá.
Agrupación#
Cuando varios pasos del proceso de prueba están interrelacionados, pueden agruparse para su clasificación. Al agrupar pasos de prueba, mejora la legibilidad y operabilidad del escenario de prueba.Espera#
Cuando un determinado paso del proceso de prueba requiere esperar un período antes de ejecutarse, puede añadir una condición de espera para resolverlo.Ejemplo de uso de espera#
Simule que un usuario ve los detalles de una mascota y actualiza el estado de navegación de la información de la mascota después de navegar durante 1000ms.1.
Haga clic en el botón "Añadir paso" en la parte inferior y seleccione "Esperar".
2.
Introduzca el tiempo de espera, 1000 (en milisegundos).
Cuando use el control de flujo de pruebas, el informe de prueba no mostrará pasos como If, for, etc., sino que solo mostrará las peticiones reales ejecutadas, listadas linealmente en el orden de ejecución.