python:unittest自动生成测试报告

2019-03-03  本文已影响0人  rr1990

一、使用unittest自带的测试报告

使用unittest执行完测试用例后,默认的测试结果是输出在屏幕上,并未将测试结果输出到文件中,这样容易造成报告无保存记录;
unittest自动的TextTestRunner可以报告以文本形式输出到文件中,只需将参数stream赋值即可;

import unittest

if __name__ == "__main__":
    # 测试用例保存的目录
    case_dirs = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases"
    # 加载测试用例
    discover = unittest.defaultTestLoader.discover(case_dirs, "test_*.py")
    # 运行测试用例同时保存测试报告
    test_report_path = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases\report.txt"
    with open(test_report_path, "a") as report_file:
        runner = unittest.TextTestRunner(stream=report_file, verbosity=2)
        runner.run(discover)

"""文本中显示的测试结果如下:
test_case1 (test_case1.TestCase1) ... ok
test_case2 (test_case2.TestCase1) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
"""

txt文件显示的测试报告不直观,使其他人查看起来繁琐复杂,故一般使用第三方HTMLTestRunner模块来保存测试报告

二、HTMLTestRunner模块介绍

  1. 导入HTMLTestRunner模块
    不能通过pip安装的方式导入,需要网上下载HTMLTestRunner.py,下载后将其放至python安装目录下的Lib下即可直接使用;
    但网上“http://tungwaiyip.info/software/HTMLTestRunner.html”不兼容python3,故可在网上直接搜索支持python3的版本,或是直接做以下修改:
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer= io.StringIO()
第631行,将print >> sys.stderr, ‘\nTime Elapsed: %s‘ %(self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTimeElapsed: %s‘ % (self.stopTime-self.startTime))
第642行,将if not rmap.has_key(cls):修改成if notcls in rmap:
第766行,将uo = o.decode(‘latin-1‘)修改成uo = e
第775行,将ue = e.decode(‘latin-1‘)修改成ue = e
  1. 使用方法
import unittest
import HTMLTestRunner

if __name__ == "__main__":
    # 测试用例保存的目录
    case_dirs = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases"
    # 加载测试用例
    discover = unittest.defaultTestLoader.discover(case_dirs, "test_*.py")
    # 运行测试用例同时保存测试报告
    test_report_path = r"E:\PycharmProjects\pythonStudy\ModuleStudy\unittest_module\testCases\report.html"
    with open(test_report_path, "wb") as report_file:
        runner = HTMLTestRunner.HTMLTestRunner(stream=report_file, title="自动化测试报告", description="XX应用功能测试")
        runner.run(discover)
上一篇下一篇

猜你喜欢

热点阅读