使用HTMLTestRunner生成报告

使用HTMLTestRunner生成报告

unittest本身并不具备这个功能,需要使用HTMLTestRunner库
使用步骤:

  1. 首先需要下载.py文件:http://tungwaiyip.info/software/HTMLTestRunner.html
  2. 下载后放入python安装目录的lib文件夹下面供全局项目使用,或者放在本项目下供本项目单独用。
  3. 打开终端进入python交互模式导入HTMLTestRunner ,如果无导入错误显示,则说明添加成功
    import HTMLTestRunner

注意:python3的stringIO有变化,使用该HTMLTestRunner会报错ImportError: No module named 'StringIO'。这里使用python2.7试验。

1 help()查看类帮助信息

为了说明在报告中显示用例的注释,这里先了解下help()帮助函数。
help帮助信息息都是代码中通过 '''xxx ''' 或者 """xxx""" 注释符号来标注的。
如我们自定义一个模块helpin.py,并将其放入python目录的lib文件夹下面:

#coding=utf-8
u'''
这是help能够显示的帮助信息
'''
def add(a):
    u"""这个函数用来输入a的值"""
    print 'a'

在cmd命令行中,进入python27的交互模式,导入后通过help查看帮助信息:

>>> import helpin
>>> help(helpin)
Help on module helpin:
NAME
    helpin - 这是help能够显示的帮助信息
FILE
    e:\python27\lib\helpin.py
FUNCTIONS
    add(a)
        这个函数用来输入a的值

2 报告中显示用例的注释

给报告中的每个测试用例添加注释,来说明该测试用例是用来干什么的,非常有必要。
通过help()函数来查看HTMLTestRunner类的详细说明:

>>> import HTMLTestRunner
>>> help(HTMLTestRunner) 

可以看到该类的注释说明,一个好的开源的框架应该有这样的规范。

这里在每个测试函数的下方添加上注释:

    def test_equal(self):
        u'''这里是测试a和b的两个值是否相等'''
        a = 1
        b = 2
        self.assertEqual(a,b)

运行后,打开生成的html文件可以看到,每个测试用例函数的后面有该用例的注释。

如图:

注意:
testcase的注释放在一行,如果换行了就显示不了,解析成字符串:

    def test_login_status(self):
        """测试有未填写项时,登陆按钮的状态"""

不能写成:

    def test_login_status(self):
        """
        测试有未填写项时,登陆按钮的状态
        """

3 动态生成需要多次执行的测试报告文件名称

如果一个测试套件需要多次执行,如果每次执行不去修改测试报告.html的文件名,则每次执行后会将之前的报告覆盖。如果想要保存每次执行的结果而不手动修改报告名称。这里可以使用动态生成文件名的方法。具体的生成可以根据需要来写动态生成的代码。

动态时间

python 时间函数:

  1. time.time() 获取当前时间戳。
  2. time.ctime() 当前时间的字符串形式。
  3. time.localtime() 当前时间的 struct_time 形式。
  4. time.strftime() 用来获得当前时间,可以将时间格式化为字符串。

修改之前的代码,将文件名字中添加上当前获取到的时间:

#获取当前时间
now = time.strftime("%Y-%m-%d-%H_%M_%S")
report_path = "report/%s_report.html" % now

生成的文件名称以2016-03-09-17_37_26_result.html格式出现。

if __name__ == "__main__":
    # unittest.main()
    login_test_suite = unittest.TestSuite()
    login_test_suite.addTest(Login('test_login_status'))
    login_test_suite.addTest(Login('test_login_success'))
    login_test_suite.addTest(Login('test_login_failed'))

    now = time.strftime("%Y-%m-%d-%H_%M_%S")
    report_path = "report/%s_report.html" % now
    fp = file(report_path, "wb")
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=u"登陆页面报告",
        description=u"测试结果"
    )
    runner.run(login_test_suite)

4 集成多个测试结果

目前测试报告只集成到了单个测试文件中,我们的最终目的是将其集成到一个文件中。
之前是通过testunit.addTests()函数逐个添加。
现在通过unittest.defaultTestLoader.discover()方法循环遍历添加测试用例。
最后通过runner.run()方法运行整个测试用例集。

问题

中文无法显示

 assert text == "ç™»å½•è´¦å·æˆ–å¯†ç é”™è¯¯2"

解决:

修改HTMLTestRunner.py里面错误输出进行转码:
773 行左右,latin-1修改为utf-8

    uo = o.decode('utf-8')

你可能感兴趣的:(使用HTMLTestRunner生成报告)