[接口测试-实战]04 用excel制作一个简单的报告
2017-09-13 本文已影响234人
亭子青年
来自一名不怎么会带娃,不怎么会测试的伪测试
今天继续整理关于《python3+mysql+requests》实战的第四篇文章,关于怎么使用excel制作一个简单的接口测试报告
文章列表
《[接口测试-实战]01 数据库封装-用于存储测试用例》
《[接口测试-实战]02 发送接口》
《[接口测试-实战]03 对接口结果做断言》
思路
使用的模块:openpyxl
安装:pip install openpyxl
官方文档:http://openpyxl.readthedocs.io/en/default/index.html
这个脚本想要实现的目标
- 导出指定的接口数据(包括指定的接口对象,指定的level等级)
- 导出数据到excel(这里暂时设计的是一张表,因为如果接口比较多的情况下,每个接口都占用一个sheet的话,个人感觉不喜欢)
- 如果接口测试的结果为false,需要将数据进行高亮显示(代码还未实现)
- 统计报表(代码未实现,后面补充)
代码
修改之前opmysql.py
文件的__init__()
下面是analysis.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'''
@author:ht
@desc:数据分析模块
(1)将接口数据写入到excel表格中
'''
from openpyxl import Workbook
from common.opmysql import OpMysql
from config.config import field_excel
from common.mylogging import mylogger
class analysis:
'''
数据分析类
'''
def __init__(self,excelname):
'''
初始化
:param excelname:数据分析结果所保存的路径
:return:
'''
self.workBook_name = excelname
# 根据指定的接口和level导出数据到excel,每个接口会设置级别,传入的数据格式为tuple
def write_case_to_excel(self,interfaces,levels):
'''
根据传入的参数进行导出数据
:param interfaces: tuple-需要导出的接口,用tuple来组织内容
:param levels: tuple-需要导出的level,用tuple来组织内容
:return:
1.200:执行成功
{"resultCode": 200, "message": "导出excel成功", "content": ""}
2.300:传入参数格式有误
{"resultCode": 300, "message": "导出excel失败,请检查参数", "content": ""}
4.400:出现异常信息
{"resultCode": 400, "message": "导出excel失败,请查看log", "content": ""}
'''
result = None
try:
# 内存中创建一个excel
wb = Workbook()
ws = wb.active
# 读取配置文件中保存的column的名字,用于写入到excel表的第一行做header
ws.append(field_excel)
ws.title = "case_data"
opmysql= OpMysql(return_type="tuple")
# 构造sql语句
sql_str = ""
params = []
if isinstance(interfaces,tuple) and isinstance(levels,tuple):
if len(interfaces) == 1: # interfaces只是包含了一个接口
if len(levels) == 1: # 接口的levels只包含了一个等级
sql_str = "SELECT * FROM case_interface WHERE name_interface in (%s) AND exe_level in (%s)"
params.append(interfaces[0])
params.append(levels[0])
else:# interfaces只有一个接口,但是查询多个levels的用例
sql_str = "SELECT * FROM case_interface WHERE name_interface in (%s) AND exe_level in %s"
params.append(interfaces[0])
params.append(levels)
else:
if len(levels) == 1: # interfaces多个接口,接口的levels只包含了一个等级
sql_str = "SELECT * FROM case_interface WHERE name_interface in %s AND exe_level in (%s)"
params.append(interfaces)
params.append(levels[0])
else:# interfaces多个接口,但是查询多个levels的用例
sql_str = "SELECT * FROM case_interface WHERE name_interface in %s AND exe_level in %s"
params.append(interfaces)
params.append(levels)
# 执行sql语句获取数据
case_data_s = opmysql.select_all(sql_str, params=params)
# 写入excel表格(将所有接口数据导出到一个表中)
for case_data in case_data_s:
ws.append(case_data)
wb.save(filename=self.workBook_name)
result = {"resultCode": 200, "message": "导出excel成功", "content": ""}
else:
mylogger.info("**********")
mylogger.info("[write_case_to_excel]-params-(self,interfaces=%s,levels=%s)"%(interfaces,levels))
mylogger.info("[write_case_to_excel]:Parameter type error")
mylogger.info("**********")
result = {"resultCode": 300, "message": "导出excel失败,请检查参数", "content": ""}
except BaseException as e:
mylogger.info("**********")
mylogger.info("[write_case_to_excel]-params-(self,interfaces=%s,levels=%s)" % (interfaces, levels))
mylogger.info("**********")
mylogger.exception(e)
result = {"resultCode": 400, "message": "导出excel失败,请查看log", "content": ""}
finally:
return result
if __name__ == "__main__":
# test
sis = analysis("demo,xlsx")
print(sis.write_case_to_excel(("anything",),(0,)))
print(sis.write_case_to_excel(["anything"], (0,)))
我要提醒你
之后我会更一篇更加详细的demo,如果不出意外的话,你可以直接拿来使用。
再次感谢大婶,感谢川叔提供的学习平台,也推荐大家都去听听《千聊-颠覆你的python接口自动化测试》,那里不止有知识,还有一个超级好听的声音。