新建一个lib包,在下面新建一个apilib自包,在新建一个login.py文件
import hashlib
import requests
import json
from configs.config import HOST
def get_md5(psw):
md5= hashlib.md5() #实例化对象
md5.update(psw.encode('utf-8')) #进行加密操作
return md5.hexdigest() #拿到加密字符串,返回的是十六进制
#实现token登录
class Login:
def login(self,inData,getToken=True): #实例方法---可以直接接收json字符串
url=f"{HOST}/account/sLogin" #路径
#inData=json.loads(inData) #json转化为字典
inData["password"]=get_md5(inData["password"])
payload = inData
resp=requests.post(url,params=payload)
if getToken: #获取token模式
return resp.json()['data']['token']
else: #获取响应数据--返回值--字典格式
return resp.json()
if __name__ == '__main__':
# 这里必须符合json格式,所以必须键和值双引号
print(Login().login('''{"username":"sq0129","password":"18792733468wj"}'''))
#print(Login.login('''{"username":"sq0129","password":"18792733468wj"}''',getToken=False))
#注意事项:inData='''{"username":"sq0001","password":"123456"}''' 必须是json格式,不然不能使用
#json.loads(inData)会报错
新建一个data包,下面建一个后缀名为 外卖系统接口测试用例.xls的用例表
然后新建一个 tools包,下面新建一个get_ExcelData.py文件
#-*- coding: utf-8 -*-
#@File : getExcelData.py
#@Time : 2020/10/1 10:01
#@Author : xianyu
#@Email : 1442987166@qq.com
#@Software : PyCharm
import xlrd
import json
from xlutils.copy import copy
#打开表(读取表),根据行数获取数据
def get_excelData(sheetName,startRow,endRow):
resList=[]
#路径
excelDir='../data/外卖系统接口测试用例.xls'
#formatting_info=True保持样式
workBook = xlrd.open_workbook(excelDir,formatting_info=True)
# worksheet = workBook.sheet_names() #获取所有的sheet页名称
#使用sheet名称获取指定的sheet页
workSheet = workBook.sheet_by_name(sheetName) #不要用编号获取,为了以后便于维护,建议用sheet页名字
for one in range(startRow-1,endRow):
#读取单元格
reqBodyData=workSheet.cell(one,9).value #请求body
reqpData = workSheet.cell(one,11).value #相应数据
resList.append((reqBodyData,reqpData)) #封装一个列表
return resList
#写入表
def set_excelData():
resList=[]
#路径
excelDir='../data/外卖系统接口测试用例.xls'
#cell_overwrite_ok参数为True,则同一个单元格可以覆盖,默认为False
workBook = xlrd.open_workbook(excelDir,formatting_info=True)
workBookNew = copy(workBook) #复制一个新excel文件对象 注意这个是wb copy用来专门copy、excel的
workSheetNew = workBookNew.get_sheet(0) #取复制出来的新excel文件对象的第一个子表#copy出来的不能用name
return workBookNew,workSheetNew #复制出来的excel对象,复制出来excel对象的第一个子表
if __name__ == '__main__':
get_excelData2('登录模块','Login')
for one in get_excelData2('登录模块','Login'):
print(one)
#注意
#excel用例里面的false要符合json格式,并不是python格式
#用例里面全部写字典,因为不管表单还是json都可以用
再新建一个testCase包,下面新建一个test_login.py文件
#通过用例名称来获取数据,这样做的好处是添加了用例不需要修改代码,前提是用例的名称一致
import json
from tools.getExcelData import get_excelData2,set_excelData
from lib.apilib.login_j import Login
workBookNew,workSheetNew = set_excelData() #元组
datalist =get_excelData2('登录模块','Login') #读取响应[(body,响应数据),(),()]
#关联请求
for one in range(0,len(datalist)):
res = Login().login(datalist[one][0],False)
# print(res) #实际响应结果
# print("===========")
# print(json.loads(one[1]))
#print(datalist[one][1])
#print(one[1])
#实际结果与预期结果进行比较
if res['msg'] == datalist[one][1]['msg']:
print("-------测试用例通过--------")
workSheetNew.write(one+1,12,'pass')#(行号、列号、字符串内容)
else:
print("--------测试用例失败---------")
workSheetNew.write(one+1, 12,'fail')
#写结果
workBookNew.save("../data/res3.xls")
执行test_login.py文件,就可以实现通过获取excel行数的用例数据,测试登录接口,并且写入实际结果