持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个like呀
回顾
上期我们成功解析了rap2接口文档,生成相应的数据,这期我们将数据生成Excel接口自动化用例吧~
Excel分析
我们先来确定一下,一份接口自动化用例具体有哪些要素?接口id,接口标题,接口描述,接口路径,接口请求方式,接口请求头,接口请求参数(路径参数或者body参数),断言数据,断言结果,实际返回结果,后置动作等。
Excel生成
确定以上要素之后,可以开始来实现了Python 操作Excel的包挺多的,譬如xlrd和xlwt,openpyxl和pandas等。这里我用的是openpyxl大家可根据实际需求自行抉择
class CreateCases(object):
"""
从rap2中导入数据
"""
def __init__(self):
self.title = ['id','title','description','url','method','headerData','queryData','data','assertAction','actual','result','rearAction']
# self.title = ['用例ID','用例标题','用例描述','接口路径','请求方式','请求头','查询参数','请求参数','断言操作','实际请求结果','测试结果','后置操作']
#这里可根据实际,选择中文的列名还是英文的
#高度
self.height = 25.0
#宽度
self.width = 25.0
# 设置填充颜色
self.fill = PatternFill('solid', fgColor='00ff00')
# 设置字体
self.font = Font(u'宋体', size=12)
# 设置居中
self.alignment = Alignment(horizontal='center', vertical='center')
# 设置框线
self.border = Border(left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000'))
def create_file(self, id, cookies=None, module=None):
#获取接口文档数据和文件名
data, name = Rap2Parse.api_data(id, cookies, module)
#文件名拼接uuid,uuid为了后续做成接口化,避免文件名重复
file_name = f"{name}-{uuid.uuid4().hex}.xlsx"
#生成文件路径
self.file_path = os.path.join(DOWNLOAD_PATH, file_name)
wb = Workbook()
for index, dto in enumerate(data):
#根据模块名生成各个sheet页
wb.create_sheet(dto['modules'], index)
ws = wb[dto['modules']]
for column, title in enumerate(self.title):
#设置列名
ws_obj = ws.cell(1, column+1, title)
ws_obj.font = self.font
ws_obj.alignment = self.alignment
ws_obj.fill = self.fill
ws_obj.border = self.border
#设置列宽
ws.column_dimensions[get_column_letter(column+1)].width = self.width
# 设置行高=25
ws.row_dimensions[1].height = self.height
#遍历case_data数据
for i, data in enumerate(dto['cases_data']):
for k,v in enumerate(data.keys()):
if isinstance(data[v],dict):
data[v] = json.dumps(data[v],ensure_ascii=False)
#根据行列写入数据
ws_obj = ws.cell(i+2, k+1, data[v])
ws_obj.font = self.font
ws_obj.alignment = self.alignment
ws.row_dimensions[i+2].height = self.height
#openpyxl 默认会生成一个sheet页
ws_sheet = wb["Sheet"]
#强迫症将其删除
wb.remove(ws_sheet)
#保存文件
wb.save(self.file_path)
wb.close()
return file_name
def write_data(self, sheet_name, row, column, value):
"""
:param sheet_name: 工作表
:param row: 行
:param column: 列
:param value: 值
:return:
"""
wb = load_workbook(self.file_path)
ws = wb[sheet_name]
ws_obj = ws.cell(row, column, value)
ws_obj.font = self.font
ws_obj.alignment = self.alignment
ws.row_dimensions[row].height = self.height
wb.save(self.file_path)
wb.close()
if __name__ == '__main__':
create_excel = CreateCases()
create_excel.create_file(407)
Excel生成展示:
后续扩展
- 将数据生成yaml格式接口自动化用例
- 将数据生成生成jmeter脚本(jmx)
- 将上述功能,做成api,开放给小伙伴使用
- 对接api,做成前端页面,让小伙伴体验更完美
本期介绍了如何利用解析回来的数据生成Excel,我们下期再见👋🏻👋🏻👋🏻俾个like再走啦