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
标签:__,--,fixture,yield,pytest,print,def From: https://www.cnblogs.com/trystudy/p/17104302.html