###文章内容有配套的 学习视频和笔记都放在了文章末尾###
1、Fixture装饰器的用途
- 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用Fixture来实现。
- 测试用例的前置条件可以使用Fixture实现,比直接使用Pytest框架的
setup()
和teardown()
函数更加灵活。 - Fixture是Pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!
- Fixture可以实现Unittest不能实现的功能,比如:Unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是Fixture却可以解决这个问题。
2、Fixture参数说明
可以使用pytest.fixture()
查看fixture()
函数的源码和所需要的参数,同Fixture装饰器需要的参数一样。
fixture(scope="function", params=None, autouse=False, ids=None, name=None):
说明:
scope
:表示被@pytest.fixture()
装饰器所标识方法的作用域。
作用域有四个级别,函数function(默认)
,类class
,模块module
,包package/session
。
说明:function
作用域包含函数和方法。params
:一个可选的参数列表,用于做Fixture的参数化。
可将数据提供给其他的Fixture,或者所有测试使用它 。autouse
:autouse=Ture
则开启自动使用Fixture功能,也是调用Fixture函数一种方法。
Fixture装饰器会自动执行作用域范围内的所有用例的前后置。autouse
默认值为Flase。ids
:一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。
如果没有提供ID,params将自动生成ID 。name
:表示给被@pytest.fixture()
装饰器修饰的方法取一个别名,调用时可以使用别名调用。
默认为装饰器所装饰的函数名称。
3、Fixture装饰器简单应用
使用Fixture装饰器来实现部分用例的前后置
比如:我们在测试一个操作流程时,有的测试用例需要登陆,有的测试用例执行不需要用户登陆。
如果要直接使用setup_function()
前置函数来实现,该文件中的所有用例执行前都需要进行用户登陆。
如下示例:
import pytest
# 函数级,前置函数
def setup_function():
print("用户登陆")
def test_add_cart():
print("添加购物车--需要登录")
def test_add_address():
print("添加收货地址--需要登录")
def test_browser_goods():
print("浏览商品--不需要登录")
if __name__ == '__main__':
pytest.main()
"""
执行结果:
用户登陆
添加购物车--需要登录
PASSED用户登陆
添加收货地址--需要登录
PASSED用户登陆
浏览商品--不需要登录
PASSED
"""
我们可以使用Fixture装饰器来实现部分用例的前后置,如下示例
"""
1.学习目标
掌握pytest fixture定义
2.操作步骤
1.在定义的函数前添加装饰器