入门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文件的使用,见下一章节

posted @ 2023-05-08 22:15  蜗牛果果  阅读(60)  评论(0编辑  收藏  举报