unittest框架基本使用
软件测试
unittest 框架的介绍
- 框架
-
framework
-
为了解决⼀类事情的功能集合
- Unittest 框架
是 Python ⾃带的单元测试框架 - ⾃带的, 可以直接使⽤, 不需要单外安装 - 测试⼈员 ⽤来做⾃动化测试, 作为⾃动化测试的执⾏框架, 即 管理和执⾏⽤例的
- 使⽤的原因
- 能够组织多个⽤例去执⾏
- 提供丰富的断⾔⽅法
- 能够⽣成测试报告
- 核⼼要素(组成)
1. TestCase 测试⽤例, 这个测试⽤例是 unittest 的组成 部分,作⽤是 ⽤来书写真正的⽤例代码(脚本)
2. Testsuite 测试套件, 作⽤是⽤来组装(打包) TestCase(测试⽤例) 的,即 可以将多个⽤例脚本⽂件 组装 到⼀起
3. TestRunner 测试执⾏(测试运⾏), 作⽤ 是⽤例执⾏ TestSuite(测试套件)的
4. TestLoader 测试加载, 是对 TestSuite(测试套件) 功 能的补充, 作⽤是⽤来组装(打包) TestCase(测试⽤例) 的
5. Fixture 测试夹具,是⼀种代码结构, 书写 前置⽅法 (执⾏⽤例之前的⽅法)代码 和后置⽅法(执⾏⽤例之后的⽅ 法) 代码 ,即 ⽤例执⾏顺序 前置 ---> ⽤例 ---> 后置
TestCase 测试⽤例
书写真正的⽤例代码(脚本) 单独⼀个测试⽤例 也是可以执⾏
- 步骤
1. 导包 unittest
2. 定义测试类, 需要继承 unittest.TestCase 类, 习惯性
类名以 Test 开头
3. 书写测试⽅法, 必须以 test 开头
4. 执⾏
-
注意事项
1. 代码⽂件名字 要满⾜标识符的规则 2. 代码⽂件名 不要使⽤中⽂
-
代码
# 1. 导包 unittest import unittest # 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是 测试类 class TestDemo(unittest.TestCase): # 3. 书写测试⽅法, ⽅法中的代码就是真正⽤例代码, ⽅法名必须以 test 开头 def test_method1(self): print('测试⽅法⼀') def test_method2(self): print('测试⽅法⼆') # 4. 执⾏ # 4.1 在类名或者⽅法名后边右键运⾏ # 4.1.1 在类名后边, 执⾏类中的所有的测试⽅法 # 4.1.2 在⽅法名后边, 只执⾏当前的测试⽅法 # 4.1 在主程序使⽤使⽤ unittest.main() 来执⾏, if __name__ == '__main__': unittest.main()
TestSuite 和 TestRunner
TestSuite(测试套件)
将多条⽤例脚本集合在⼀起,就是套件, 即⽤来组装⽤例的
1. 导包 unittest
2. 实例化套件对象 unittest.TestSuite()
3. 添加⽤例⽅法
TestRunner(测试执⾏)
⽤来执⾏套件对象
1. 导包 unittest
2. 实例化 执⾏对象 unittest.TextTestRunner()
3. 执⾏对象执⾏ 套件对象 执⾏对象.run(套件对象)
整体步骤
1. 导包 unittest
2. 实例化套件对象 unittest.TestSuite()
3. 添加⽤例⽅法
3.1 套件对象.addTest(测试类名('测试⽅法名'))
4. 实例化 执⾏对象 unittest.TextTestRunner()
5. 执⾏对象执⾏ 套件对象 执⾏对象.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 TestDemo
from hm_02_testcase2 import TestDemo
# 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 测试加载
作用和 TestSuite 作用一样,组装用例代码, 同样也需要使用
TextTestRunner() 去执行
10 个用例脚本 makeSuite()
1. 导包 unittest
2. 实例化加载对象并加载用例 ---> 得到的是 套件对象
3. 实例化执行对象并执行
import unittest
# 实例化加载对象并加载⽤例,得到套件对象
# suite = unittest.TestLoader().discover('⽤例所在的
⽬录', '⽤例代码⽂件名*.py')
suite = unittest.TestLoader().discover('.','hm_02*.py')
# 实例化执⾏对象并执⾏
# runner = unittest.TextTestRunner()
# runner.run(suite)
unittest.TextTestRunner().run(suite)
Fixture
在类中所有的测试⽅法执⾏前后 会⾃动执⾏的代码, 只执⾏⼀次
# 类级别的 Fixture 需要写作类⽅法
@classmethod
def setUpClass(cls): # 类前置
pass
@classmethod
def tearDownClass(cls): # 后置
pass
# 类前置 ⽅法前置 ⽤例 ⽅法后置 ⽅法前置 ⽤例 ⽅法后置
类后置