入门10-Pytest部分测试用例的前后置(fixture)(1-参数详解)
使用fixture实现部分测试用例前后置,能支持多个参数,使用方式如下
@pytest.fixture(scope=”function”,autouse= False, params=loginutil(),ids=[0,1,2],name="login")
默认值,score = None, autouse=False, params = None, ids=None, name= None.
各个参数详解
Scope:作用域
Function: 用例之前和之后
Class: 类之前和之后
Package/session :#整个项目会话之前和之后
Function:
- 手动方式,在测试用例参数里加入fixture的名称
- Fix通过return或yield返回的话,则可以通过固件名字传递到测试用例当中
Class:
- 手动调用 @pytest.mark.userfixture(“fixture名称”)
Package/session
- 一般结合conftest.py文件来实现
Autouse = True #自动执行,所有用例自动执行,默认是False,False时则需要手动调用,手动调用方式不同scope不一样,见Scope介绍。
例如 scope为测试用例函数时:
@pytest.fixture(scope=”function”)
def exe_database_sql():
print(“”) #之前执行
yield
print(“”) #之后执行
Class TestMashang():
def test_yiran(self, exe_database_sql):
#会执行exe_database_sql中的内容
Params: 实现参数化
- def exe_runcase(request):
print(request.param)
#request 和request.param是固定用法,request获取fixture中的params, request.param获取每个参数,调取该fixture的函数会按照参数逐个执行一遍
Ids: 不能单独使用,必须和param一起使用,作用是给参数起别名(这个别名只显示到测试用例函数名称中,不会替换其他位置)
name: 给fixture取别名,一旦设置,函数调用fixture时需要使用别名,使用本名将识别不了
所有参数使用时,完整示例:
1 import pytest 2 3 from Common.common import CommonUtil 4 5 def get_loginusers(): 6 return ["Lita","Happi","Jessy"] 7 8 @pytest.fixture(scope = "function",autouse = False,params = get_loginusers(),ids = [0,1,2],name = "login") 9 def exe_login(request): 10 print("Login first by " + request.param) 11 yield 12 print("Logout last by " + request.param) 13 14 workage = 4 15 class TestCompany(CommonUtil): 16 17 @pytest.mark.Normal 18 def test_company3(self,login): 19 print("this is company 3")
执行结果:
如果希望另外一个py文件中执行,则需要跟contest.py文件的使用,见下一章节