2021-05-07编写测试报告EXCEL附件

# coding:utf-8

from email.mime.applicationimport MIMEApplication

from email.mime.multipartimport MIMEMultipart

import xlsxwriter, openpyxl, os, time

# from tools.configData import configKV

# from tools.configData import configKV

from openpyxlimport styles

from config.load_configimport LoadConfig

from config.send_reportimport SendTestReport

from util.send_emailimport SendEmail

class reportExcel(object):

# lastrow=0

    def get_format(self, wd, option={}):

return wd.add_format(option)

# 设置居中样式

    def get_format_center(self, wd, num=1):

return wd.add_format({'align':'left', 'valign':'vcenter', 'border': num})

def set_border_(self, wd, num=1):

return wd.add_format({}).set_border(num)

# 写数据

    def _write_center(self, worksheet, cl, data, wd):

return worksheet.write(cl, data, self.get_format_center(wd))

# 总览表,饼图表示

    def overview_init(self, worksheet, workbook,

                      data):

# data = {"test_name": "MMS","test_sum": 110,"test_success": 80,"test_failed": 20,"test_not":10,'defect_rate':18,'total_serious':6,'total_medium':5,'total_commonly':8}

        # 设置列行的宽高

        worksheet.set_column("A:A", 15)# 设置一列或者多列单元属性

        worksheet.set_column("B:B", 15)

worksheet.set_column("C:C", 15)

worksheet.set_column("D:D", 15)

worksheet.set_column("E:E", 15)

worksheet.set_column("F:F", 15)

worksheet.set_column("G:G", 15)

worksheet.set_column("H:H", 15)

worksheet.set_column("I:I", 15)

# worksheet.set_row(1, 30)

# worksheet.set_row(2, 30)

# worksheet.set_row(3, 30)

        define_format_H1 =self.get_format(workbook,

                                          {'bold':True, 'font_size':18})

# 在工作表中创建一个新的格式对象来格式化单元格,实现加粗,字体18号大小

        define_format_H2 =self.get_format(workbook,

                                          {'bold':True, 'font_size':14})

# 在工作表中创建一个新的格式对象来格式化单元格,实现加粗,字体14号大小

        define_format_H1.set_border(1)# 边框加粗1

        define_format_H2.set_border(1)

define_format_H1.set_align("center")

define_format_H2.set_align("center")

define_format_H2.set_bg_color("blue")# 填充背景颜色蓝色

        define_format_H2.set_color("#ffffff")# 填充单元格内容的颜色为白色

        worksheet.merge_range('A1:I1', '测试结果总概况', define_format_H1)

worksheet.merge_range('A2:I2', '测试概括', define_format_H2)

# worksheet.merge_range('A3:A6', '这里放图片', self.get_format_center(workbook))

        self._write_center(worksheet, "A3", '项目名称', workbook)

self._write_center(worksheet, "B3", "总用例数", workbook)

self._write_center(worksheet, "C3", "通过总数", workbook)

self._write_center(worksheet, "D3", "失败总数", workbook)

self._write_center(worksheet, "E3", "未测试总数", workbook)

self._write_center(worksheet, "F3", '缺陷率(%)', workbook)

self._write_center(worksheet, "G3", "严重缺陷", workbook)

self._write_center(worksheet, "H3", "中等缺陷", workbook)

self._write_center(worksheet, "I3", "一般缺陷", workbook)

self._write_center(worksheet, "A4", data['test_name'], workbook)

self._write_center(worksheet, "B4", data['test_sum'], workbook)

self._write_center(worksheet, "C4", data['test_success'], workbook)

self._write_center(worksheet, "D4", data['test_failed'], workbook)

self._write_center(worksheet, "E4", data['test_not'], workbook)

self._write_center(worksheet, "F4", data['defect_rate'], workbook)

self._write_center(worksheet, "G4", data['total_serious'], workbook)

self._write_center(worksheet, "H4", data['total_medium'], workbook)

