dahe_1984 发表于 2017-12-25 16:39

修改HTMLTestRunner生成测试报告

本帖最后由 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.split(",")
    #
    # 过滤掉紧邻的目录行,比如: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(" ")
            t    = " ".join(t)
            t    = t.strip()

            step = flag

            stopTime= eachline.split(",")

      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(" ")
            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(" ")
            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(" ")
            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 = []
                classes.append(cls)
            rmap.append((n,t,o,e))
    r = [(cls, rmap) 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()

dahe_1984 发表于 2017-12-25 16:43


dahe_1984 发表于 2017-12-25 16:45

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

主要的思路就是将上述的值传递进去,然后安装网页的模版生成HTML测试结果
页: [1]
查看完整版本: 修改HTMLTestRunner生成测试报告