关于登录模块与我的商铺关联的接口测试自动化
新建一个config包,下面新建一个config.py文件
#-*- coding: utf-8 -*- #@File : configs.py #@Time : 2020/10/1 8:22 #@Author :xintian #@Email :1442987166@qq.com #@Software :PyCharm HOST='http://121.41.14.39:8082' #ip配置
新建一个lib包,下面新建一个apilib包,再新建一个login_j.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)会报错
在上面的apilib包下面,再新建一个myShop.py文件
#-*- coding: utf-8 -*- #@File : myShop.py #@Time : 2020/10/5 9:40 #@Author : xianyu #@Email : 1442987166@qq.com #@Software : PyCharm from configs.config import HOST from lib.apilib.login_j import Login import requests import pprint class MyShop(): """模块类,我的商店""" def __init__(self,inToken): self.header={'Authorization':inToken} #请求头 def shop_list(self,inData): #列出商铺 payload=inData url=f'{HOST}/shopping/myShop' resp=requests.get(url,headers=self.header,params=payload) return resp.json() if __name__ == '__main__': #1.登录成功 token=Login().login('''{"username":"sq0129","password":"18792733468wj"}''',getToken=True) #2.列出商铺 res=MyShop(token).shop_list({'page':1,'limit':20}) pprint.pprint(res)
再新建一个tools包,下面新建一个getExcelData.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 get_excelData2(sheetName,caseName): ''' :param sheetName: 表名 :param caseName: 某一个接口的用例名称 :return: ''' resList = [] #1-excel表路径 excelDir = '../data/外卖系统接口测试用例.xls' #2- 打开excel对象--formatting_info=True 保持样式 workBook = xlrd.open_workbook(excelDir,formatting_info=True) #3- 获取某一个指定的表 workSheet = workBook.sheet_by_name(sheetName) #4- 读取一列数据 # print(workSheet.col_values(0)) idx=0 #开始的下标 for one in workSheet.col_values(0): if caseName in one: reqBodyData = workSheet.cell(idx,9).value #请求body respData = workSheet.cell(idx,11).value #响应数据 resList.append((json.loads(reqBodyData),json.loads(respData))) #封装一个列表里嵌套元组 idx += 1 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_myShop.py文件
#-*- coding: utf-8 -*- #@File : test_myShop.py #@Time : 2020/10/5 10:00 #@Author : xianyu #@Email : 1442987166@qq.com #@Software : PyCharm from lib.apilib.login_j import Login from lib.apilib.myShop import MyShop from tools.getExcelData import get_excelData2 import pytest class TestMyShop(): """测试我的商铺,逻辑关系类""" def setup_class(self): """类初始化""" self.token=Login().login('''{"username":"sq0129","password":"18792733468wj"}''',getToken=True) @pytest.mark.parametrize('inData,respData',get_excelData2('我的商铺','listshopping')) def test_shop_list(self,inData,respData): res=MyShop(self.token).shop_list(inData) print('实际响应结果===========》',res) if res.get('code') !=None: assert res['code'] == respData['code'] else: assert res['error'] == respData['error'] if __name__ == '__main__': pytest.main(['test_myShop.py','-s']) ''' pytest输出信息 . 表示用例成功 F 表示用例失败 E 表示语法错误 '''