在上一节 (007、【前程贷—简化版,实战 02】 封装 requets ,便于 用pytest的参数化 (或者 ddt ) ) 已经对 requests 进行了二次封装 ,本节主要演示用 pytest 实现参数化。
a、项目层级结构如下:
b、my_requests.py 代码如下:
# -*- coding:utf-8 -*- # Author: Sky # Email: 2780619724@qq.com import requests class MyRequests: def __init__(self): """ 初始化方法,初始化请求头; """ self.headers = {"X-Lemonban-Media-Type": "lemonban.v2"} # 方法 post/put... json=xxx, get方法用 params=xxx def send_reuqests(self, method, url, req_data, token=None): """ 调用requests库里面的方法去发起请求,并得到响应结果; :param url: 接口url :param method: 请求方法,get,psot :param req_data: 请求数据 :param token: 如果有token,添加token """ # 如果有token,添加token self.__del_header(token) # 注意 request() 方法是不带s的,requests库是带s的; if method.upper() == "GET": resp = requests.request(method, url, params=req_data, headers=self.headers) return resp if method.upper() == "POST": # 为了便于学习,简单的认为就是用 json 格式传; resp = requests.request(method, url, json=req_data, headers=self.headers) return resp def __del_header(self, token=None): """ 如果有token,添加token处理 :param token: 如果有token,添加token处理 """ if token: self.headers["Authorization"] = f"Bearer {token}"
c、test_my_requests.py 代码如下:
import my_requests import pytest cases = [ {"method": "POST", "url": "http://api.lemonban.com/futureloan/member/register", "req_data": {"mobile_phone": "15161886677","pwd": "12345678"}}, {"method": "POST", "url": "http://api.lemonban.com/futureloan/member/login", "req_data": {"mobile_phone": "15161886677","pwd": "12345678"}}, {"method": "POST", "url": "http://api.lemonban.com/futureloan/member/recharge", "req_data": {"member_id": None, "amount": "1000"}} ] mrq = my_requests.MyRequests() # pytest.mark.parametrize("item", cases) 中的 "item" 必须 和 def test_my_requests(item): 中的item 名字一样 @pytest.mark.parametrize("item", cases) def test_my_requests(item): resp = mrq.send_reuqests(item[‘method‘], item[‘url‘], item[‘req_data‘]) print(resp.json())
执行结果如下: