美文网首页颠覆你的Python实践Python接口自动化测试Python 开发
[接口测试-实战]04 用excel制作一个简单的报告

[接口测试-实战]04 用excel制作一个简单的报告

作者: 亭子青年 | 来源:发表于2017-09-13 00:15 被阅读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接口自动化测试》,那里不止有知识,还有一个超级好听的声音。

    相关文章

      网友评论

      本文标题:[接口测试-实战]04 用excel制作一个简单的报告

      本文链接:https://www.haomeiwen.com/subject/bxnhsxtx.html