unitttest初级了解
unittest 框架的介绍
框架
framework
为了解决⼀类事情的功能集合
Unittest 框架简述
- 是 Python ⾃带的单元测试框架
- ⾃带的, 可以直接使⽤, 不需要单外安装
- 测试⼈员 ⽤来做⾃动化测试, 作为⾃动化测试的执⾏框架,即管理和执⾏⽤例的
使⽤的原因
能够组织多个⽤例去执⾏
提供丰富的断⾔⽅法
能够⽣成测试报告
核⼼要素(组成)
1.TestCase 测试⽤例
, 这个测试⽤例是 unittest 的组成
部分,作⽤是 ⽤来书写真正的⽤例代码(脚本)
2.Testsuite 测试套件
, 作⽤是⽤来组装(打包)
3. TestRunner 测试执⾏(测试运⾏),
作⽤ 是⽤例执⾏
TestSuite(测试套件)的
4.TestLoader 测试加载,
是对 TestSuite(测试套件) 功
能的补充, 作⽤是⽤来组装(打包) TestCase(测试⽤例)
5. Fixture 测试夹具,
是⼀种代码结构, 书写前置⽅法
(执⾏⽤例之前的⽅法)代码和后置⽅法(执⾏⽤例之后的⽅
法) 代码 ,即⽤例执⾏顺序前置 ---> ⽤例 ---> 后置
Unittest 框架使用
TestSuite(测试套件)
将多条⽤例脚本集合在⼀起,就是套件, 即⽤来组装⽤例的
1. 导包 unittest
2. 实例化套件对象 unittest.TestSuite()
3. 添加⽤例⽅法
TestRunner(测试执⾏)
⽤来执⾏套件对象
1. 导包 unittest
2. 实例化 执⾏对象 unittest.TextTestRunner()
3. 执⾏对象执⾏ 套件对象 执⾏对象.run(套件对象)
整体步骤
- 导包 unittest
- 实例化套件对象 unittest.TestSuite()
- 添加⽤例⽅法
3.1 套件对象.addTest(测试类名('测试⽅法名'))
- 实例化 执⾏对象 unittest.TextTestRunner()
- 执⾏对象执⾏ 套件对象 执⾏对象.run(套件对象)
代码案例
- ⽤例代码⽂件
# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是
测试类
class TestDemo1(unittest.TestCase):
# 3. 书写测试⽅法, ⽅法中的代码就是真正⽤例代码,
⽅法名必须以 test 开头
def test_method1(self):
print('测试⽅法1-1')
def test_method2(self):
print('测试⽅法1-2')
- 套件和执⾏
# 1. 导包 unittest
import unittest
from hm_02_testcase1 import TestDemo1
from hm_02_testcase2 import TestDemo2
# 2. 实例化套件对象 unittest.TestSuite()
suite = unittest.TestSuite()
# 3. 添加⽤例⽅法
# 3.1 套件对象.addTest(测试类名('测试⽅法名')) # 建
议复制
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))
# 4. 实例化 执⾏对象 unittest.TextTestRunner()
runner = unittest.TextTestRunner()
# 5. 执⾏对象执⾏ 套件对象 执⾏对象.run(套件对象)
runner.run(suite)
# 套件对象.addTest(unittest.makeSuite(测试类名)) # 在
不同的 Python 版本中,可能没有提示
suite.addTest(unittest.makeSuite(TestDemo1))
suite.addTest(unittest.makeSuite(TestDemo2))
TestLoader 测试加载
import unittest
# 实例化加载对象并加载用例,得到套件对象
# suite = unittest.TestLoader().discover('用例所在的目录', '用例代码文件名*.py')
suite = unittest.TestLoader().discover('../../../../03-代码', 'hm_02*.py')
# 实例化执行对象并执行
# runner = unittest.TextTestRunner()
# runner.run(suite)
unittest.TextTestRunner().run(suite)