Ideas de prueba de automatización de interfaz y marco de biblioteca de prueba práctica

Marco de biblioteca de prueba

  Similar a Modular Test Scripting Framework y tiene los mismos beneficios. La diferencia es que el marco de la biblioteca de prueba descompone la aplicación bajo prueba en procedimientos y funciones en lugar de scripts (y los scripts de prueba solo incluyen casos de uso que llaman a funciones). Este marco requiere la creación de archivos de biblioteca que describan los módulos, los fragmentos y la funcionalidad de la aplicación que se está probando.

Escenario: en el marco modular, encontramos que el proceso de adquisición de tokens de uso común no es fácil de mantener debido a las frecuentes llamadas y cambios, por lo que se convierte en una función para llamar, y todas las demás interfaces pueden cambiarse;

Por ejemplo: El caso de uso es el siguiente:

Obtener token --- crear una etiqueta.

Obtener token---crear etiqueta---eliminar la etiqueta que acaba de crear

Obtener token---crear etiqueta---etiqueta de consulta para consultar

A continuación, modifique el código a través del marco de la biblioteca de prueba. Los cambios son relativamente grandes. Se recomienda copiar el proyecto escrito anteriormente y hacer una copia de seguridad.

Paso 1. Cree un nuevo archivo common_api_info.py en la carpeta común y encapsule todas las interfaces api

Tanto la encapsulación de métodos como la encapsulación de clases están disponibles

 Escribir código:

# encoding: utf-8
# @author: Jeffrey
# @file: common_api_info.py
# @time: 2022/7/26 22:05
# @desc: 测试库封装

import json

#该模块存放所有的接口定义及接口信息
class CommonApiInfo:

    def __init__(self,session,hosts):
        self.session = session
        self.hosts = hosts

    def get_access_token_api(self,grant_type,appid,secret):
        """获取token接口信息"""
        url_params = {"grant_type": grant_type,
                      "appid": appid,
                      "secret": secret}
        response = self.session.get(url="https://%s/cgi-bin/token" % self.hosts,
                                    params=url_params)
        return response

    def create_user_tag_info(self,token_value,tag_name):
        '''创建标签接口信息'''
        url_params = {"access_token": token_value}
        tag_info = { "tag": { "name": tag_name } }
        
        tag_str = json.dumps(tag_info, ensure_ascii=False)
        response = self.session.post(url="https://%s/cgi-bin/tags/create" % self.hosts,
                                     params = url_params,
                                     data=tag_str.encode('utf-8'))
        return response

    # 修改标签接口信息
    # 查询标签接口信息

Paso 2. Modifique el archivo common_function.py

 Escribir código:

# encoding: utf-8
# @author: Jeffrey
# @file: common_function.py
# @time: 2022/7/26 21:01
# @desc: 模块化框架
import jsonpath
from common.common_api_info import CommonApiInfo

def get_access_token_value(session_obj,hosts):
    """获取access_token的值"""
    response = CommonApiInfo(session_obj,hosts).get_access_token_api('client_credential',
                                                          'wxf14419077f707856',
                                                          '92a113bd4b5ffdc72144740dc7123c99')
    # 获取响应json中的access_token的值
    token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0]
    return token_value

Paso 3. Modifique el archivo test_get_access_token_api.py

 Escribir código:

# encoding: utf-8
# @author: Jeffrey
# @file: test_get_access_token_api.py
# @time: 2022/7/24 18:08
# @desc:

# 导入模块顺序:内置模块、第三方模块、自定义模块
import unittest
import requests
import jsonpath
from common import local_config
from common.common_api_info import CommonApiInfo

