• 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

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

    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
  • 相关阅读:
    单例设计模式
    Tomcat启动报错:严重: Unable to process Jar entry [moduleinfo.class]
    Liun常用命令
    Docker从入门到精通——内核兼容性
    Docker从入门到精通——配置Docker守护进程
    Docker从入门到精通——Dockerfile reference
    Docker从入门到精通——IP转发问题
    Docker从入门到精通——以非 root 用户身份管理 Docker
    Docker从入门到精通——Docker 本地镜像的漏洞扫描
    Docker从入门到精通——编写 Dockerfile 的最佳实践
  • 原文地址:https://www.cnblogs.com/huoxc/p/12846387.html
Copyright © 2020-2023  润新知