unittest的介绍和使用
2021-01-23 本文已影响0人
Chaweys
什么是unitest?
unitest是Python自带测试库,是单元测试框架,且提供了丰富的断言方法
unittest核心:TestFixture、TestCase、TestSuite、TestRunner
注:
1、定义测试用例,必须以"test"开头命名方法
2、unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们
3、setUp()和tearDown()每个用例例执行前后都会执行初始化条件和结束条件
# -*- coding:utf-8 -*-
import unittest
class UserCase(unittest.TestCase):
def setUp(self):
print("set Up 开始执行")
def tearDown(self):
print("tear Down 执行结束")
def testcase1(self):
print("case1")
def testcase2(self):
print("case2")
self.assertEqual(1,1)
def testcase3(self):
print("case3")
if __name__=="__main__":
unittest.main()
结果:
set Up 开始执行
case1
tear Down 执行结束
set Up 开始执行
case2
tear Down 执行结束
set Up 开始执行
case3
tear Down 执行结束
... #每个点代表一个用例方法执行成功,如果有F代表一个用例执方法行失败
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
unittest的进阶使用
注:
setUp()和tearDown()每个用例执行前后都会执行初始化条件和结束条件。
setUpClass()和tearDownClass()是执行所有用例时只用执行一次初始化条件和结束条件。
# -*- coding:utf-8 -*-
import unittest
class UserCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("set Up 开始执行")
@classmethod
def tearDownClass(cls):
print("tear Down 执行结束")
def testcase1(self):
print("case1")
def testcase2(self):
print("case2")
self.assertEqual(1,1)
@unittest.skip("跳过该用例")
def testcase3(self):
print("case3")
if __name__=="__main__":
unittest.main(verbosity=1)
"""
结果:
verbosity=1 代表输出用例执行的结果日志级别,默认是1
set Up 开始执行
case1
case2
case3
tear Down 执行结束
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
verbosity=0的结果:
set Up 开始执行
case1
case2
case3
tear Down 执行结束
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
verbosity=2的结果:
set Up 开始执行
case1
case2
case3
tear Down 执行结束
testcase1 (__main__.UserCase) ... ok
testcase2 (__main__.UserCase) ... ok
testcase3 (__main__.UserCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
加上跳过用例执行注解:@unittest.skip("跳过该用例")
set Up 开始执行
case1
case2
tear Down 执行结束
testcase1 (__main__.UserCase) ... ok
testcase2 (__main__.UserCase) ... ok
testcase3 (__main__.UserCase) ... skipped '跳过该用例'
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK (skipped=1)
"""
ddt加载测试用例数据
import unittest
import ddt
datas=[{"a":1,"b":2,"c":3}]
@ddt.ddt
class DDTTest(unittest.TestCase):
@ddt.data(*datas) #注解:对datas参数进行拆分
def test1(self,d):
print("参数时:{0}".format(d))
if __name__ == '__main__':
unittest.main()
结果:
.
参数时:{'a': 1, 'b': 2, 'c': 3}
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK