Unittest
目的
1.方便管理和维护多个测试用例
2.提供丰富的断言方法
3.能够生成测试报告
Unittest基本使用
import unittest
import test_case01
#创建测试类
class testCase(unittest.TestCase):
def setUp(self):
print("case执行前")
def tearDown(self) :
print('case执行后')
@classmethod
def setUpClass(cls) -> None:
print("对象执行前")
@classmethod
def tearDownClass(cls) -> None:
print("对象执行后")
#测试用例
def test_01(self):
print("test01")
def test_02(self):
print("test02")
def test_03(self):
print("test03")
def test_04(self):
print("test04")
if __name__=='__main':
'''
#实例化测试套件
suit = unittest.TestSuite()
suit1 = unittest.TestSuite()
#第一种添加方式
suit.addTest(testCase('test_03'))
suit.addTest(testCase('test_01'))
suit1.addTest(testCase('test_03'))
suit1.addTest(testCase('test_01'))
#第二种添加方式
testcas = (testCase('test_04'),testCase('test_02'))
suit.addTests(testcas)
suit.addTest(suit1)
'''
unittest.main()
#实例化TextTestRunner类
runner = unittest.TextTestRunner()
runner.run(suit)
运行结果
知识点:
Unittest.TestCase
自己创建的单元测试类都要继承它,是所有测试类的基类
SetUp
每个测试用例前的初始化工作,
TearDown
每个测试用例执行后的都会执行此方法
SetUpClass
每个单元测试类运行前调用该方法,只会执行一次。属于类方法,需要装饰器@classmethod
TearDownClass
每个单元测试类运行后调用该方法,只会执行一次。属于类方法,需要装饰器@classmethod
测试用例
必须用"Test_"开头命名的方法,否则无法识别并执行
方法里要有断言,才能在最后运行时有该用例的执行结果
Unittest 测试用例跳过执行
unittest.main()
运行单元测试,会搜索当前moudle下所有以test开头的测试用例并执行,按照case命名的顺序执行
test suite
- 测试套件,理解成测试用例集
- 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合
- 当运行测试套件时,则运行里面添加的所有测试用例
test runner
- 测试运行器
- 用于执行和输出结果的组件
test suite、test runner基础使用
单元测试类
1 if __name__ == '__main__':
2 # 实例化测试套件
3 suite = unittest.TestSuite()
4 # 实例化第二个测试套件
5 suite1 = unittest.TestSuite()
6 # 添加测试用例 - 方式一
7 suite.addTest(testCase('test_03'))
8 suite.addTest(testCase('test_01'))
9 suite1.addTest(testCase('test_03'))
10 suite1.addTest(testCase('test_01'))
11 # 添加测试用例 - 方式二
12 testcase = (testCase('test_05'), testCase('test_04'))
13 suite.addTests(testcase)
14 # 测试套件添加测试套件
15 suite.addTest(suite1)
16 # 实例化TextTestRunner类
17 runner = unittest.TextTestRunner()
18 # 运行测试套件
19 runner.run(suite)
运行结果
1 import unittest
2 from learn.unittestLearning import test_case02
3 from learn.unittestLearning.test_case03 import testCase03
4
5 if __name__ == '__main__':
6 # 通过模块
7 testcase02 = unittest.TestLoader().loadTestsFromModule(test_case02)
8 # 通过单元测试类
9 testcase03 = unittest.TestLoader().loadTestsFromTestCase(testCase03)
10 # 通过模块字符串
11 testcase04 = unittest.TestLoader().loadTestsFromName('learn.unittestLearning.test_case04')
12 # 测试用例集
13 tests = [testcase02, testcase03, testcase04]
14 # 创建测试套件
15 suite = unittest.TestSuite(tests)
16 # 运行测试套件
17 unittest.TextTestRunner(verbosity=2).run(suite)
包含知识点
- loadTestsFromTestCase(testCaseClass) :testCaseClass输入单元测试类,但需要先import
- loadTestsFromModule(module, pattern=None) :module输入单元测试类所在模块,也需要import
- loadTestsFromName(name, module=None) :name是一个string,需满足以下格式: module.class.method ,可以只到输入到class
- verbosity :表示测试结果的信息详细程,一共三个值,默认是1
- 0 (静默模式):你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
- 1 (默认模式):非常类似静默模式 只是在每个成功的用例前面有个 . 每个失败的用例前面有个 F
- 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
批量运行测试用例方式二(推荐!!):
1 testCase02 test06
2 testCase02 test07
3 testCase02 test11
4 testCase03 test05
5 testCase03 test08
6 testCase03 test12
7 testCase04 test02
8 testCase04 test04
9 testCase04 test13
10 .........
11 ----------------------------------------------------------------------
12 Ran 9 tests in 0.000s
13
14 OK