Flujos de Casos de Prueba
Cada interfaz se considera un caso de prueba individual, conocido como caso de prueba de una sola interfaz.
Para la automatización, se uitlizan:
- pytest
- unittest
- yaml
Un caso de prueba puede incluir múltiples interfaces, lo que se conoce como flujo de casos de prueba. Estos requieren la coordinación de varias interfaces para cmopletarse.
Ejemplos:
- Funcionalidad de carga de archivos en WeChat:
- Obtener token
- Cargar archivo
- Funcionalidad de compras en una tienda en línea:
- Seleccionar producto y agregar al carrito
- Enviar pedido
- Pago en línea
- Aceptar entrega
- Comentar producto
Implementación de Flujo de Casos de Prueba en Python
En Python, se pueden añadir más pasos de prueba dentro de un caso de prueba para incluir solicitudes adicionales de la API y completar el flujo de casos de prueba.
def flujo_prueba():
respuesta = sesion.get('https://www.baidu.com')
respuesta = sesion.get('https://qq.com')
En YAML, se pueden añadir más pasos de prueba dentro de un caso de prueba para incluir solicitudes adicionales de la API y completar el flujo de casos de prueba.
test_nombre: Visitar página principal
pasos:
- solicitud:
método: GET
url: http://www.baidu.com
- solicitud:
método: GET
url: http://www.qq.com
Pruebas Guiadas por Datos (DDT)
Python admite pruebas parametrizadas nativamente, combinadas con archivos de datos (json, yaml), lo que facilita la implementación de pruebas guiadas por datos.
Pruebas Parametrizadas en pytest
import pytest
@pytest.mark.parametrize(
"valor",
[1, 2, 3]
)
def prueba_ejemplo(valor):
print(valor)
Múltiples parámetros:
import pytest
@pytest.mark.parametrize(
"x, y",
[
[1, 3],
[2, 4],
[5, 8]
]
)
def prueba_ejemplo(x, y):
print(x, y)
Transformación a Pruebas Guiadas por Datos
import pytest
import yaml
@pytest.mark.parametrize(
"x, y",
yaml.safe_load(open("datos/ddt.yaml", encoding="utf-8"))
)
def prueba_ejemplo(x, y):
print(x, y)
Uso de Parametrización en Casos de Prueba YAML
test_nombre: prueba_ejemplo
marca:
- parametrizar:
claves:
- n
valores:
- 1
- 2
- 3
pasos:
- solicitud:
método: get
url: https://www.baidu.com/?wd=${n}
Múltiples parámetros:
test_nombre: prueba_ejemplo
marca:
- parametrizar:
claves:
- x
- y
valores:
- [1,2]
- [3,5]
- [6,8]
pasos:
- solicitud:
método: get
url: https://www.baidu.com/?wd=${x}-${y}
Carga de Archivos de Datos en Casos de Prueba YAML
test_nombre: prueba_ejemplo
marca:
- parametrizar:
claves:
- x
- y
valores: !include ddt.yaml
pasos:
- solicitud:
método: get
url: https://www.baidu.com/?wd=${x}-${y}
Práctica de DDT en Proyectos
Escenarios típicos donde se necesita pasar parámetros repetidamente a la misma interfaz para realizar pruebas repetidas:
- Iniciar sesión
- Consultar datos
- Parámetros de componentes
Creación de un Caso de Prueba Individual
test_nombre: Obtener token de WeChat
pasos:
- solicitud:
método: GET
url: https://api.weixin.qq.com/cgi-bin/token
params:
grant_type: client_credential
appid: wx0f6d68f21b3e5fde
secret: 3b0740791899c3ec2a97dec67f134afc
- extraer:
código: [status_code,(.*),0]
expira_en: [json,expires_in,0]
- validar:
igualdad:
estado_code_200: [ '${código}' , 200 ]
expira_en_7200: [ '${expira_en}' , 7200 ]
Construcción de Datos como Parámetros de Entrada
[
['wx0f6d68f21b3e5fde','3b0740791899c3ec2a97dec67f134afc',7200],
['1245678899123','3b0740791899c3ec2a97dec67f134afc',None]
]
test_nombre: Obtener token de WeChat
marca:
- parametrizar:
claves:
- appid
- secret
- expira_personalizado
- errcode_personalizado
valores:
- ['wx0f6d68f21b3e5fde','3b0740791899c3ec2a97dec67f134afc',7200,no_data]
- ['1245678899123','3b0740791899c3ec2a97dec67f134afc',no_data,40013]
pasos:
- solicitud:
método: GET
url: https://api.weixin.qq.com/cgi-bin/token
params:
grant_type: client_credential
appid: ${appid}
secret: ${secret}
- extraer:
código: [status_code,(.*),0]
expira_en: [json,expires_in,0]
errcode: [json,errcode,0]
- validar:
igualdad:
estado_code_200: [ '${código}' , 200 ]
expira_en_personalizado: [ '${expira_en}' , '${expira_personalizado}' ]
errcode_personalizado: ['${errcode}','${errcode_personalizado}']