什么是unittest框架?
- unittest框架是专门用来进行执行代码测试的框架;
- unittest是Python自带的单元测试包,被各种框架引用,比如django;
- unittest很多用法和django自带的单元测试差不多,因为Django的TestCase继承了Python的unittest.TestCase
为什么使用unittest框架?
1.能够组织多个用例去执行
2.提供丰富的断言方法
3.提供丰富的日志与测试结果
unittest核心要素
架构图1,TestCase
说明:一个TestCase就是一条测试用例,就是一个完整的测试流程。
1.新建类继承自 unittest.TestCase
2.测试的方法以 test 开头
import unittest
class MyTest(unittest.TestCase):
def test_xxx(self):
pass
2, TestSuite
说明:测试套件是把多条测试用例集合在一起,就是一个TestSuite;
1.实例化 suite 对象 suite = unittest.TestSuite()
2.将测试用例添加到 suite 中 suite.addTest(MyTest('test_xxx'))
import unittest
# 实例化 TestSuite
suite = unittest.TestSuite()
# addTest 可以接受:可调用对象、TestCase对象、TestSuite对象
suite.addTest(MyTest('test_xxx'))
3,TextTestRunner
说明:测试执行是用来执行测试用例套件
1.实例化 runner 对象 runner = unittest.TextTestRunner()
2.执行测试套件 runner.run(suite)
import unittest
suite = unittest.TestSuite()
suite.addTest(MyTest('test_xxx'))
# 实例化 runner 对象
runner = unittest.TextTestRunner()
# 执行测试套件
runner.run(suite)
案例
from unittest import TestCase
from unittest import TestCase
from unittest import TestSuite, TextTestRunner
class TestCase01(TestCase):
def test_01(self):
print("01 执行")
def test_02(self):
print("02 执行")
def test_03(self):
print("03 执行")
if __name__ == '__main__':
suite = TestSuite()
# 添加要执行的测试用例
suite.addTest(TestCase01('test_01'))
suite.addTest(TestCase01('test_02'))
suite.addTest(TestCase01('test_03'))
# 创建runner
runner = TextTestRunner()
runner.run(suite)
运行结果如下:
$ python test_1_case.py
01 执行
.02 执行
.03 执行
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
4,Fixture
说明:是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture;
包含setup 和 teardown
import unittest
class TestCase01(unittest.TestCase):
def setUp(self):
print('setUp')
def tearDown(self):
print('tearDown')
def test_01(self):
print("test_2 01 执行")
def test_02(self):
print("test_2 02 执行")
if __name__ == '__main__':
suite = unittest.TestSuite()
# 添加要执行的测试用例
suite.addTest(TestCase01("test_01"))
suite.addTest(TestCase01("test_02"))
# 创建runner
runner = unittest.TextTestRunner()
runner.run(suite)
运行结果如下:
$ python test_2_fixture.py
setUp
test_2 01 执行
tearDown
.setUp
test_2 02 执行
tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
5,defaultTestLoader
说明: unittest.defaultTestLoader.discover 方法可以自动把指定目录下测试用例自动添加到测试套件中,避免手动一个个的添加测试用例。这个方法返回的就是 suite 对象。
5.1.指定要搜索的目录
5.2.调用 discover 方法生成 suite 对象
import unittest
if __name__ == '__main__':
# 参数1:指定搜索的路径
# 参数2:指定匹配文件,默认为'test*.py'
suite = unittest.defaultTestLoader.discover('./', 'test_2_fixture.py')
runner = unittest.TextTestRunner()
runner.run(suite)
网友评论