颠覆你的Python实践Python接口自动化测试Python 开发

[接口测试-实战]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

这个脚本想要实现的目标

  1. 导出指定的接口数据(包括指定的接口对象,指定的level等级)
  2. 导出数据到excel(这里暂时设计的是一张表,因为如果接口比较多的情况下,每个接口都占用一个sheet的话,个人感觉不喜欢)
  3. 如果接口测试的结果为false,需要将数据进行高亮显示(代码还未实现)
  4. 统计报表(代码未实现,后面补充)

代码

修改之前opmysql.py文件的__init__()

修改opmysql.py

下面是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接口自动化测试》,那里不止有知识,还有一个超级好听的声音。

上一篇下一篇

猜你喜欢

热点阅读