pytest fixture的使用总结
1、前言
如果我想实现以下场景:用例1 要先登录,用例2不需要登录,用例3需要登录。 很显然这就无法用setup和teardown来实现了。 这就是本篇学习的目的:自定义测试用例的预置条件;
2、fixture是什么?
1) fixture 是在测试函数运行前后,由pytest 执行的外壳函数;fixture的本质就是函数。
2)它的作用是将一些非核心的测试逻辑从测试函数中分离出来,以便于其他测试函数使用,同时保持这些边缘逻辑的一致性
3)fixture中的代码可以进行定制,满足多变的测试需求,包括:定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源等
3、fixture的定义
通过一个例子来看一下fixture的定义:
@pytest.fixture()装饰器用于声明函数是一个fixture。即 被装饰器修饰的函数就是一个fixture函数,fixture函数内部可以实现一些初始化的操作。
1 @pytest.fixture(scope="function") # 作用域:函数级别
2 def login():
3 print('输入用户名、密码登录')
4、Fixture参数详解
4.1 Fixture的调用方式 :
@pytest.fixture(scope="function",params=None,autouse=False,ids=None,name=None)4.2 参数详解:
4.2.1 SCOPE
用于控制Fixture的作用范围
作用类似于Pytest的setup/teardown
默认取值为function(函数级别),控制范围的排序为:session > module > class > function
function:函数级 每一个函数或方法都会调用 ;class:函数级 模块级 每一个.py文件调用一次;module:模块级 每一个.py文件调用一次;session:会话级 每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法
4.2.2 params
Fixture的可选形参列表,支持列表传入
默认None,每个param的值
fixture都会去调用执行一次,类似for循环
可与参数ids一起使用,作为每个参数的标识,详见ids
被Fixture装饰的函数要调用是采用:request.param
4.2.3 ids
用例标识ID,与params配合使用,一对一关系.
4.2.4 Name
----fixture的重命名
通常来说使用 fixture 的测试函数会将 fixture 的函数名作为参数传递,但是 pytest 也允许将fixture重命名
如果使用了name,那只能将name传如,函数名不再生效
调用方法:@pytest.mark.usefixtures(‘fixture1’,‘fixture2’)
4.2.5 autouse
默认False,若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名,作用范围跟着scope走(谨慎使用)
5、Fixture使用方法
1)fixture函数名直接作为测试用例的实参进行传递
2)使用装饰器 @pytest.mark.usefixtures("fixture")修饰测试用例函数---括号内为fixture函数名称
3)使用autouse 参数
指定fixture的参数 autouse=True 这样每个测试用例函数 会自动调用fixtrue(这里其实不准确,因为还涉及到fixture的范围scope,autouse=True时 在设置的范围内都会被调用)
小结: 如果测试用例需要使用fixture中返回的参数,那么通过后面的这两种方法是无法使用返回的参数的,因为fixture中返回的数据默认存在fixture名字里,所以只能使用第一种方式才可以调用fixture种的返回值。
1 @pytest.fixture() 2 def login(): 3 print('请输入用户名和密码登录') 4 return "hello" 5 6 7 def test_01(login): 8 print("用例01,执行前需要先调用login") 9 print(login + 'word') 10 11 12 @pytest.mark.usefixtures('login') 13 def test_02(): 14 print('用例02,执行前需要先调用login') 15 16 17 def test_03(): 18 print('用例03,执行前需要调用login') 19 20 21 if __name__ == '__main__': 22 pytest.main(['-vs', 'test_fixture.py'])
部分内容摘自:
https://www.cnblogs.com/1050619969kong/p/15572830.html
https://blog.csdn.net/qq_42610167/article/details/119818358
本文来自博客园,作者:别摸我的马甲线,转载请注明原文链接:https://www.cnblogs.com/a-wyw/p/16199397.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律