class TestGetAccessTokenApi(unittest.TestCase):

    def setUp(self) -> None:
        self.session = requests.session()
        self.hosts = local_config.HOSTS
    def tearDown(self) -> None:
        self.session.close()

    def test_case_01(self):
        '''[api_case_01] 测试获取access_token能否正常调用'''

        response = CommonApiInfo(self.session,self.hosts).get_access_token_api(
            'client_credential','wxf14419077f707856','92a113bd4b5ffdc72144740dc7123c99'
        )
        # 获取响应json中的access_token的值
        actual_result = jsonpath.jsonpath(response.json(), "$.access_token")


        self.assertTrue(actual_result, "api_case_01 执行失败")  #非空,非0 都返回True为真

    def test_case_02(self):
        '''[api_case_02] 测试获取access_token接口在appid错误时,能否正常处理错误'''

        response = CommonApiInfo(self.session,self.hosts).get_access_token_api(
            'client_credential','wxf14419077f707','92a113bd4b5ffdc72144740dc7123c99'
        )
        # 获取响应json中的errcode的值,因为jsonpath返回的是列表,故加上下标0
        actual_result = jsonpath.jsonpath(response.json(), "$.errcode")[0]

        self.assertEqual(actual_result,40013,  "api_case_02 执行失败")



if __name__ == '__main__':
    unittest.main(verbosity=2)

Ver resultados de ejecución:

Paso 4. Modifique el código del archivo test_create_user_tag_api.py;

 Escribir código:

# encoding: utf-8
# @author: Jeffrey
# @file: test_create_user_tag_api.py
# @time: 2022/7/24 19:02
# @desc:
import unittest
import requests
import jsonpath
import json
from common import common_function
from common import local_config
from common.common_api_info import CommonApiInfo


class TestCreateUserTagApi(unittest.TestCase):

    def setUp(self) -> None:
        self.session = requests.session()
        self.hosts = local_config.HOSTS
    def tearDown(self) -> None:
        self.session.close()

    def test_case_01(self):
        '''[api_case_03] 测试正常进行创建标签接口调用'''
        #获 取access_token
        token_value = common_function.get_access_token_value(self.session,self.hosts)


        # 解决中文乱码问题;模拟post请求时,携带json 数据包含中文发送给服务器会转码
        # 方式一:json.dumps()
        # 获取创建标签接口
        response = CommonApiInfo(self.session,self.hosts).create_user_tag_info(
            token_value,'深圳人5'
        )

        # # 方式二:修改requests中的models.py中的源码,修改完后
        # response = self.session.post(url="https://api.weixin.qq.com/cgi-bin/tags/create",
        #                              params=tag_url_params,
        #                              json=tag_boby)
        # print(response.json())


        # 获取响应json的tag的name值,因为jsonpath返回的是列表,故加上下标0
        actual_result = jsonpath.jsonpath(response.json(), "$.tag.name")[0]


        self.assertEqual(actual_result,"深圳人5", "api_case_03 执行失败")


if __name__ == '__main__':
    unittest.main(verbosity=2)

Ver resultados de ejecución:

Paso 5. Ejecute el archivo run_api_tests.py nuevamente para ejecutar todos los casos de uso;

Beneficios: 1. Fácil de mantener 2. Los scripts de casos de prueba prestan más atención al proceso de prueba y minimizan los detalles de la interfaz 3. Reduce la redundancia de código

Caso práctico

La teoría óptica no sirve de nada, hay que aprender a seguirla, y hay que hacerlo uno mismo, para poder aplicar lo aprendido a la práctica, en este momento se puede aprender de algunos casos prácticos.

Si te es útil, dale me gusta y recógelo para alentar al autor. También es conveniente que lo encuentre rápidamente la próxima vez.

Si no lo entiende, consulte la pequeña tarjeta a continuación. El blogger también espera aprender y progresar con evaluadores de ideas afines.

A la edad adecuada, elija la posición correcta e intente aprovechar al máximo sus propias ventajas.

Mi camino de desarrollo de pruebas automatizadas es inseparable del plan de cada etapa del camino, porque me gusta planificar y resumir,

¡Pruebe y desarrolle tutoriales en video, notas de estudio y portales de recepción! ! !

Supongo que te gusta

Origin blog.csdn.net/Liuyanan990830/article/details/130487359
Recomendado
Clasificación