Automatización de Interfaces en Python: Encapsulamiento Extremo y Pruebas Guiadas por Datos

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:
    1. Obtener token
    2. Cargar archivo
  • Funcionalidad de compras en una tienda en línea:
    1. Seleccionar producto y agregar al carrito
    2. Enviar pedido
    3. Pago en línea
    4. Aceptar entrega
    5. 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}']

Etiquetas: pytest Unittest YAML pruebas_guiadas_por_datos automatización_interfaces

Publicado el 8-13 15:06