使用HTMLTestRunner生成html的测试报告的时候,报告中只有console输出,logging的输出无法保存,

如果要在报告中加入每一个测试用例执行的logging信息,则需要改HTMLTestRunner的源码

HTMLTestRunner原作者文件下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

这里使用findyou的美化版来做实验,github地址https://github.com/findyou/HTMLTestRunnerCN/tree/dev

在HTMLTestReportCN.py 474行加入一个logger,可以自己传入一个logger,这里固定一个

class _TestResult(TestResult):# note: _TestResult is a pure representation of results.# It lacks the output and reporting ability compares to unittest._TextTestResult.def __init__(self, verbosity=1):TestResult.__init__(self)self.stdout0 = Noneself.stderr0 = Noneself.success_count = 0self.failure_count = 0self.error_count = 0self.verbosity = verbosity# result is a list of result in 4 tuple# (#   result code (0: success; 1: fail; 2: error),#   TestCase object,#   Test output (byte string),#   stack trace,# )self.result = []#增加一个测试通过率 --Findyouself.passrate=float(0)self.logger = logging.getLogger('mylog') 

在488行startTest函数中初始化logging.Handler,记录到内存中

def startTest(self, test):TestResult.startTest(self, test)# just one buffer for both stdout and stderrself.outputBuffer = io.StringIO()stdout_redirector.fp = self.outputBufferstderr_redirector.fp = self.outputBufferself.stdout0 = sys.stdoutself.stderr0 = sys.stderrsys.stdout = stdout_redirectorsys.stderr = stderr_redirector#----add logging output----fengf233self.log_cap = io.StringIO()self.ch = logging.StreamHandler(self.log_cap)self.ch.setLevel(logging.DEBUG)formatter = logging.Formatter('[%(levelname)s][%(asctime)s] [%(filename)s]->[%(funcName)s] line:%(lineno)d ---> %(message)s')self.ch.setFormatter(formatter)self.logger.addHandler(self.ch)

在496行 complete_output函数的返回值中加入logging存在内存中的输出,用换行符隔开

def complete_output(self):"""Disconnect output redirection and return buffer.Safe to call multiple times."""if self.stdout0:sys.stdout = self.stdout0sys.stderr = self.stderr0self.stdout0 = Noneself.stderr0 = None#add log out put ---fengf233return self.outputBuffer.getvalue()+'\n'+self.log_cap.getvalue()

每个用例执行完后,最好清除handler,在504行stopTest函数中加入

def stopTest(self, test):# Usually one of addSuccess, addError or addFailure would have been called.# But there are some path in unittest that would bypass this.# We must disconnect stdout in stopTest(), which is guaranteed to be called.a = self.complete_output()#清除log的handle---fengf233
        self.logger.removeHandler(self.ch)return a

使用这个方法也不用去改html的代码,集成在每个用例的a中返回,效果如下

每个用例都是单独logging记录,不会重复

HTMLTestReportCN.py 中输出是居中,觉得不好看,可以在414行中更改标签,增加style="text-align:left"属性

<div id='div_%(tid)s' class="collapse in" style="text-align:left"><pre>%(script)s</pre></div>

别忘了在最前面import logging

最后只需要在你需要logging输出的文件位置加上logging就可以了,但是需要注意,这里我是使用mylog名称的logger,你创建的logger需要同名

所以这里HTMLTestRunner还有增加传入logger的提升空间,这里不做增加了

logger = logging.getLogger(logger=‘mylog’)

转载于:https://www.cnblogs.com/fengf233/p/10871055.html

HTMLTestRunner加入logging输出相关推荐

  1. Python + logging 输出到屏幕,将log日志写入文件(亲测)

    日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数 ...

  2. python输出日志到文件_【已解决】Python中,如何让多个py文件的logging输出到同一个日志log文件...

    [问题] 有一个比较长的python脚本文件,其中关于log日志输出,用的是logging,对应初始化代码为:logging.basicConfig( level = logging.DEBUG, f ...

  3. EF Core使用Simple Logging输出日志

    在使用EF Core的时候,很多时候需要知道EF Core实际执行的SQL语句是什么. Simple Logging是EF Core提供的一项功能,可用于在开发和调试应用程序时轻松获取日志.这种形式的 ...

  4. Python3之logging输出写入日志

    Python3之logging模块浅析 目录 Python3之logging模块浅析 简单用法 日志与控制台同时输出 一个同时输出到屏幕.文件的完成例子 日志文件截取 日志重复打印问题解决 问题分析 ...

  5. python3 logging输出到文件_python3:logging模块 输出日志到文件

    python自动化测试脚本运行后,想要将日志保存到某个特定文件,使用python的logging模块实现 参考代码: importloggingdefinitLogging(logFilename,e ...

  6. Python牛刀小试(五)--logging模块

    由于想给自己的Python程序添加日志功能,学习下Python的日志模块. 一个简单的例子: 点击(此处)折叠或打开 import logging ##第一个简单的例子 logging.warning ...

  7. Python通过LDAP验证、查找用户(class,logging)

    定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...

  8. 【python】导入HTMLTestRunner失败---报错ModuleNotFoundError: No module named ‘HTMLTestRunner‘

    问题描述:在使用python的HTMLTestRunner进行测试报告输出时,运行错误信息如下: ModuleNotFoundError: No module named 'HTMLTestRunne ...

  9. python logging使用_[译]Python Logging 使用指南

    Python Logging 使用指南 对程序员来说,Logging 是一种非常重要的功能.无论调试程序还是程序运行时的信息显示,Logging 都很有用.在本文中,我会演示为什么要使用以及如何使用 ...

最新文章

  1. 魔改Attention大集合
  2. MOSFET驱动器汇总 : 单个N-CHANNEL,半桥,全桥,3项桥
  3. 华为数据中心服务器数量,IDC 与华为联合发布《全闪存数据中心白皮书》,目前已有多个应用...
  4. 语音识别:时间序列的匹配算法(Needleman-Wunsch 算法)
  5. Qt Creator编码
  6. 利用TabWidget实现底部菜单
  7. 容器编排技术 -- Kubernetes从零开始搭建自定义集群
  8. [20170302]什么是fuzzy.txt
  9. c语言数据结构对学生信息折半查找,C语言数据结构-折半查找
  10. 计算机专业虽然好,但是也要有这些潜质才去选择
  11. Cisco 2960密码恢复
  12. Android xml manifest属性详解
  13. Java编程基础03——进制运算数据类型变量
  14. 基于大数据的人工智能象棋
  15. 反恐精英代码_Steam永久降价通知!绝地求生史低促销!CS:GO源代码泄漏!
  16. 易语言单窗口单ip软件源码_易语言助手下载-易语言助手 v3.2.0701 官方版
  17. 分组急救技能竞赛方法在急诊专科护士培训中的运用
  18. OpenCV - 汽车识别
  19. MAC电脑连接windows台式机
  20. 计算机音乐谱夜空中最亮的星歌词,夜空中最亮的星歌谱及歌词

热门文章

  1. 用Docker搭建Nexus私服
  2. String和StringBuffer的区别,String长度是固定的?
  3. Android -- 自定义StepView实现个人信息验证进度条
  4. DBA(三):MySQL主从同步、复制模式
  5. 对kubernetes的认识
  6. 机房合作--gitee的使用
  7. ubuntu 内存占用解析
  8. excel2007-分页显示透视表
  9. 阿里云专家手把手教你重塑 IT 架构!
  10. 京东把 Elasticsearch 用的真牛逼!