self._write_center(worksheet, "I4", data['total_commonly'], workbook)

self.overall_pie(workbook, worksheet)

self.bug_grade_pie(workbook, worksheet)

# bug分布表,柱状图表示

    def distribution_init(self, worksheet, workbook,

                          datacolumn):# {'load-exchange-rate':{'serious':3,'medium':5,'commonly':2,'percent':30},'classify':{'serious':3,'medium':5,'commonly':2,'percent':30}.....}

        define_format_H1 =self.get_format(workbook,

                                          {'bold':True, 'font_size':18})# 在工作表中创建一个新的格式对象来格式化单元格,实现加粗,字体18号大小

        define_format_H2 =self.get_format(workbook,

                                          {'bold':True, 'font_size':14})# 在工作表中创建一个新的格式对象来格式化单元格,实现加粗,字体14号大小

        define_format_H1.set_border(1)# 边框加粗1

        define_format_H2.set_border(1)

define_format_H1.set_align("center")

define_format_H2.set_align("center")

define_format_H2.set_bg_color("blue")# 填充背景颜色蓝色

        define_format_H2.set_color("#ffffff")# 填充单元格内容的颜色为白色

        worksheet.merge_range('A20:F20', '各个接口缺陷分布情况', define_format_H1)

worksheet.merge_range('A21:F21', '缺陷分布', define_format_H2)

self._write_center(worksheet, "A22", '接口名称', workbook)

self._write_center(worksheet, "B22", '严重缺陷', workbook)

self._write_center(worksheet, "C22", "中等缺陷", workbook)

self._write_center(worksheet, "D22", "一般缺陷", workbook)

self._write_center(worksheet, "E22", "缺陷总数", workbook)

self._write_center(worksheet, "F22", "百分比(%)", workbook)

keys_interface = datacolumn.keys()

col =22

        for interfaceNamein keys_interface:

col = col +1

            self._write_center(worksheet, 'A' +str(col), interfaceName, workbook)

self._write_center(worksheet, 'B' +str(col), datacolumn[interfaceName]['serious'], workbook)

self._write_center(worksheet, 'C' +str(col), datacolumn[interfaceName]['medium'], workbook)

self._write_center(worksheet, 'D' +str(col), datacolumn[interfaceName]['commonly'], workbook)

self._write_center(worksheet, 'E' +str(col), datacolumn[interfaceName]['total'], workbook)

self._write_center(worksheet, 'F' +str(col), datacolumn[interfaceName]['percent'], workbook)

self.bug_grade_column(workbook, worksheet, col)

# self.lastrow=col

    # 生成总体情况的饼形图

    def overall_pie(self, workbook, worksheet):

chart1 = workbook.add_chart({'type':'pie'})

chart1.add_series({

'name':'总体情况图',

            'categories':'=测试总况!$C$3:$E$3',

            'values':'=测试总况!$C$4:$E$4',

        })

chart1.set_title({'name':'总体情况图'})

chart1.set_style(10)

chart1.set_size({'width':400, 'height':250})

worksheet.insert_chart('A6', chart1)

# 生成缺陷情况的饼形图

    def bug_grade_pie(self, workbook, worksheet):

chart1 = workbook.add_chart({'type':'pie'})

chart1.add_series({

'name':'各严重程度缺陷所占比例',

            'categories':'=测试总况!$G$3:$I$3',

            'values':'=测试总况!$G$4:$I$4',

        })

chart1.set_title({'name':'各严重程度缺陷所占比例'})

chart1.set_style(10)

chart1.set_size({'width':400, 'height':250})

worksheet.insert_chart('E6', chart1)

# 柱状图统计各个接口各种严重程度的缺陷数

    def bug_grade_column(self, workbook, worksheet, lastrow):

chart1 = workbook.add_chart({"type":"column"})

