接口自动化思路看这里
码云地址:https://gitee.com/AutoApi/apiauto
上一篇分享了整体的思路和架构。本文详细介绍应用层主要提供的服务。
应用层主要包含的功能及备注:
1、接口中心服务
介绍
主要提供接口请求服务,返回接口请求结果。主要代码展示
Interface(session,url, param=None,parammode='data', method='post', headers=None,verify=False, Response=True):
"""
封装的http请求方法,接受session url, param, method, verify, headers 发起http请求并返回接口返回的json
:param session: requests session 对象
:param url: 请求地址
:param param: 请求参数
:param parammode:请求参数传入方式 data/json
:param method: 请求方式 默认post
:param verify: ssl检验 默认关
:param headers: http headers
:param Response: 是否json格式response标志
:return: 接口返回内容/None
if method == 'POST':
logger.debug(f'请求方法为:%s'%method)
if parammode=='data':
logger.debug(f'请求参数类型为:%s' % parammode)
res = session.post(url, data=param, verify=verify, headers=headers)
elif parammode=='json':
logger.debug(f'请求参数类型为:%s' % parammode)
res = session.post(url, json=param, verify=verify, headers=headers)
elif method == 'GET':
logger.debug(f'请求方法为:%s' % method)
res = session.get(url, params=param, verify=verify, headers=headers)
return returnJson
2、校验中心服务
介绍
主要提供预期结果和实际结果请求服务,返回比对结果。
主要代码展示
def KeyExist(dict1,dict2):
n = 0
if dict1=={}:
return False
for key in dict1.keys():
if key in dict2.keys():
pass
n=n+1
if n==len(dict1):
return True
else:
return False
#判断dict2是否包含dict1
def Compare_ListDict(dick1, dick2):
flag = False
n = 0
keyexist=KeyExist(dick1, dick2)
if keyexist ==True:
for i in dick1.keys():
n=n+1
if dick1[i] != dick2[i]:
break
elif n==len(dick1):
flag = True
elif dick1=={}:
flag = True
else:
pass
return flag
"""判断sql结果是否为()"""
def JudgeSqlEmpty(sql,env):
'''
:param sql: 需要执行sql
:param env: 执行环境
:return: 执行结果:true或者false
'''
try:
result=DBmananger(env).callMysql(sql)
logger.debug(result)
except Exception as e:
logger.error(e)
result=()
if result==():
return False
else:
return True
3、数据处理服务
主要提供excle读、写、格式化等服务。
主要代码展示
def AssembleCase(filepath,newexcelPath):
'''
测试用例组装工厂
:return: 测试用例
'''
#新增同名excel、sheet
test = ExcelHander(filepath)#实例化
add_sheet = test.sheet_names#获取sheetname列表:['sheet1','sheet2']
test.CreateExcel(newexcelPath, add_sheet)#创建excel及sheet(cope原excel新建空的execle)
#给excel填充数据
for i in range(len(add_sheet)):
test.CopeExcel( filepath, newexcelPath, i)
#按sheet分组,组装request数据
wb = xlrd.open_workbook(newexcelPath) # 加载新excel
sheet_names = wb.sheet_names() # 获取excel所有sheet名集合形如:['sheet1', 'sheet2', 'sheet3']
caselist=[]
for i in range(len(sheet_names)):
caselist.append(test.ExcelDick(sheet_names[i]))#返回所有sheet集合,形如ExcelDick[{'sheetName':[{列名:values},{列名:values}]},{'sheetName':[{列名:values},None]
#接口请求数据
return caselist
def excleFormat(filepath):
'''
filepath 格式化excle
:return:
excel表头宋体斜体加粗背景色blue 12号 6e6fff
其他内容宋体背景色无 11号 ffffff
成功的 宋体背景色绿色 11号 23ff00
失败 宋体背景色绿色 11号 ff0f06
'''
wb = xlrd.open_workbook(filepath)#加载
sheet_names = wb.sheet_names() # 获取excel所有sheet名集合形如:['test', 'test2', 'test3']
#######字体
if sheet_names==[]:
logger.debug('excel是空sheet')
pass
else:
for i,SheetName in enumerate(sheet_names) :
table = wb.sheet_by_name(SheetName)
logger.debug('获取第%s个sheet=%s'%(i,SheetName))
# 获取总行数
rowNum = table.nrows
logger.debug('行数:%s'%(rowNum))
# 获取总列数
colNum = table.ncols
logger.debug('列数:%s' % (colNum))
name='Times New Roman'
if rowNum<1:
logger.debug('空sheet')
pass
else:
for m in list(range(1, rowNum + 1)):
for n in list(range(97, 97 + colNum)): # 字母a=97
if m==1:
n = chr(n)
postition = '%s%d' % (n, m)
color='6e6fff'
bold=True
italic=True
size=12
logger.debug('格式第一行数据')
wordFormat(filepath, postition, size, name, bold, italic, i)
fgColor='6e6fff'
backFormat(filepath,m, ord(n)-96, fgColor, i)
else:
n = chr(n)
postition = '%s%d' % (n, m)
color = '6e6fff'
bold = False
italic = False
size = 11
logger.debug('格式化%s行数据'%(m))
wordFormat(filepath, postition, size, name, bold, italic, i)
cell_value = table.cell_value(m-1,10)
print(m-1)
print(cell_value)
if cell_value=='TRUE'or cell_value==1 :
fgColor='23ff00'
logger.debug('获取到结果:TRUE')
backFormat(filepath,m, 11, fgColor, i)
elif cell_value=='FLASE' or cell_value==0:
fgColor = 'ff0f06'
logger.debug('获取到结果:FLASE')
backFormat(filepath,m, 11, fgColor, i)
else:
logger.error('行号:%s ' % (m - 1))
logger.error('没有获取到结果:%s'%cell_value)
4、邮件发送中心
主要提供邮件发送服务。
5、测试报告中心