HTMLTestRunner是python unittest的一种生成HTML报告的方法
包含:
1. Title及描述信息
2. 按照unittest的case层级显示,并可折叠日志
3. 时间及统计信息
具体使用方法网上一抓一大把,不罗嗦了
这些作为TestReport,其实只是保留了一些基本的信息,在很多时候无法满足需求。
而自动化的开发者也不必要过分追求这种生成报告的方式。
HTMLTestRunner的适用性:
1. case独立,用例库相对稳定(当然也可以自行开发用例库灵活管理的方法)
2. 执行时间较短,且不中断的测试
3. 只关注用例的执行结果,保留文本日志,不保留大量数据
有些时候对HTMLTestRunner二次开发的工作量已经大于自行开发日志、报告模块时,便不宜适用:
1. 除脚本的执行结果外,还需记录其他数据,如性能测试,需要输出格式化统计报告,如Excel,或GUI测试需要截图,或测试设备需要多线程记录日志(debug信息等),等等
2. 有可能经常中途中断的测试,如测试用例对环境要求高,测试系统、尤其是设备会出现crash等问题block测试,需要中断,按照网上一般教程的使用方法,测试正常结束前终端,报告是空白的
3. 长时间的测试,HTMLTestRunner最大的一个问题在于实时性太差,unittest suite执行完之后,报告才会生成
那么,针对这3中情况:
1. 扩展HTMLTestRunner,或使其作为辅助报告
HTMLTestRunner本身的HTML code很简单,可以自行编辑HTML元素进行修改,比如在Pass/Fail/Error之外增加一列Skip统计,
或者增加更高级的功能,增加插入绘制表格、插入图片等
在code中也可以看到注释如下:
""" Define a HTML template for report customerization and generation. Overall structure of an HTML report HTML +------------------------+ |<html> | | <head> | | | | STYLESHEET | | +----------------+ | | | | | | +----------------+ | | | | </head> | | | | <body> | | | | HEADING | | +----------------+ | | | | | | +----------------+ | | | | REPORT | | +----------------+ | | | | | | +----------------+ | | | | ENDING | | +----------------+ | | | | | | +----------------+ | | | | </body> | |</html> | +------------------------+ """
另一种方案,将HTML作为Summary报告,将测试的具体数据生成更为合适的格式。
2. 引入KeyBoardInterrupt异常,后用 unittest.TestSuite.__call__ 调用
TestCase对象具有__call__属性,定义如下,直接调用对象(),将执行run()。
def __call__(self, *args, **kwds): return self.run(*args, **kwds)
这样可以run时可以获取用户输入的Ctrl C,异常退出后,最后一个case Error,包括之前已经执行过的用例,一起生成HTML报告
3. HTMLTestRunner的实时性问题暂时没有想到好的解决方法
它的实时性差,表现在:
a. 每个用例结束之后,无法立刻刷新HTML,只能在测试suite结束、或中断后一次性写入
b. 当然,在用例执行期间,自然也无法查看阶段性日志了
HTMLTestRunner的日志生成时,在unittest的run之后。之前试图解决问题a,修改HTMLTestRunner和unittest code,在每个case结束之后刷新一次报告
不过能力不足,以失败告终了.....
最后分析需求,认为:
a. 解决存储测试数据的问题优先级较高
b. 测试时间很长
c. 人工中断情况多
d. 需要在测试执行期间观察日志,判断系统状态
所以放弃了使用HTMLTestRunner,自行封装日志/报告模块.....
如果有能够解决实时性问题的方法,请不吝赐教~谢谢!