免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2596 | 回复: 2
打印 上一主题 下一主题

修改HTMLTestRunner生成测试报告 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-12-25 16:39 |只看该作者 |倒序浏览
本帖最后由 dahe_1984 于 2017-12-25 16:46 编辑

HTMLTestRunner生成的测试报告直观,简洁。缺点是只用用于unittest模块,简单改写了下,生成需要的测试报告。

def generateResults():
    #
    # 定义三种类型的统计变量 和 log文件
    #
    global success_count, failure_count, warn_count

    f=open(global_list.log_name)
   
   
    lines = f.readlines()  
   
    #
    # 分析log
    #
    rmap    = {}
    classes = []
    cls = "Smoke_TEST"
    flag = step = 0
    found = -1
    o    = ""
    startTime = lines[0].split(",")[0]
    #
    # 过滤掉紧邻的目录行,比如:2017-12-16 16:54:21,029 - INFO - check_menu
    #                           2017-12-16 16:54:21,161 - INFO - check_menu               
    #                           2017-12-16 16:54:26,453 - INFO -
    #                           2017-12-16 16:54:26,454 - INFO - 2017-12-06 17:39:00 - 2017-12-06 17:40:00
    #                           2017-12-16 16:54:40,224 - WARNING -
    #                           2017-12-16 16:54:40,224 - WARNING -
    #                           2017-12-16 16:55:13,880 - ERROR - check_Result:
    #
    for eachline in lines:
        step = step + 1
        if("check_menu" in eachline):
            if((step - flag) != 1):
                flag = flag + 1
            t    = eachline.split(" ")[8:]
            t    = " ".join(t)
            t    = t.strip()

            step = flag

            stopTime  = eachline.split(",")[0]

        if("check_Result" in eachline and "ERROR" in eachline):
            flag = flag + 3
            e    = eachline.split(" ")[-1].strip()
            n    = 2
            result.append((2, 'error', complete_output, ''))  
            failure_count = failure_count +1
        if("(s)" in eachline):
            flag = flag + 3
            e    = eachline.split(" ")[7:]
            e    = " ".join(e)
            e    = e.strip()
            n    = 0
            result.append((0, 'sucess', complete_output, ''))
            success_count = success_count + 1
        if("Query" in eachline and "WARNING" in eachline):
            flag = flag + 3
            e    = eachline.split(" ")[7:]
            e    = " ".join(e)
            e    = e.strip()
            n    = 1
            result.append((1, 'WARNING', complete_output, ''))
            warn_count = warn_count + 1
        if("Message" in eachline and "ERROR" in eachline):
            flag = flag + 3
            e    = eachline.split(" ")[7:]
            e    = " ".join(e)
            e    = e.strip()
            n    = 2
            result.append((2, 'failed', complete_output, ''))
            failure_count = failure_count +1

        if((flag%2 == 0) and (flag > 0) and (found != flag)):
            found = flag
            if not rmap.has_key(cls):
                rmap[cls] = []
                classes.append(cls)
            rmap[cls].append((n,t,o,e))
    r = [(cls, rmap[cls]) for cls in classes]

    duration  = time.mktime(time.strptime(stopTime, "%Y-%m-%d %H:%M:%S")) - time.mktime(time.strptime(startTime, "%Y-%m-%d %H:%M:%S"))
    duration  = str(int(duration/60)) + " min"
   
    generate_report(r)


    report_attrs = getReportAttributes(result, startTime, duration)
    generator = 'HTMLTestRunner_test'
    stylesheet = generate_stylesheet()
    heading = generate_heading(report_attrs)
    report = generate_report(r)
    ending = generate_ending()
    output = HTML_TMPL % dict(
        title = saxutils.escape(title),
        generator = generator,
        stylesheet = stylesheet,
        heading = heading,
        report = report,
        ending = ending,
    )

    #
    # 设置报告文件保存路径
    # 获取系统当前时间
    # 设置报告名称格式
    #
    report_path = os.path.dirname(os.path.abspath('.')) + '\\testSuite\\test_report\\'
    now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))   
    HtmlFile = report_path + now + "HTMLtemplate.html"
   
    tmp_str = """生成Report: """
    logger.info("%s%s"%(tmp_str.encode('gbk'), HtmlFile))
   
    fp = file(HtmlFile, "wb")

    stream = fp
    stream.write(output.encode('utf-8'))
    fp.close()

论坛徽章:
0
2 [报告]
发表于 2017-12-25 16:43 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2017-12-25 16:45 |只看该作者
        if((flag%2 == 0) and (flag > 0) and (found != flag)):
            found = flag
            if not rmap.has_key(cls):
                rmap[cls] = []
                classes.append(cls)
            rmap[cls].append((n,t,o,e))
    r = [(cls, rmap[cls]) for cls in classes]

主要的思路就是将上述的值传递进去,然后安装网页的模版生成HTML测试结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP