Marco de prueba automatizado Pytest: encapsulación de solicitudes

Requests es una biblioteca de terceros de Python que se utiliza para enviar solicitudes HTTP y recibir respuestas HTTP, principalmente para la automatización de la interfaz. Hoy aprenderemos cómo empaquetarlo en pytest.

1. Solicitudes de instalación

pip install requests

2. Métodos comunes de la biblioteca de solicitudes. Incluyendo varias solicitudes comunes y parámetros requeridos de http

requests.get(url, params=None, **kwargs)requests.post(url, data=None, json=None, **kwargs)requests.put(url, data=None, **kwargs)requests.delete(url, **kwargs)requests.request(method, url, **kwargs)

3. El valor de retorno común de la solicitud de obtención, la prueba aquí es un método Jira escrito por mí mismo

import requests
class TestApi:
    def test_get(self):        url = "http://172.19.1.34:8015/emanage/getissue"        datas = {
   
               "issue":"PAY"        }
        res = requests.get(url=url,params=datas)        print(res.text) #返回body的文本信息        print(res.json) #返回body的json格式        print(res.content) #返回body的byte类型        print(res.status_code)  # 返回状态码        print(res.reason)  # 返回状态信息        print(res.cookies)  # 返回响应的cookie信息        print(res.encoding)  # 返回编码格式        print(res.headers)  # 返回响应头        print(res.request.method)  # 返回请求的数据

4. La solicitud de publicación es similar a la solicitud de obtención. Cabe señalar que la conversión entre json y cadena

json.loads() convierte cadenas json en dict
json.dumps() convierte dict en cadenas json

    def test_post(self):        urls = "http://172.19.1.34:8016/hdj/s1/"        datas = {
   
                 "user": "wufan",              "sqlword": "select * from t_11"        }
        res = requests.post(url=urls, data=datas)        print(res.json())

5. Caso real:

Obtenga la interfaz del token del subprograma WeChat y use el token para obtener la etiqueta del subprograma

  • Para obtener el ID de aplicación y el secreto del subprograma WeChat, visite la siguiente dirección e inicie sesión con WeChat

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
  • Después de obtener el appid y el secreto, puede obtener el token del applet

import jsonimport re
import requests
class TestProductApi:
    access_token = ""    session = requests.session() #通过session去关联,session默认情况下会自动关联cookie

    def test_get_token(self):         print("获取token鉴权码")         urls = "https://api.weixin.qq.com/cgi-bin/token"         datas = {
   
                 "grant_type":"client_credential",              "appid":"wx8e8b67ced3c4b884",              "secret":"27c524bd9ca932e31e229be30b0a805b"         }
         res = TestProductApi.session.request("get",url=urls,params=datas)
         TestProductApi.access_token = res.json()['access_token']         print(TestProductApi.access_token)

6. En el caso anterior, los datos y la url se escriben directamente en el caso de uso, lo que no es conveniente para el mantenimiento posterior.

Luego, encapsulamos las solicitudes en el primer nivel y leemos los parámetros en el archivo yaml.

Agregue un nuevo método en la herramienta commons/yaml_util.py:

#读取测试用例def read_testcase_yaml(yaml_path):    with open(get_object_path()+yaml_path,encoding='utf-8') as f:        value = yaml.load(f,Loader=yaml.FullLoader)        return value

Escriba los parámetros requeridos por la solicitud de obtención en el archivo pm_get_token.yaml:​​​​​​​​

-  name: 获取token鉴权码  request:    method: get    url: https://api.weixin.qq.com/cgi-bin/token    params:      grant_type: client_credential      appid: wx8e8b67ced3c4b884      secret: 27c524bd9ca932e31e229be30b0a805b  validate: none

Para modificar el caso de uso, se leen los parámetros del archivo yaml:​​​​​​​​

# 测试类名必须以Test开头,并且不能有init方法import pytestimport requests
from test6.commons.yaml_util import read_testcase_yaml
class TestProductApi:
    #测试方法必须以test开头    @pytest.mark.parametrize("args_name", read_testcase_yaml('/testcase/pm_get_token.yaml'))    def test_get_token(self, args_name):        url = args_name['request']['url']        params = args_name['request']['params']        res = requests.get(url=url,params=params)        print(res.json()['access_token'])

La interfaz se llama con éxito y el token se genera con éxito

7. Aunque todos los parámetros están escritos en el archivo yaml, el código sigue siendo un poco complicado.

Hagamos la segunda encapsulación y creemos un nuevo /commons/request_util.py,

Contiene el formato de archivo de verificación yaml:​​​​​​​​

import reimport requests
class RequestUtil:    session = requests.session()    #规范YAML测试用例    def standard_yaml(self,caseinfo):        caseinfo_keys = caseinfo.keys()        # 判断关键词是否完整        if "name" in caseinfo_keys and "request" in caseinfo_keys and "validate" in caseinfo_keys:            cs_request = caseinfo['request']            cs_request_keys = cs_request.keys()            if "method" in cs_request_keys and "url" in cs_request_keys:                method = cs_request.pop("method") #pop-删除列表里最后一个并且返回这个值                url = cs_request.pop("url")                res = self.send_request(method,url,**cs_request)                # return_text = res.text                print(res.json()['access_token'])                return res            else:                print("二级关键字必须包含:method,url")        else:            print("一级关键字必须包含:name,request,validate")
    #统一请求封装    def send_request(self, method, url, **kwargs):        method = str(method).lower()        res = RequestUtil.session.request(method,url,**kwargs)        return res

Cree un nuevo caso de uso, llame a la herramienta request_util,

Esta vez solo necesitas una oración para solicitar la interfaz:

 @pytest.mark.parametrize("caseinfo", read_testcase_yaml('/testcase/pm_get_token.yaml'))    def test_get_token2(self, caseinfo):        RequestUtil().standard_yaml(caseinfo)

Verifique los resultados, y el token también se puede obtener con éxito, pero el código es mucho más simple y el token se puede obtener en dos casos de uso:

La siguiente es la información de apoyo. Para los amigos que hacen [pruebas de software], debería ser el almacén de preparación más amplio y completo. Este almacén también me acompañó en el viaje más difícil. ¡Espero que también pueda ayudarlos!

subprograma de entrevista de prueba de software

¡El banco de preguntas de prueba de software maximizado por millones de personas! ! ! ¡Quién es quién sabe! ! ! El mini programa de cuestionarios más completo de toda la red, puedes usar tu teléfono móvil para hacer los cuestionarios, en el metro o en el autobús, ¡enróllalo!

Se cubren las siguientes secciones de preguntas de la entrevista:

1. Teoría básica de las pruebas de software, 2. web, aplicación, pruebas de funciones de interfaz, 3. red, 4. base de datos, 5. linux

6. web, aplicación, automatización de interfaz, 7. pruebas de rendimiento, 8. conceptos básicos de programación, 9. preguntas de la entrevista de hora, 10. preguntas de prueba abiertas, 11. pruebas de seguridad, 12. conceptos básicos de informática

Método de adquisición de información:

Supongo que te gusta

Origin blog.csdn.net/myh919/article/details/131831566
Recomendado
Clasificación