Python接口自动化之对测试用例进行读写实战
介绍一下项目:
外卖系统,商家端,进行登录和业务管理。
login.py
import requests
import hashlib
# 1.项目的服务器地址+端口号
from delivery.configs.config import HOST
# md5加密
def get_md5(password):
# 1.示例化md5加密对象
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
return md5.hexdigest()
# print(get_md5('xxxxxx'))
"""
登录接口的特性:
1- 作为普通的接口测试
2- 需要获取token给后续接口关联
"""
# 接口自动化项目实战
class Login:
# 2.封装登录函数
def login(self,inData,getToken=False):
# 1. url
url = f'{HOST}/account/sLogin'
# 2. 请求体---- 字典格式编辑
# 调用加密函数 字典修改值:字典名【键名】 = 新的值
inData['password'] = get_md5(inData['password'])
payload = inData # 可以不写
resp = requests.post(url, data=payload)
if getToken == True: #获取token值
return resp.json()['data']['token'] #token值
else:
return resp.json() #接口的响应值
if __name__ == '__main__':
res = Login().login({'username':'xxx','password':'xxxxx'},getToken=False)
print(res)
config.py
HOST ='http://xxxxx'
excelControl.py
import xlrd
import json
def get_excel_data(sheetName, caseName):
resList = [] # 存放excel读取结果
# 1- 获取excel路径
excelDir = '../data/delivery_excel-v1.0.xls'
# 2- 需要把excel加载到内存 --open --formatting_info=True 保持原样
workBook = xlrd.open_workbook(excelDir, formatting_info=True)
# 3- 获取对应的sheet
# print(workBook.sheet_names()) # 获取所有的sheet名称
workSheet = workBook.sheet_by_name(sheetName)
# 遍历第0列 --匹配
index = 0 # 遍历变量
for one in workSheet.col_values(0):
if caseName in one: # 判断
reqBodyData = workSheet.cell(index, 9).value # 请求体
respData = workSheet.cell(index, 11).value # 响应体
# 接口需要传递的是字典格式。excel读取是str,需要转换 str--json.loads() --字典
# resList.append((reqBodyData, respData)) # [(请求体1,响应体1),(请求体2,响应体2)]
resList.append((json.loads(reqBodyData), json.loads((respData))))
# 记录正确用例数据的下标 ---list
# 存储数据 --list
index += 1
return resList
from xlutils.copy import copy
# 写excel 1.新建空文件写入 2.已有的excel写入
def set_excel_data():
# 1-excel表路径
excelDir = '../data/delivery_excel-v1.0.xls'
# 2- 需要把excel加载到内存 --open --formatting_info=True 保持原样
workBook = xlrd.open_workbook(excelDir, formatting_info=True)
workBookNew =copy(workBook) #复制一个新的excel文件
workSheetNew = workBookNew.get_sheet(0) # 取复制出来的信excel文件对象的第一个子表 不能用名字只能用下标
return workBookNew,workSheetNew # 复制出来的excel对象,复制出来excel
def get_excel_rowNum(sheetName, caseName):
numList = [] # 存放excel正确行号
# 1- 获取excel路径
excelDir = '../data/delivery_excel-v1.0.xls'
# 2- 需要把excel加载到内存 --open --formatting_info=True 保持原样
workBook = xlrd.open_workbook(excelDir, formatting_info=True)
# 3- 获取对应的sheet
# print(workBook.sheet_names()) # 获取所有的sheet名称
workSheet = workBook.sheet_by_name(sheetName)
# 遍历第0列 --匹配
index = 0 # 遍历变量
for one in workSheet.col_values(0):
if caseName in one: # 判断
numList.append(index)
# 记录正确用例数据的下标 ---list
# 存储数据 --list
index += 1
return numList
if __name__ == '__main__':
# sheet名称
res = get_excel_data('登录模块', 'Login')
# res = get_excel_data('我的商铺', 'listshopping')
for one in res:
print(one)
print(res)
test_login.py
# 1- 读取excel数据
from delivery.tools.excelControl import get_excel_data, set_excel_data, get_excel_rowNum
from delivery.libs.login import Login
workBookNew, workSheetNew = set_excel_data() # 复制出来的表文件对象,子表对象
resList = get_excel_data('登录模块', 'Login')
numList = get_excel_rowNum('登录模块', 'Login')
for one in resList: # [(body1,resp1),(),()]
print(one)
# 2- 把excel读取的数据关联到请求代码里
for one in range(0, len(resList)):
res = Login().login(resList[one][0]) # 传入对应行的body
print(res)
if one in numList: # 判断是否是有效数据
# 3- 实际与预期相对比,结果写入测试结果到excel -做判断 --断言
if res['msg'] == resList[one][1]['msg']:
# 写入成功!
workSheetNew.write(one + 1, 12, 'pass') # workSheeetNew.write(行号,列号,值)
else:
# 写入没有成功!
workSheetNew.write(one + 1, 12, 'fail') # workSheeetNew.write(行号,列号,值)
workBookNew.save('./res.xls')
运行成功
目录