目录
在第4篇中,我们讲了前置和后置的各种setup和teardown,但是在实际应用中,有可能有的用例需要用到用例的前置,而有的用例又不需要,这样用setup和teardown实现起来就比较麻烦了。pytest提供了fixture的方法,让使用者自己灵活应用。
1、fixture参数说明
1.1参数详细说明
@pytest.fixture(scope="function",autouse=False, params=["fixture1","fixture2","fixture13"],ids=[1,2,3])
scope :作用域,默认为function:测试用例级别,class:测试类、module:模块、package:包、session:测试会话。
比较常用的是function,在没用例判断是否调用
session,在所有用例执行前执行前置,所有用例执行结束后执行后置,并且可以跨文件
autouser:是否自主执行,默认是False,如果设为True就跟各种setup和teardown的效果一样了。
params和ids配套使用,params是参数化,像前置函数传递列表作为参数,根据列表中元素的个数,该前置会被调用多次,调用该前置的测试用例也会执行多次。ids是为参数取别名,当参数很长时便于识别。
1.2利用yield实现后置
在fixture修饰的函数里面用yield实现对应的后置函数
1.3params和ids参数的代码实例
'''
前置传入列表参数
对应的前置函数要获取参数需要用request,获取参数要用request.param,注意这里是param表示是params中的元素
'''
from BaseLog import logger
import pytest
fixture_params = ["我是参数我虽然很长但是没有意义fixture1","我是参数我虽然很长但是没有意义fixture2","我是参数我虽然很长但是没有意义fixture13"]
@pytest.fixture(scope="function",autouse=False, params=fixture_params)
def fix_function(request):
#特别注意这里需要一个参数request,并且调用参数是request.param,而不是request.params
print ("这里是fix_function,",request.param)
#用yield实现后置函数
yield
print("这里是fix_function的后置")
def test_case1(fix_function):
#测试函数
Expected = 2
Actual = 2
print("我是test_case1")
assert Expected == Actual
if __name__ =="__main__":
# -s:显示用例中的输出
# -v:输出更详细的用例执行信息
# __file__:本文件
pytest.main(["-vs","BASE/file_test.py"])
执行结果,可以看出前置、后置、测试用例都根据传入的参数执行多次,另外可以看到在执行结果中测试用例里面显示了传入的参数
[Running] python -u "d:\Test\Android_Test\BASE\file_test.py"
============================= test session starts =============================
platform win32 -- Python 3.10.9, pytest-7.2.1, pluggy-1.0.0 -- D:\Python310\python.exe
cachedir: .pytest_cache
rootdir: d:\Test\Android_Test
plugins: rerunfailures-11.1.1, xdist-3.2.0
collecting ... collected 3 items
BASE/file_test.py::test_case1[\u6211\u662f\u53c2\u6570\u6211\u867d\u7136\