03. Fixture
2024年10月28日大约 3 分钟
03. Fixture
Fixture引入案例小需求
- 在一个测试类中定义多个测试方法,查看每个测试方法执行完所花费的时长
import unittest class TestFixture(unittest.TestCase): def before(self): print("start time=", time.time()) def after(self): print("end time=", time.time()) def test01(self): self.before() print("test01") self.after() def test02(self): self.before() print("test02") self.after()
思考:这个案例的代码有什么特点?
答:测试用例执行之前做一些事情, 测试用例之后又做一些事情
1. Fixture介绍
Fixture:对一个测试用例环境的初始化和销毁,简单理解就是一种代码结构
Fixture控制级别
方法级别
类级别
模块级别
2. 方法级别
使用方式
初始化(前置处理)
# 方法级别:初始化(前置处理) def setUp(self) -> None: print('运行一次测试方法就会先运行一次 setUp')
销毁(后置处理): def tearDown(self) -->
# 方法级别:销毁(后置处理): def tearDown(self) -> None: print('运行一次测试方法就会后运行一次 tearDown')
总结
- 运行于测试方法的始末,即:运行一次测试方法就会运行一次 setUp 和 tearDown
3. 类级别
使用方式
初始化(前置处理):
# 类级别:初始化(前置处理) @classmethod def setUpClass(cls) -> None: print('每个测试类只会先运行一次setUpClass')
销毁(后置处理):
# 类级别:销毁(后置处理) @classmethod def tearDownClass(cls) -> None: print('每个测试类只会后运行一次tearDownClass')
总结
- 运行于测试类的始末,即:每个测试类只会运行一次 setUpClass 和 tearDownClass
4. 模块级别
使用方式
初始化(前置处理)
def setUpModule(): print("整个模块只会先运行一次setUpModule")
销毁(后置处理)
def tearDownModule(): print("整个模块只会后运行一次tearDownModule")
总结
- 运行于整个模块的始末,即:整个模块只会运行一次setUpModule和tearDownModule
5. 案例
import unittest
"""
Fixture(测试夹具):
书写在TestCase代码中,是一个代码结构,可以在每个方法执行前后添加都会执行的内容
举例:
方法级别: 运行一次测试方法就会运行一次setUp和tearDown
类级别: 运行于测试类的始末,即:每个测试类只会运行一次setUpClass和tearDownClass
模块级别:运行于整个模块的始末,即:整个模块只会运行一次setUpModule和tearDownModule
"""
def setUpModule():
print("this is setupModule")
def tearDownModule():
print("this is tearDownModule")
"""
代码结构, 在⽤例执⾏前后会⾃动执⾏的代码结构
tpshop 登录
1. 打开浏览器 (⼀次)
2. 打开⽹⻚,点击登录 (每次)
3. 输⼊⽤户名密码验证码1,点击登录 (每次, 测试⽅法)
4. 关闭⻚⾯ (每次)
2. 打开⽹⻚,点击登录 (每次)
3. 输⼊⽤户名密码验证码2,点击登录 (每次, 测试⽅法)
4. 关闭⻚⾯ (每次)
2. 打开⽹⻚,点击登录 (每次)
3. 输⼊⽤户名密码验证码3,点击登录 (每次, 测试⽅法)
4. 关闭⻚⾯ (每次)
5. 关闭浏览器 (⼀次)
"""
class TestLogin(unittest.TestCase):
# 方法级别:初始化(前置处理)
def setUp(self) -> None:
print('2. 打开网页, 点击登录')
# 方法级别:销毁(后置处理):
def tearDown(self) -> None:
print('4. 关闭网页')
# 类级别:初始化(前置处理)
@classmethod
def setUpClass(cls) -> None:
print('1. 打开浏览器')
# 类级别:销毁(后置处理)
@classmethod
def tearDownClass(cls) -> None:
print('5. 关闭浏览器')
def test_1(self):
print('3. 输入用户名密码验证码1,点击登录 ')
def test_2(self):
print('3. 输入用户名密码验证码2,点击登录 ')
def test_3(self):
print('3. 输入用户名密码验证码3,点击登录 ')
if __name__ == '__main__':
unittest.main()
this is setupModule
1. 打开浏览器
2. 打开网页, 点击登录
3. 输入用户名密码验证码1,点击登录
4. 关闭网页
2. 打开网页, 点击登录
3. 输入用户名密码验证码2,点击登录
4. 关闭网页
2. 打开网页, 点击登录
3. 输入用户名密码验证码3,点击登录
4. 关闭网页
5. 关闭浏览器
this is tearDownModule