问题1:做接口测试,常常需要将上一个接口的值传入到下一个接口中,这里使用了jsonPath语法来解决;

问题2:发送请求前,常常需要传入很多变量,这里变量不一定是上一个接口的响应,有可能是时间、计算后的数据等。这里使用替换字符串来解决。

问题3:接口发送是,涉及到很多JSON格式问题,以下也是使用函数来解决。

问题4:注意使用python跑接口测试前, 需把fiddler等其它网络代理给关了,否则无法跑测试 

 

1. 创建excel,拟定好excel文件格式。

python 数据驱动 怎么上下游传参 python接口自动化数据驱动_python 数据驱动 怎么上下游传参

 

2. 写两个方法,一个读取excel方法,一个发送请求方法,有注释

import json
import requests
from openpyxl import load_workbook


class ExcelOperate:
    """
    excel文件操作工具包
    """

    #  读取excel
    def read_excel(self, filename, sheet_name, cases_title):
        """
        :param filename: excel文件名称
        :param sheet_name: sheet页名称
        :param cases_title: 用例标题名称
        :return:
        """
        excel = load_workbook(rf'../data/{filename}')  # 读取excel 【如果使用相对路径,参照路径为调用这个方法的路径】
        sheet = excel[sheet_name]  # 读取sheet页
        data_list = []  # 定义空列表,将获取到excel的数据存放至此

        # 定义个false值,后面做判断用
        false = False

        # 遍历获取到的excel的值(行行遍历)
        for i in sheet.values:

            # 将(用例标题)为None的用例存放至data_list
            if false:
                if i[2] is None:
                    data_list.append(i)
                else:
                    break
            # 将(用例标题)为True的用例存放至data_list
            if str(i[2]) in cases_title:
                data_list.append(i)
                false = True

        #  将列表转换成元组,方便后面的接口方法接收
        tup1 = tuple(data_list)
        # 返回元组
        return tup1

# 接口请求方法
    def url_request(self, po, ur, he, da):
        """
        po请求方式,ur请求地址,he请求头,da请求体。传入的he和da必须是json格式文本
        json.dumps:转换成json格式,json.loads转换成python可识别的JSON格式,requests模块默认的是拉丁语,需要转换成utf-8
        有些请求头是空的, 有些请求体是空的, 所以用到if
        :param po: 请求方法
        :param ur: 请求地址
        :param he: 请求头
        :param da: 请求体
        :return:
        """
        if po and ur and he and da:
            res = getattr(requests, po)(
                url=ur,
                data=json.loads(json.dumps(da)).encode("utf-8"),
                headers=eval(he)
            )
            # 获取接口响应
            text_ = getattr(res, "text")
            # 返回接口响应(返回的是str)
            return text_
        if (he is None) and da:
            res = getattr(requests, po)(
                url=ur,
                data=json.loads(json.dumps(da)).encode("utf-8")
            )
            text_ = getattr(res, "text")
            return text_
        if (da is None) and he:
            res = getattr(requests, po)(
                url=ur,
                headers=eval(he)
            )
            text_ = getattr(res, "text")
            return text_
        if (he is None) and (da is None):
            res = getattr(requests, po)(
                url=ur
            )
            text_ = getattr(res, "text")
            return text_

 

 

 3. 然后就可以发送请求了。

# 实例化
ua = UrlClass()
# 调用read_excel方法,获取excel('1.登录')接口值
dt = ua.read_excel('1.登录')
# 调用url_request方法发送请求
ra = ua.url_request(dt[1], dt[2], dt[3], dt[4])
# 使用jsonpath语法, 提取token
token = jsonpath(json.loads(ra), "$.data.uucToken")
uuid = jsonpath(json.loads(ra), "$.data.uuid")

# 调用read_excel方法,获取excel('2.查询用户')接口值
dt2 = ua.read_excel('2.查询用户')
# 将token值替换自定义变量,替换后传回变量,以达到替换目的
dt2 = str(dt2).replace('test_2214', str(token[0]))
dt2 = str(dt2).replace('test_2215', str(uuid[0]))
# 替换变量需是str,调用接口请求需是元组, 所以替换完后需将str转成元组
dt2 = tuple(eval(dt2))
# 发送请求
ra2 = ua.url_request(dt2[1], dt2[2], None, None)
# 打印响应
print(ra2)