chart1.add_series({

"name":"=测试总况!$B$22",  # 图例项

            "categories":"=测试总况!$A$23:$A$" +str(lastrow),  # X轴 Item名称

            "values":"=测试总况!$B$23:$B$" +str(lastrow)# X轴Item值

        })

chart1.add_series({

"name":"=测试总况!$C$22",

            "categories":"=测试总况!$A$23:$A$" +str(lastrow),

            "values":"=测试总况!$C$23:$C$" +str(lastrow)

})

chart1.add_series({

"name":"=测试总况!$D$22",

            "categories":"=测试总况!$A$23:$A$" +str(lastrow),

            "values":"=测试总况!$D$23:$D$" +str(lastrow)

})

# 添加柱状图标题

        chart1.set_title({"name":"各接口缺陷数分布图"})

# Y轴名称

        chart1.set_y_axis({"name":"缺陷数"})

# X轴名称

        chart1.set_x_axis({"name":"缺陷严重等级"})

# 图表样式

        chart1.set_style(11)

if (lastrow <29):

lastrow =28

        chart1.set_size({'width':80 * (lastrow -23), 'height':388})

worksheet.insert_chart('A' +str(lastrow), chart1, {'x_offset': (lastrow -22) *5, 'y_offset':25})

# 将filename1的sheetname1的内容复制到filename2的sheetname2中

    # def replace_xls(self, filename1, sheetname1, filename2, sheetname2):

#    if (os.path.exists(filename1) and os.path.exists(filename2)):

#        wb1 = openpyxl.load_workbook(filename1)

#        wb2 = openpyxl.load_workbook(filename2)

#        sheets1 = wb1.sheetnames

#        sheets2 = wb2.sheetnames

#        if (sheetname1 in sheets1 and sheetname2 in sheets2):

#            sheet1 = wb1.get_sheet_by_name(sheetname1)

#            sheet2 = wb2.get_sheet_by_name(sheetname2)

    #            max_row = sheet1.max_row  # 最大行数

    #            value_dict = configKV().getKeys_values('case.ini', 'mms')

#            value_list = []

#            value_list.append(value_dict.get('interface_name'))

#            value_list.append(value_dict.get('parameter'))

#            value_list.append(value_dict.get('result'))

#            value_list.append(value_dict.get('bugdescription'))

#            value_list.append(value_dict.get('flag'))

#            value_list.append(value_dict.get('priority'))

    #            # 设置报告的列标题

    #            sheet2.cell(1, 1, 'interface_name')

#            sheet2.cell(1, 2, 'parameter')

#            sheet2.cell(1, 3, 'result')

#            sheet2.cell(1, 4, 'bugdescription')

#            sheet2.cell(1, 5, 'flag')

#            sheet2.cell(1, 6, 'time')

#            sheet2.cell(1, 7, 'priority')

#            sheet2.cell(1, 1).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 2).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 3).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 4).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 5).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 6).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

#            sheet2.cell(1, 7).fill = styles.PatternFill(fill_type='solid', fgColor="FFFF00")

    #            font_cell = styles.Font(name='等线', size=14, italic=False, color=styles.colors.RED, bold=True)

#            sheet2['A1'].font = font_cell

#            sheet2['B1'].font = font_cell

#            sheet2['C1'].font = font_cell

#            sheet2['D1'].font = font_cell

#            sheet2['E1'].font = font_cell

#            sheet2['F1'].font = font_cell

#            sheet2['G1'].font = font_cell

    #            # 设置行高

    #            sheet2.row_dimensions[1].height = 20

    #            # 设置列宽

    #            sheet2.column_dimensions['A'].width = 20

#            sheet2.column_dimensions['B'].width = 50

#            sheet2.column_dimensions['D'].width = 120

#            sheet2.column_dimensions['E'].width = 5

#            sheet2.column_dimensions['F'].width = 20

#

#            n = 1

#            for row in range(1, max_row + 1):

#                result_index = int(value_dict.get('result'))

#                result = sheet1.cell(row, result_index + 1).value

