先贴几张报告图,下面开始正式内容。
Python中自带的单元测试框架是unittest模块,用它来做单元测试。
unittest中:
def make_cal(a,b):
return a+b
使用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)
使用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)
使用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文件,每个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)
#运行测试
报告可以中文,还可以进行美化的,只有你想不到,没有做不到。
具体请参照: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