Esempio n. 1
0
    def generate_html(self, file):
        page = PyH(self.title)
        page << h1(self.head, align='center')  # 标题居中

        page << p('测试总耗时:' + self.time_took)

        logger.info('正在查询测试用例总数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE executed_history_id = %s'
        data = (executed_history_id, )
        result = testdb.select_one_record(query, data)
        self.case_total = result[0][0]

        logger.info('正在查询执行通过的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Pass', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.success_num = result[0][0]

        logger.info('正在查询执行失败的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Fail', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.fail_num = result[0][0]

        logger.info('正在查询执行出错的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Error', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.error_num = result[0][0]

        logger.info('正在查询未执行的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Block', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.block_num = result[0][0]

        if self.fail_num != 0:
            self.fail_num = '<font color="red">' + str(
                self.fail_num) + '</font>'
        else:
            self.fail_num = str(self.fail_num)

        if self.error_num != 0:
            self.error_num = '<font  color="red">' + str(
                self.error_num) + '</font>'
        else:
            self.error_num = str(self.error_num)

        if self.block_num != 0:
            self.block_num = '<font  color="red">' + str(
                self.block_num) + '</font>'
        else:
            self.block_num = str(self.block_num)

        page << p('用例总数:' + str(self.case_total) + '&nbsp'*10 + '成功用例数(Pass):' + str(self.success_num) +\
                      '&nbsp'*10 + '失败用例数(Fail):' + self.fail_num + '&nbsp'*10 +  '出错用例数(Error):' + self.error_num +\
                      '&nbsp'*10 +  '未执行用例数(Block):' + self.block_num)

        page << p(
            '<br/>####################################################用例执行结果####################################################<br/>'
        )
        logger.info('正在查询已运的测试计划')
        query = ('SELECT project, testplan FROM ' + testcase_report_tb +\
                             ' WHERE executed_history_id = %s GROUP BY project, testplan ORDER BY id ASC')
        data = (executed_history_id, )
        result = testdb.select_many_record(query, data)

        for row in result:
            project = row[0]
            testplan = row[1]
            page << p('###测试计划【项目名称:' + project + ', 计划名称:<a name=\"first' +
                      testplan + '\"' + 'href=\"#second' + testplan + '\">' +
                      testplan + '</a>】')

            #  表格标题caption 表格边框border 单元格边缘与其内容之间的空白cellpadding 单元格之间间隔为cellspacing
            tab = table(border='1',
                        cellpadding='1',
                        cellspacing='0',
                        cl='table')
            tab1 = page << tab

            tab1 << tr(
                td('ID', bgcolor='#ABABAB', align='center') +
                td('执行编号', bgcolor='#ABABAB', align='center') +
                td('用例ID', bgcolor='#ABABAB', align='center') +
                td('用例外部ID', bgcolor='#ABABAB', align='center') +
                td('用例名称', bgcolor='#ABABAB', align='center') +
                td('测试套件', bgcolor='#ABABAB', align='center')
                # + td('测试计划', bgcolor='#ABABAB', align='center')
                # + td('测试项目', bgcolor='#ABABAB', align='center')
                + td('执行结果', bgcolor='#ABABAB', align='center') +
                td('运行时间', bgcolor='#ABABAB', align='center'))

            logger.info('正在查询测试计划[project:%s, testplan:%s]的测试用例执行结果' %
                        (row[0], row[1]))
            # query = ('SELECT id, executed_history_id, testcase_id,tc_external_id, testcase_name,'
            #                      'testsuit, testplan, project, runresult, runtime FROM ' + testcase_report_tb +\
            #                      ' WHERE project=%s AND testplan=%s AND executed_history_id = %s GROUP BY testcase_id, runtime ORDER BY id ASC')
            query = ('SELECT id, executed_history_id, testcase_id,tc_external_id, testcase_name,'
                                 'testsuit, runresult, runtime FROM ' + testcase_report_tb +\
                                 ' WHERE project=%s AND testplan=%s AND executed_history_id = %s GROUP BY testcase_id, runtime ORDER BY id ASC')
            data = (project, testplan, executed_history_id)
            result = testdb.select_many_record(query, data)

            logger.info('正在记录测试测试计划[project:%s, testplan:%s]的测试用例运行结果到测试报告' %
                        (row[0], row[1]))
            for row in result:
                if row[6] != 'pass':
                    td6 = td(row[6], align='center', bgcolor="red")
                else:
                    td6 = td(row[6], align='center')
                tab1 << tr(
                    td(str(row[0]), align='center') +
                    td(row[1], align='center') + td(row[2], align='center') +
                    td('<a name=\"first' + str(row[3]) + project + testplan +
                       '\"' + 'href=\"#second' + str(row[3]) + project +
                       testplan + '\">' + row[3] + '</a>') +
                    td(row[4], align='left') + td(row[5], align='left') + td6 +
                    td(row[7], align='center'))

            page << p('<br/>')

        page << p(
            '<br/>####################################################用例执行明细####################################################<br/>'
        )
        logger.info('正在查询已运的测试计划')
        query = ('SELECT project, testplan FROM ' + testcase_report_tb +\
                             ' WHERE executed_history_id = %s GROUP BY project, testplan ORDER BY id ASC')
        data = (executed_history_id, )
        result = testdb.select_many_record(query, data)
        for row in result:
            project = row[0]
            testplan = row[1]

            page << p('###测试计划【项目名称:' + project + ', 计划名称:<a name=\"second' +
                      testplan + '\"' + 'href=\"#first' + testplan + '\">' +
                      testplan + '</a>】')

            logger.info('正在查询测试计划[project:%s, testplan:%s]已运行的测试用例' %
                        (project, testplan))
            query = ('SELECT tc_external_id, testcase_name, project, testplan, case_exec_history_id, testcase_id FROM ' + testcase_report_tb + \
                     ' WHERE project=%s AND testplan=%s AND executed_history_id = %s '\
                     ' GROUP BY testcase_id,runtime ORDER BY id ASC')
            data = (project, testplan, executed_history_id)
            result = testdb.select_many_record(query, data)

            # 遍历测试用例的测试步骤执行结果
            for row in result:
                case_id = row[5]
                tc_external_id = row[0]
                case_name = row[1]
                project = row[2]
                testplan = row[3]
                case_exec_history_id = row[4]

                page << p('>>>测试用例【用例外部ID:' + tc_external_id + ',名称:<a name=\"second'+ tc_external_id + project + testplan +'\"' + \
                          'href=\"#first' + tc_external_id + project + testplan + '\">' + case_name + '</a>】')

                tab = table(border='1',
                            cellpadding='1',
                            cellspacing='0',
                            cl='table')
                tab2 = page << tab
                tab2 << tr(
                    td('步序', bgcolor='#ABABAB', align='center') +
                    td('协议方法', bgcolor='#ABABAB', align='center') +
                    td('协议', bgcolor='#ABABAB', align='center') +
                    td('主机', bgcolor='#ABABAB', align='center') +
                    td('端口', bgcolor='#ABABAB', align='center') +
                    td('ACTION', bgcolor='#ABABAB', align='center') +
                    td('运行结果', bgcolor='#ABABAB', align='center') +
                    td('预期结果', bgcolor='#ABABAB', align='center') +
                    td('原因分析', bgcolor='#ABABAB', align='center') +
                    td('运行时间', bgcolor='#ABABAB', align='center'))

                logger.info('正在查询测试用例[id=%s]步骤运行结果' % case_id)
                query= 'SELECT step_num, protocol_method, protocol, HOST, PORT, step_action, expected_results, runresult, reason, runtime ' \
                      'FROM case_step_report_tb ' \
                      'WHERE project= %s AND testplan= %s AND testcase_id = %s ' \
                      'AND executed_history_id = %s' \
                      'GROUP BY step_num ' \
                      'ORDER BY step_num ASC'
                data = (project, testplan, case_id, case_exec_history_id)
                result = testdb.select_many_record(query, data)
                for row in result:
                    if row[7] != 'pass':
                        td7 = td(row[7], align='center', bgcolor="red")
                    else:
                        td7 = td(row[7], align='center')
                    tab2 << tr(
                        td(str(row[0]), align='center') +
                        td(row[1], align='center') +
                        td(row[2], align='center') + td(row[3], align='left') +
                        td(row[4], align='center') +
                        td('<xmp>' + str(row[5]) + '</xmp>', align='left') +
                        td(str(row[6]), align='left') + td7 +
                        td(row[8], align='left') + td(row[9], align='center'))
                page << p('<br/>')

        page << p('<br/>')

        logger.info('正在设置测试报告结果文件名')
        self.__set_result_filename(file)

        logger.info('正在生成测试报告')
        page.printOut(self.filename)
Esempio n. 2
0
    def generate_html(self, file):
        page = PyH(self.title)
        page.addCSS("../static/css/bootstrap.min.css")
        page.addJS("../static/js/textover.js")
        Container = page << body(id='Body', cl='bg-warning') << div(id="container",cl="container")

        # 报告标题 start
        Headrow = Container << div(id="Headrow", cl="row")
        Headrow << h1(id="HeadH1",align="center") << strong(self.head, id="HeadTxt") + small("Sonny.zhang", id="author")
        Headrow << br()
        # 报告标题 end

        # 数据统计展示 start
        Totalrow = Container << div(id="Totalrow", cl="Totalrow") << div(cl="jumbotron")
        # --测试使用时间,测试用例总数--
        UTimerow = Totalrow << div(id="UTimerow", cl="row")
        UTimerow << div(cl="col-xs-12 col-md-6") << p(role="presentation") << span("测试总耗时:") << span(self.time_took, cl="label label-default")

        # 查询数据 start
        logger.info('正在查询测试用例总数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE executed_history_id = %s'
        data = (executed_history_id,)
        result = testdb.select_one_record(query, data)
        self.case_total = result[0][0]

        logger.info('正在查询执行通过的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Pass', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.success_num = result[0][0]

        logger.info('正在查询执行失败的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Fail', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.fail_num = result[0][0]

        logger.info('正在查询执行出错的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Error', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.error_num = result[0][0]

        logger.info('正在查询未执行的用例数')
        query = 'SELECT count(testcase_id) FROM ' + testcase_report_tb + ' WHERE runresult = %s AND executed_history_id = %s'
        data = ('Block', executed_history_id)
        result = testdb.select_one_record(query, data)
        self.block_num = result[0][0]

        # 查询数据 end

        UTimerow << div(cl="col-xs-12 col-md-6") << p(role="presentation") << span("用例总数:") \
                    << span(str(self.case_total), cl="label label-primary")

        # --用例失败成功统计--
        Amountrow = Totalrow << div(id="Amountrow", cl="row")
        Num1 = Amountrow << div(id="Num1", cl="col-xs-12 col-md-3") << p(role="presentation") << span() \
               << small("成功用例数(Pass):") << span(str(self.success_num), cl="label label-success")
        Num2 = Amountrow << div(id="Num2", cl="col-xs-12 col-md-3") << p(role="presentation") << span() \
               << small("失败用例数(Fail):") << span(self.fail_num, cl="label label-danger")
        Num3 = Amountrow << div(id="Num3", cl="col-xs-12 col-md-3") << p(role="presentation") << span() \
               << small("出错用例数(Error):") << span(self.error_num, cl="label label-warning")
        Num4 = Amountrow << div(id="Num4", cl="col-xs-12 col-md-3") << p(role="presentation") << span() \
               << small("未执行用例数(Block):") << span(self.block_num, cl="label label-default")
        # 数据统计 end

        # 测试计划 start
        Plans = Container << div(id="plans", cl="row")
        # --栏目标题--
        plans_title = "测试用例摘要"
        PlansTitle = Plans << div(id="plans-title", cl="panel panel-primary") << div(cl="panel-heading") \
                     << strong() << center(plans_title, cl="text-uppercase")

        
        # !--测试计划数据-- start
        logger.info('正在查询已运的测试计划')
        query = ('SELECT project, testplan FROM ' + testcase_report_tb + \
                 ' WHERE executed_history_id = %s GROUP BY project, testplan ORDER BY id ASC')
        data = (executed_history_id,)
        result = testdb.select_many_record(query, data)
        # !--测试计划数据-- end
        
        for row in result:
            # !--一个测试计划-- start
            Plan1 = Plans << div() << table(cl="table table-striped  bg-success")
            project = row[0]
            testplan = row[1]
            # ---一个标题--
            plan1_title = '测试计划【项目名称:' + project + ', 计划名称:<a name=\"first' + testplan + '\"' \
                          + 'href=\"#second' + testplan + '\">'+ testplan + '</a>】'
            Plan1 << center() << caption(plan1_title)

            # --一个列表--
            # !--表头 start
            thead1 = ["ID", "执行编号", "用例ID", "用例外部ID", "用例名称", "用例套件", "执行结果", "运行时间"]
            Thead1 = Plan1 << thead()
            Thead1 << tr() << th(thead1[0]) \
                            + th(thead1[1]) \
                            + th(thead1[2]) \
                            + th(thead1[3]) \
                            + th(thead1[4]) \
                            + th(thead1[5]) \
                            + th(thead1[6]) \
                            + th(thead1[7])
            # !--表头 end
            # !--表体 start
            Tbody1 = Plan1 << tbody()
            logger.info('正在查询测试计划[project:%s, testplan:%s]的测试用例执行结果' % (row[0], row[1]))
            # 查询数据 start
            query = ('SELECT id, executed_history_id, testcase_id,tc_external_id, testcase_name,'
                     'testsuit, runresult, runtime FROM ' + testcase_report_tb + \
                     ' WHERE project=%s AND testplan=%s AND executed_history_id = %s GROUP BY testcase_id, runtime ORDER BY id ASC')
            data = (project, testplan, executed_history_id)
            result = testdb.select_many_record(query, data)
            # 查询数据 end
            
            logger.info('正在记录测试测试计划[project:%s, testplan:%s]的测试用例运行结果到测试报告' % (row[0], row[1]))
            for row in result:
                if row[6] != 'Pass':
                    td6 = td(p(row[6], cl="label label-danger  textover"))
                else:
                    td6 = td(row[6], cl="textover")
                Tbody1 << tr() << th(str(row[0]), scope="row") \
                                + td(row[1], cl="textover") \
                                + td(row[2], cl="textover") \
                                + td('<a name=\"first' + str(row[3]) + project + testplan + '\"' + 'href=\"#second' \
                                     + str(row[3]) + project + testplan + '\">' + row[3] + '</a>', cl="textover") \
                                + td(row[4], cl="textover") \
                                + td(row[5], cl="textover") \
                                + td6 \
                                + td(row[7], cl="textover")
            #!--表体 end
        # 测试计划 end
        

        # 测试用例 start
        Cases = Container << div(cl="row")
        # --栏目标题--
        cases_title = "用例执行明细"
        CasesTitle = Cases << div(cl="panel panel-primary") << div(cl="panel-heading") << strong(center(cases_title, cl="text-uppercase"))
        
        # !--数据查询  start
        logger.info('正在查询已运的测试计划')
        query = ('SELECT project, testplan FROM ' + testcase_report_tb + \
                 ' WHERE executed_history_id = %s GROUP BY project, testplan ORDER BY id ASC')
        data = (executed_history_id,)
        result = testdb.select_many_record(query, data)
        # !--数据查询  end

        # 遍历测试计划个数
        for row in result:
            project = row[0]
            testplan = row[1]
            # 一个测试计划 start
            Case1 = Cases << div(cl="col-xs-12 col-md-12") << table(cl="table table-striped  bg-success")
            # !--一个计划标题
            Cplan_title = '测试计划【项目名称:' + project + ', 计划名称:<a name=\"second' + testplan + '\"' + \
                          'href=\"#first' + testplan + '\">' + testplan + '</a>】'
            CplanTitle = Cases << center() << div(cl="panel panel-danger", style="width:1000px") \
                         << div(cl="panel-heading") << strong(center(Cplan_title, cl="text-uppercase"))
            
            # !--数据查询  start
            logger.info('正在查询测试计划[project:%s, testplan:%s]已运行的测试用例' % (project, testplan))
            query = (
                        'SELECT tc_external_id, testcase_name, project, testplan, case_exec_history_id, testcase_id FROM ' + testcase_report_tb + \
                        ' WHERE project=%s AND testplan=%s AND executed_history_id = %s ' \
                        ' GROUP BY testcase_id,runtime ORDER BY id ASC')
            data = (project, testplan, executed_history_id)
            result = testdb.select_many_record(query, data)
            # !--数据查询  end
            
            # 遍历测试用例的测试步骤执行结果
            for row in result:
                tc_external_id = row[0]
                case_name = row[1]
                project = row[2]
                testplan = row[3]
                case_exec_history_id = row[4]
                case_id = row[5]
                # 一个测试用例 start
                Case1 = Cases << div() << table(cl="table table-striped  bg-success")
                # !--一个用例标题
                case1_title = '测试用例【用例外部ID:' + tc_external_id + ',名称:<a name=\"second' + tc_external_id + project + testplan + '\"' + \
                    'href=\"#first' + tc_external_id + project + testplan + '\">' + case_name + '</a>】'
                Case1 << center() << caption(case1_title)
                # !--表头
                thead1 = ["步序", "协议方法", "协议", "主机", "端口", "ACTION", "预期结果", "运行结果", "原因分析", "运行时间"]
                Case1Thead1 = Case1 << thead()
                Case1Thead1 << tr() << th(thead1[0]) \
                                    + th(thead1[1]) \
                                    + th(thead1[2]) \
                                    + th(thead1[3]) \
                                    + th(thead1[4]) \
                                    + th(thead1[5]) \
                                    + th(thead1[6]) \
                                    + th(thead1[7]) \
                                    + th(thead1[8]) \
                                    + th(thead1[9])

                # !--表体
                Case1Tbody1 = Case1 << tbody()
                # !--数据查询 start
                logger.info('正在查询测试用例[id=%s]步骤运行结果' % case_id)
                query = 'SELECT step_num, protocol_method, protocol, HOST, PORT, step_action, expected_results, runresult, reason, runtime ' \
                        'FROM case_step_report_tb ' \
                        'WHERE project= %s AND testplan= %s AND testcase_id = %s ' \
                        'AND executed_history_id = %s' \
                        'GROUP BY step_num ' \
                        'ORDER BY step_num ASC'
                data = (project, testplan, case_id, case_exec_history_id)
                result = testdb.select_many_record(query, data)
                # !--数据查询 end
                for row in result:
                    if row[7] != 'Pass':
                        td7 = td(p(row[7], cl="label label-danger"))
                    else:
                        td7 = td(row[7])

                    Case1Tbody1 << tr() << th(str(row[0]), scope="row") \
                                        + td(row[1]) \
                                        + td(row[2]) \
                                        + td(row[3]) \
                                        + td(row[4]) \
                                        + td(str(row[5])) \
                                        + td(row[6])\
                                        + td7 \
                                        + td(row[8]) \
                                        + td(row[9])
          
                # 一个测试用例 end
        # 测试用例 end
        

        logger.info('正在设置测试报告结果文件名')
        self.__set_result_filename(file)

        logger.info('正在生成测试报告')
        page.printOut(self.filename)