python之excel数据驱动,接口自动化
问题1:做接口测试,常常需要将上一个接口的值传入到下一个接口中,这里使用了jsonPath语法来解决;
问题2:发送请求前,常常需要传入很多变量,这里变量不一定是上一个接口的响应,有可能是时间、计算后的数据等。这里使用替换字符串来解决。
问题3:接口发送是,涉及到很多JSON格式问题,以下也是使用函数来解决。
问题4:注意使用python跑接口测试前, 需把fiddler等其它网络代理给关了,否则无法跑测试
1. 创建excel,拟定好excel文件格式。
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现