#                flag = sheet1.cell(row, int(value_dict.get('flag')) + 1).value

#                priority = sheet1.cell(row, int(value_dict.get('priority'))).value

    #                # 插入数据

    #                if (row > 1 and result == 0 and flag == 'Y'):

#                    n = n + 1

#                    interface_name = sheet1.cell(row, int(value_dict.get('interface_name')) + 1).value

#                    sheet2.cell(n, 1, bytes(str(interface_name), encoding='utf-8'))

#                    parameter = sheet1.cell(row, int(value_dict.get('parameter')) + 1).value

#                    sheet2.cell(n, 2, bytes(str(parameter), encoding='utf-8'))

#                    sheet2.cell(n, 3, bytes(str(result), encoding='utf-8'))

#                    bugdescription = sheet1.cell(row, int(value_dict.get('bugdescription')) + 1).value

#                    sheet2.cell(n, 4, bytes(str(bugdescription), encoding='utf-8'))

#                    sheet2.cell(n, 5, bytes(str(flag), encoding='utf-8'))

#                    sheet2.cell(n, 6, bytes(str(priority), encoding='utf-8'))

    #            wb2.save(filename2)  # 保存数据

    #            wb1.close()  # 关闭excel

#            wb2.close()

#        else:

    #            print(sheetname1 + ' 或 ' + sheetname2 + ' 不存在')

#    else:

    #        print(filename1 + ' 或 ' + filename2 + ' 不存在')

    # filename:测试报告的excel的名称

    def writerReport(self, app, filename, data, datacolumn):

now = time.strftime("%Y%m%d %H%M%S", time.localtime())

path =r"D:\Users\ZQX\python"

        filename2_list = filename.split('.')

annex_path = (path + filename2_list[0] + now +'.' + filename2_list[1]).replace('\\', '/')

workbook = xlsxwriter.Workbook(annex_path)

worksheet = workbook.add_worksheet("测试总况")

self.distribution_init(worksheet, workbook, datacolumn)

self.overview_init(worksheet, workbook, data)

workbook.close()# workbook关闭之前不会生成excel文档

        # D:/Users/ZQX/pythonDataReport20210430 155758.xlsx

        # 获取文件名称

        annex_name = os.path.basename(annex_path)

load_config = LoadConfig()

# smtp.163.com

        mail_host = load_config.loadConfigByAppAndKey(app, "mail_host")['dict_value']

mail_sender = load_config.loadConfigByAppAndKey(app, "mail_sender")['dict_value']

mail_auth_code = load_config.loadConfigByAppAndKey(app, "mail_auth_code")['dict_value']

mail_receiver = load_config.loadConfigByAppAndKey(app, "mail_receiver")['dict_value'].split(",")

mail = SendEmail(mail_host)

send = SendTestReport()

print(app)

send.sendTestReport(app)

content = send.sendTestReport(app)

mail.send(app, content, mail_sender, mail_auth_code, mail_receiver, annex_path, annex_name)

if __name__ =='__main__':

report = reportExcel()

# 以下两个dict(data,datacolumn)需要构建好数据

    data = {"test_name":"MMS", "test_sum":110, "test_success":80, "test_failed":20, "test_not":10,

            'defect_rate':18, 'total_serious':6, 'total_medium':5, 'total_commonly':8}

datacolumn = {'load-exchange-rate': {'serious':13, 'medium':15, 'commonly':12, 'total':30, 'percent':30},

                  'classify': {'serious':13, 'medium':5, 'commonly':2, 'total':30, 'percent':20},

                  'stock-suspend': {'serious':3, 'medium':5, 'commonly':12, 'total':30, 'percent':20},

                  'stock-brief': {'serious':3, 'medium':15, 'commonly':2, 'total':30, 'percent':30}}

report.writerReport('DataReport.xlsx', data, datacolumn)# DataReport.xlsx为报告名称,datapie,datacolumn为报告数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341

推荐阅读更多精彩内容