La correlación de parámetros de prueba automatizada de la interfaz Python más detallada de toda la red (ejemplo de escenario de aplicación)


Prefacio

¿Qué es la asociación de parámetros?

La asociación de parámetros, también llamada asociación de interfaz, significa que existe una conexión o dependencia de parámetros entre interfaces. Al completar un determinado negocio funcional, a veces es necesario solicitar varias interfaces en secuencia, en este caso puede haber una asociación entre algunas interfaces.

Por ejemplo: uno o algunos parámetros de solicitud de la interfaz B se obtienen llamando a la interfaz A, es decir, primero debe solicitar la interfaz A, obtener los valores de campo requeridos de los datos de retorno de la interfaz A y pasarlos como parámetros de solicitud. al solicitar la interfaz B. ingrese.

¿Cuáles son los escenarios para la asociación de parámetros?

El escenario más común: después de solicitar la interfaz de inicio de sesión, se obtiene el valor del token. Al realizar solicitudes posteriores a otras interfaces, el token debe pasarse como parámetro de solicitud.

Otro ejemplo es el escenario de pedido-> pago. Después de llamar a la interfaz de pedido para generar un pedido, se devolverá el número de pedido y el número de pedido se pasará a la interfaz de pago para el pago.

1. Escenario de asociación de parámetros

Tomando como ejemplo las compras en línea más comunes, podemos simplificar aproximadamente los escenarios y solicitudes correspondientes de la siguiente manera (puede pensar en el proceso de compra de un determinado producto):

El usuario selecciona el producto en el carrito de compras y hace clic en [Ir a finalizar compra] para ingresar a la página de confirmación del pedido. En la página de confirmación del pedido, haga clic en [Enviar pedido]. Esto primero solicitará la interfaz de pedido para crear un pedido.

Luego, el pedido creado se utilizará para solicitar la interfaz del comprobante de pago. Esta interfaz abrirá la página de pago, que es la interfaz de pago para ingresar la contraseña.

Después de ingresar la contraseña de pago, se solicitará la interfaz de pago del servicio de pago para realizar el pago real y el resultado del pago se devolverá a la parte solicitante para informarle si el pago se realizó correctamente.

Las interfaces involucradas en este proceso en realidad están relacionadas. Si queremos probar todo el proceso, debemos llamar a todas las interfaces involucradas en orden.

Pero aquí solo necesitamos comprender la asociación de parámetros, por lo que es suficiente tomar como ejemplo la interfaz de pedido y la interfaz de obtención del comprobante de pago, es decir, primero solicite a la interfaz de pedido que genere un número de pedido y luego use este número de pedido para solicitar. la interfaz del comprobante de pago. Solo entonces podrá abrir la interfaz de pago y realizar el pago.

La interfaz de pedido es la siguiente:

Dirección de interfaz: <servidor>/trade/order/purchase
Tipo de solicitud: post
Parámetros de solicitud:

{
    
    
	"goodsId": 10,  //商品id
	"goodsSkuId": 33,   //sku id
	"num": 2,   //购买数量
	"tradePromotion": {
    
     //选择的优惠项
		"type": 1,  //类型<1:优惠券>
		"promotionId": 1    //优惠id
	}
}

Datos del valor de retorno:

{
    
    
    "code": 0,
    "msg": "成功",
    "data": {
    
    
        "tradeNo": "0020220116204344962706666"  //交易订单号
    },
    "t": 1639658625474
}

La interfaz para la obtención de comprobantes de pago es la siguiente:

Dirección de interfaz: <servidor>/pay/pre/consum
Tipo de solicitud: post
Parámetros de solicitud:

{
    
    
	"orderNo":"0020220116204344962706666",    //交易订单号
	"product":"alipayWapClient"    //支付渠道<alipayWapClient:支付宝手机网页支付>
}

Datos del valor de retorno:

{
    
    
    "code": 0,
    "msg": "成功",
    "data": {
    
    
        "payNo":"123213213219379213",
        "certificate": "<form name=\"punchout_form\xxxxxxx >\n</form>\n<script>document.forms[0].submit();</script>"
    },
    "t": 1639659171031
}

El campo orderNo asocia las dos interfaces. Debido a que el número de pedido generado es diferente cada vez, al probar este escenario, es necesario asociar los parámetros de las dos interfaces para que funcione.

2. Escritura de guiones

Entonces, ¿cómo se puede manejar la asociación de parámetros en las pruebas automatizadas del marco pytest? Aquí se proporcionan dos ideas, como sigue:

De acuerdo con la secuencia de llamadas del escenario empresarial, llame a las interfaces en orden en el caso de uso,
escriba las interfaces dependientes como funciones fijas y use rendimiento para devolver los parámetros requeridos por la siguiente interfaz.

1) Llame en orden en el caso de uso.
El ejemplo de código es el siguiente:

import requests
import json
import pytest

