pytest--fixture使用
1、pytest的fixture介绍
假设有一个场景,有些用例需要登陆方法,另一些则不需要用到登陆方法,那么setup和teardown就没法满足此需求,所以pytest提供了fixture来补充这方面的需求,可以让指定的测试用例执行前后置操作。fixture是在测试用例运行前后执行的,对命名规范没有特别要求。fixture中的代码以yield为分割,测试用例执行前会先执行fixture中yield前面的代码(setup),测试用例执行后再执行fixture中yield后的代码(teardown)
注:fixture的yield不是必须有的,只有前置代码,没有yield(没有后置代码),那测试用例执行完成后就结束了。没有前置代码,开头yield(只有后置代码),无论测试过程中发送什么错误,yield后续的代码都会被执行
2、fixture的使用
2.1、fixture的简单例子
import pytest
#添加fixture修饰器 @pytest.fixture() def add(): print('---测试执行---') yield print('---测试结束---') class Test_add():
#传参为测试用例添加fixture def test_01(self, add): print('用例一') def test_02(self): print('用例二') if __name__ == '__main__': #命令行参数--setup-show可以来查看详细的fixture信息 pytest.main()
输出结果:
从上面的打印可以看到,只有test_01测试用例执行了前后置的打印,符合我们只在test_01传参设置了fixture(add)的情况
2.2、同一个测试用例也可以设置多个fixture,执行顺序:前置部分,先传入的参数先执行,后传入的参数后执行,后置部分则相反
import pytest @pytest.fixture() def add(): print('---测试执行---') yield print('---测试结束---') @pytest.fixture() def log(): print('开始记录log') yield print('记录log结束') class Test_add(): def test_01(self,add,log): print('用例一') def test_02(self): print('用例二') def test_03(self,log,add): print('用例三') if __name__ == '__main__': #命令行参数--setup-show可以来查看详细的fixture信息 pytest.main()
输出结果:
2.3、fixture执行过程中,无论遇到什么异常,都会继续执行yield后的后置代码部分(teardown)
import pytest @pytest.fixture() def add(): print('---测试执行---') yield print('---测试结束---') class Test_add(): #fixture执行过程中,无论遇到什么异常,都会继续执行yield后的后置代码部分(teardown) def test_error(self,add): print('错误用例') assert 1 == 2 print('测试用例结束') if __name__ == '__main__': #命令行参数--setup-show可以来查看详细的fixture信息 pytest.main()
输出结果:
可以看到test_error测试用例中出现错误,后置teardown的打印仍旧执行,且同时将测试用例中错误原因和行数也打印出来
2.4、当一个fixture调用函数名称因为命名习惯,重复比较多的时候,可以使用name参数进行别名来区分,传参时候将自己所定义的name参数传入即可调用对应的fixture
代码如下:
import pytest #当一个fixture调用函数名称因为命名习惯,重复比较多的时候,可以使用name参数进行别名来区分 @pytest.fixture(name='p1') def login(): print('请输入账号密码') yield print('登陆成功') def test_01(login): print('test_01执行')
输出结果:
注意:定义name别名后,再使用fixture函数名进行传参的话,会提示找不到对应的fixture
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人