python之unittest测试框架
Posted 永远不要矫情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之unittest测试框架相关的知识,希望对你有一定的参考价值。
unittest:python的单元测试框架,类似于java的Junit。unittest有5个很重要的组件:test fixture,test case,test suite,test runner,test loader。
- test case:一个TestCase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括测试前准备环境的搭建,执行测试代码,以及测试后环境的还原。
- test suite:多个测试用例集合在一起便是TestSuite。
- test runner:执行测试用例。执行TestSuite或TestCase的run方法
- test loader:用来加载TestCase到TestSuite.
- test fixture:对一个测试用例环境的搭建和销毁,通过覆盖TestCase的setUp()和tearDown()方法来实现。
1.unittest的方法
1.1 setup和teardown
方法分类:
- 类方法:只执行一次
- 实例方法:每次运行用例都执行
执行顺序为:
setUpClass->setUp->testA->tearDown->setUp->testB->tearDown->tearDownClass
注意:用例之间按照用例名称ASCII码的顺序加载,数字与字母顺位为0-9,A-Z,a-z。在unittest中,实例方法必须以test开头
例如:
#coding:utf-8
import unittest
class MyTestCase(unittest.TestCase): #继承unittest.TestCase类
@classmethod
def setUpClass(cls) -> None:
print('运行一次:setUpClass')
def setUp(self) -> None:
print('每次都运行:setUp')
def test1(self):
print('test1')
def test2(self):
print('test2')
def atest2(self):
print('atest2')
def tearDown(self) -> None:
print('每次都运行:tearDown')
@classmethod
def tearDownClass(cls) -> None:
print('运行一次:tearDownClass')
if __name__ == '__main__':
unittest.main()
运行结果:
运行一次:setUpClass
每次都运行:setUp
test1
每次都运行:tearDown
每次都运行:setUp
test2
每次都运行:tearDown
运行一次:tearDownClass
1.2 断言方法
例如:在test2中断言self.assertLess(3, 2)失败后,都会运行完相关方法,控制台报错。
#coding:utf-8
import unittest
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print('运行一次:setUpClass')
def setUp(self) -> None:
print('每次都运行:setUp')
def test1(self):
print('test1')
self.assertEqual(1, 1)
self.assertIn(1, [1, 2, 3])
def test2(self):
print('test2')
self.assertLess(3, 2)
self.assertGreater(2, 1)
def tearDown(self) -> None:
print('每次都运行:tearDown')
@classmethod
def tearDownClass(cls) -> None:
print('运行一次:tearDownClass')
if __name__ == '__main__':
unittest.main()
输出结果:
----------------------------------------------------------------------
Traceback (most recent call last):
File "G:/PyProject/untitled/test1.py", line 21, in test2
self.assertLess(3, 2)
AssertionError: 3 not less than 2
----------------------------------------------------------------------
Ran 2 tests in 0.013s
FAILED (failures=1)
运行一次:setUpClass
每次都运行:setUp
test1
每次都运行:tearDown
每次都运行:setUp
test2
每次都运行:tearDown
运行一次:tearDownClass
2.加载测试用例的方法
首先我们需要实例化两个对象:
suite=unittest.TestSuite()
loader=unittest.TestLoader()
加载测试用例的方法有四种:
方法一:通过测试用例类进行加载
suite.addTest(loader.loadTestsFromTestCase(MyTest1))
suite.addTest(loader.loadTestsFromTestCase(MyTest2))
方法二:通过测试用例模板进行加载
suite.addTest(loader.loadTestsFromModule(MyTest1))
suite.addTest(loader.loadTestsFromModule(MyTest2))
方法三:通过路径加载
path = os.path.dirname(os.path.abspath(__file__))
suite.addTest(loader.discover(path))
方法四:逐条加载测试用例,这种效率比较低,不建议使用
case1 = MyTest1("test1")
case2 = MyTest1("test2")
suite.addTest(case1)
suite.addTest(case2)
例如:
import unittest
class MyTest1(unittest.TestCase):
def test1(self):
print('test1')
def test2(self):
print('test2')
class MyTest2(unittest.TestCase):
def test2(self):
print('test2')
if __name__ == '__main__':
# 实例化
suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 方法一: 通过测试用例类进行加载
suite.addTest(loader.loadTestsFromTestCase(MyTest1))
suite.addTest(loader.loadTestsFromTestCase(MyTest2))
# 方法二: 通过测试用例模板去加载
# suite.addTest(loader.loadTestsFromModule(MyTest1))
# suite.addTest(loader.loadTestsFromModule(MyTest2))
# 方法三:通过路径加载
# import os
# path = os.path.dirname(os.path.abspath(__file__))
# suite.addTest(loader.discover(path))
# 方法四:逐条加载测试用例 low
# case1 = MyTest1("test1")
# case2 = MyTest1("test2")
#
# suite.addTest(case1)
# suite.addTest(case2)
# 运行
runner = unittest.TextTestRunner()
runner.run(suite)
以上是关于python之unittest测试框架的主要内容,如果未能解决你的问题,请参考以下文章