def test_order_pay():
    '''
    创建订单->获取支付凭证,调起支付界面
    :return:
    '''
    # 先调用下单接口生成订单
    url_order = "https://gouwu.com/trade/order/purchase"
    data_order = {
    
    
        "goodsId": 10,
        "goodsSkuId": 33,
        "num": 2,
        "tradePromotion": {
    
    
            "type": 1,
            "promotionId": 1
        },
        "tradeDirectionArticle": {
    
    
            "articleId": 1
        }
    }
    res_order = requests.post(url=url_order, json=data_order).text
    tradeNo = json.loads(res_order)["tradeNo"]

    # 再请求获取支付凭证接口
    url_pay = "https://gouwu.com/pay/pre/consum"
    data_pay = {
    
    
        "orderNo": tradeNo, # tradeNo通过下单接口获取
        "product": "alipayWapClient"
    }
    res_pay = requests.post(url=url_pay, json=data_pay).text
    res_pay = json.loads(res_pay)
    # 断言
    assert res_pay["code"]==0
    assert res_pay["data"]["payNo"]
    assert res_pay["data"]["certificate"]
    
    
if __name__ == '__main__':
    pytest.main()

El código anterior es solo una llamada simplificada. También podemos encapsular cada solicitud de interfaz en una función separada. En el caso de prueba, solo necesitamos llamar estas funciones en orden. Explicaremos esto en un artículo posterior.

2) Para utilizar la función Fixture
en pytest, consulte mi artículo anterior pytest-Fixture (firmware)

Defina la función Accesorio. El ejemplo de código es el siguiente:

@pytest.fixture()
def get_order():
    '''
    请求下单接口,创建订单
    :return:
    '''
    url_order = "https://gouwu.com/trade/order/purchase"
    data_order = {
    
    
        "goodsId": 10,
        "goodsSkuId": 33,
        "num": 2,
        "tradePromotion": {
    
    
            "type": 1,
            "promotionId": 1
        },
        "tradeDirectionArticle": {
    
    
            "articleId": 1
        }
    }
    res_order = requests.post(url=url_order, json=data_order).text
    tradeNo = json.loads(res_order)["tradeNo"]
    yield tradeNo

Llame a la función de fijación definida anteriormente en la función de prueba. El ejemplo de código es el siguiente:

def test_pay(get_order):
    '''
    下单->支付场景校验
    :param get_order: 调用上面的Fixture函数,函数名get_order即返回的tradeNo
    :return:
    '''
    url_pay = "https://gouwu.com/pay/pre/consum"
    data_pay = {
    
    
        "orderNo": get_order,  # get_order即为上面定义的fixture函数返回值
        "product": "alipayWapClient"
    }
    res_pay = requests.post(url=url_pay, json=data_pay).text
    res_pay = json.loads(res_pay)
    # 断言
    assert res_pay["code"] == 0
    assert res_pay["data"]["payNo"]
    assert res_pay["data"]["certificate"]

El siguiente es el diagrama del sistema de arquitectura de conocimiento de aprendizaje de ingenieros de pruebas de software más completo que compilé en 2023.

1. Programación en Python desde el nivel básico hasta el dominio

Por favor agregue la descripción de la imagen.

2. Implementación práctica de proyectos de automatización de interfaces.

Por favor agregue la descripción de la imagen.

3. Combate real del proyecto de automatización web.

Por favor agregue la descripción de la imagen.

4. Implementación práctica del proyecto de automatización de aplicaciones.

Por favor agregue la descripción de la imagen.

5. Currículums de los fabricantes de primer nivel.

Por favor agregue la descripción de la imagen.

6. Probar y desarrollar el sistema DevOps

Por favor agregue la descripción de la imagen.

7. Herramientas de prueba automatizadas de uso común

Por favor agregue la descripción de la imagen.

8. Prueba de rendimiento de JMeter

Por favor agregue la descripción de la imagen.

9. Resumen (pequeña sorpresa al final)

El tiempo vuela y las oportunidades son fugaces. Aprovecha cada momento precioso y riega las flores de tus sueños con tu sudor. Sigue luchando y busca la excelencia. ¡Solo trabajando duro podrás comenzar un viaje glorioso en la vida! ¡Cree en ti mismo y sigue adelante!

Aunque la vida está llena de desafíos e incertidumbres, la fe firme y los esfuerzos incansables lograrán el éxito. ¡Cree en ti mismo, avanza con valentía y persigue las infinitas posibilidades que te pertenecen!

La lucha es la melodía de la vida y la perseverancia es la contraseña del éxito. No importa cuántas dificultades encuentres, mantén encendida la llama de tu sueño y avanza con valentía, ¡y crearás tu propio capítulo glorioso! ¡Cree en ti mismo y podrás con cualquier cosa!

Supongo que te gusta

Origin blog.csdn.net/csdnchengxi/article/details/133383575
Recomendado
Clasificación