unittest生成测试报告


unittest生成测试报告


About
回到顶部

HTMLTestRunner和BSTestRunner是Python标准库unittest的扩展,用来生成HTML的测试报告。两个下载安装和使用一致。

首先,Python2.x和Python3.x中两个扩展包不兼容(但下载和使用一致),这里以Python3.x为例。只是目前,无法通过pip安装。所以在使用之前,我们需要下载HTTLTestRunner.py,下载地址在文章最后的链接中。或者将下面的源码拷贝一份,文件名为HTTLTestRunner.py,保存在Python解释器的 Libsite-packages 目录中即可。 BSTestRunner的下载使用参见HTTLTestRunner。

简单使用
回到顶部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import webbrowser
import unittest
import HTMLTestRunner
import BSTestRunner
 
 
class TestStringMethods(unittest.TestCase):
 
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
 
    def test_isupper(self):
        self.assertTrue('Foo'.isupper())
 
 
if __name__ == '__main__':
    suite = unittest.makeSuite(TestStringMethods)
    f1 = open('result1.html', 'wb')
    f2 = open('result2.html', 'wb')
    HTMLTestRunner.HTMLTestRunner(stream=f1, title='HTMLTestRunner版本关于upper的测试报告', description='判断upper的测试用例执行情况').run(
        suite)
    suite = unittest.makeSuite(TestStringMethods)
    BSTestRunner.BSTestRunner(stream=f2, title='BSTestRunner版本关于upper的测试报告', description='判断upper的测试用例执行情况').run(suite)
    f1.close()
    f2.close()
    webbrowser.open('result1.html')
    webbrowser.open('result2.html')

其中:

  • stream是文件句柄。

  • title是测试报告的title。

  • description是测试报告的描述信息。

这样在本地就生成了result1.htmlresult2.html两个HTML文件:

 

 OK,还是比较完美的,再来一点优化:

优化版
回到顶部

优化其实很简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import webbrowser
import unittest
import HTMLTestRunner
import BSTestRunner
 
 
class TestStringMethods(unittest.TestCase):
 
    def test_upper(self):
        """判断 foo.upper() 是否等于 FOO"""
        self.assertEqual('foo'.upper(), 'FOO')
 
    def test_isupper(self):
        """ 判断 Foo 是否为大写形式 """
        self.assertTrue('Foo'.isupper())
 
 
if __name__ == '__main__':
    suite = unittest.makeSuite(TestStringMethods)
    f1 = open('result1.html', 'wb')
    f2 = open('result2.html', 'wb')
    HTMLTestRunner.HTMLTestRunner(stream=f1, title='HTMLTestRunner版本关于upper的测试报告', description='判断upper的测试用例执行情况').run(
        suite)
    suite = unittest.makeSuite(TestStringMethods)
    BSTestRunner.BSTestRunner(stream=f2, title='BSTestRunner版本关于upper的测试报告', description='判断upper的测试用例执行情况').run(suite)
    f1.close()
    f2.close()
    webbrowser.open('result1.html')
    webbrowser.open('result2.html')

其实就是为每个用例方法添加上注释说明。

Python2.x版本
回到顶部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import webbrowser
import unittest
import HTMLTestRunner
import BSTestRunner
 
 
class TestStringMethods(unittest.TestCase):
 
    def test_upper(self):
        u"""判断 foo.upper() 是否等于 FOO"""
        self.assertEqual('foo'.upper(), 'FOO')
 
    def test_isupper(self):
        u""" 判断 Foo 是否为大写形式 """
        self.assertTrue('Foo'.isupper())
 
 
if __name__ == '__main__':
    suite = unittest.makeSuite(TestStringMethods)
    f1 = open('result1.html', 'wb')
    f2 = open('result2.html', 'wb')
    HTMLTestRunner.HTMLTestRunner(
        stream=f1,
        title=u'HTMLTestRunner版本关于upper的测试报告',
        description=u'判断upper的测试用例执行情况').run(suite)
    suite = unittest.makeSuite(TestStringMethods)
    BSTestRunner.BSTestRunner(
        stream=f2,
        title=u'BSTestRunner版本关于upper的测试报告',
        description=u'判断upper的测试用例执行情况').run(suite)
    f1.close()
    f2.close()
    webbrowser.open('result1.html')
    webbrowser.open('result2.html')

Python2.x与Python3.x的用法一致,就是别忘了,中文字符串前面要加u

各版本的两文件的源码,保存到指定位置即可。

有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
原文地址:https://www.cnblogs.com/huoxc/p/12846387.html