python单元测试及TXT/HTML/XML报告(非常全)

python单元测试教程(全)

先贴几张报告图,下面开始正式内容。
python单元测试及TXT/HTML/XML报告(非常全)_第1张图片
python单元测试及TXT/HTML/XML报告(非常全)_第2张图片
Python中自带的单元测试框架是unittest模块,用它来做单元测试。
unittest中:

  • TestCase 测试用例
  • TestSuite 多个测试用例集合
  • TestLoader加载TestCase到TestSuite中
  • TestRunner是来执行测试用例的
    可以直接使用unittest进行测试,但没有很好的报告,也可以使用其他补充包,如HtmlTestRunner/xmlrunner(xml格式可以在Jenkins集成测试使用)
    下面写一个简单的单元测试用例:
    写在前面:在pycharm中运行的时候,注意运行方式如下,第一个图是运行的测试用例,第二个图运行的是整个程序。后面的测试报告,只有运行整个程序的时候,才会有产生。建议alt+shift+F1运行。
    图1python单元测试及TXT/HTML/XML报告(非常全)_第3张图片
    https://www.cnblogs.com/stephenmc/p/7778920.html

0.test.py#测试代码

def make_cal(a,b):
    return a+b

1.unittest:alt+shift+F1

使用unittest单独测试。一般测试用例的def后面函数名称以test为开头。

#!/usr/bin/env python
# encoding: utf-8
import unittest
from test import make_cal#导入一个程序
class MyTest(unittest.TestCase):#继承unittest.TestCase
    def tearDown(self):
        #每个测试用例执行之后做操作
        print('111')
    def setUp(self):
        #每个测试用例执行之前做操作
        print(22222)
    def test_run(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
    def test_run2(self):#测试这个错误
        respect = 7
        result = make_cal(2,4)#测试这个错误
        self.assertEqual(result,respect)
        #self.assertIs(1,1)
        #测试用例
    def test_run3(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
    def test_run1(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
if __name__ == '__main__':
    test_suite = unittest.TestSuite()#创建一个测试集合
    test_suite.addTest(unittest.makeSuite((MyTest)))
    report_path = r"C:\Users\user\PycharmProjects\nile_data_optimize\result\report.txt"#报告路径
    with open(report_path, "a") as report:
        runner = unittest.TextTestRunner(stream=report, verbosity=2)
        runner.run(test_suite)

运行上述程序后,会输出report.txt报告,如下所示。
python单元测试及TXT/HTML/XML报告(非常全)_第4张图片
python单元测试及TXT/HTML/XML报告(非常全)_第5张图片

2. xmlrunner:alt+shift+F1(xml格式-Jenkins)

使用xmlrunner和unittest测试,其中xmlrunner,直接使用pip3 install xmlrunner即可

#!/usr/bin/env python
# encoding: utf-8
import xmlrunner
import unittest
from test import make_cal
class MyTest(unittest.TestCase):#继承unittest.TestCase
    def tearDown(self):
        #每个测试用例执行之后做操作
        print('111')
    def setUp(self):
        #每个测试用例执行之前做操作
        print(22222)
    def test_run(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
    def test_run2(self):
        respect = 7
        result = make_cal(2,4)#错误示例
        self.assertEqual(result,respect)
        #self.assertIs(1,1)
        #测试用例
    def test_run3(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
    def test_run1(self):
        # self.assertEqual(1,1)
        self.assertIs(1,1)
        #测试用例
if __name__ == '__main__':
    test_suite = unittest.TestSuite()#创建一个测试集合
    test_suite.addTest(unittest.makeSuite((MyTest)))
    runner = xmlrunner.XMLTestRunner(output="result")
    runner.run(test_suite)

生成XML报告如下:
python单元测试及TXT/HTML/XML报告(非常全)_第6张图片

3. htmltestrunner:alt+shift+F1

使用htmltestrunner模块,可以生成html格式文件。请大家注意,这部分内容,我尝试了安装pip3-html-testRunner****方法可行。
下面介绍网络上,提到的其他方法,然后在介绍我学习的方法。
1.HTMLTestRunner模块,网上很多朋友说,需要手动下载,http://tungwaiyip.info/software/HTMLTestRunner.html,保存代码,然后添加。
下载完成后放到python安装目录下的…/Python36\Lib。
因为HTMLTestRunner模块是基于Python2开发的,目前停止更新了,在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
修改完成后保存。现在可以生成一份测试报告。
以上修改内容,主要参照https://www.cnblogs.com/eastonliu/p/9147075.html
以上针对htmltestrunner的修改,是参照他人的教程。

2.小编在学习过程中,发现python3有个html-testrunner的模块可以pip安装,https://pypi.org/project/html-testRunner/附上官方案例。

#!/usr/bin/env python
# encoding: utf-8
import HtmlTestRunner
import unittest
class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
    def test_error(self):
        """ This test should be marked as error one. """
        raise ValueError
    def test_fail(self):
        """ This test should fail. """
        self.assertEqual(1, 2)
    @unittest.skip("This is a skipped test.")
    def test_skip(self):
        """ This test should be skipped. """
        pass
if __name__ == '__main__':
 unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='example_dir'))

最后生成的报告,如下:
python单元测试及TXT/HTML/XML报告(非常全)_第7张图片

4. 多模块测试

如果有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行https://www.cnblogs.com/feng0815/p/8045850.html,代码如下:

import unittest,HTMLTestRunner
    suite = unittest.TestSuite()#创建测试套件
    all_cases = unittest.defaultTestLoader.discover('.','test_*.py')
    #找到某个目录下所有的以test开头的Python文件里面的测试用例
    for case in all_cases:
        suite.addTests(case)#把所有的测试用例添加进来
        fp = open('res.html','wb')
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
        runner.run(suite)
        #运行测试

5. 报告美化

报告可以中文,还可以进行美化的,只有你想不到,没有做不到。
python单元测试及TXT/HTML/XML报告(非常全)_第8张图片
具体请参照:https://www.cnblogs.com/findyou/p/6925733.html
如果遇到其他问题,欢迎交流!
其他参考:
https://www.cnblogs.com/8013-cmf/p/6644366.html
https://www.cnblogs.com/tomweng/p/6609937.html

你可能感兴趣的:(机器学习,python单元测试,unittest,xmlrunner,htmltestrunner)