加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Pytest学习(十) - parametrize、fixture、request的混合使用

发布时间:2020-12-14 14:47:35 所属栏目:百科 来源:网络整理
导读:一、前言 上篇文章有提及pytest.mark.parametrize的使用,这次在此基础上结合fixture和request再做个延伸。 二、传单个参数 即一个参数一个值,示例代码如下: # 传单个参数@pytest.fixture()def getuser(request): user = request.param print(f" 获取用户:

一、前言

上篇文章有提及pytest.mark.parametrize的使用,这次在此基础上结合fixture和request再做个延伸。

二、传单个参数

即一个参数一个值,示例代码如下:

# 传单个参数
@pytest.fixture()
def getuser(request):
    user = request.param
    print(f" 获取用户: {user}")
    return user


data = ["lilei","jojo","hanmeimei"]
# 用英文哈,中文会被加密
ids = [f" mark input :{user} " for user in data]


@pytest.mark.parametrize("getuser",data,ids=ids,indirect=True)
class TestClass(object):
    def test_getuser(self,getuser):
        print(f"输出用户信息:{getuser}")

运行结果如下:


说明:
仅当 indirect=True,getuser才会当成一个函数去执行,而不是一个参数,并将data当做参数传入函数,test_getuser(self,getuser),这里的getuser是获取fixture返回的值。

三、传多个参数

即结合字典的使用,示例代码如下:

# 传多个参数
@pytest.fixture()
def getlogins(request):
    param = request.param
    print(f" 获取用户名: {param['username']} 获取密码:{param['password']}")
    return param


data = [{"username": "jojo","password": "123456"},{"username": "hanmeimei",{"username": "lilei","password": "123456"}]


@pytest.mark.parametrize("getlogins",indirect=True)
def test_getlogin(getlogins):
    print(f"用户名:{getlogins['username']} 密码:{getlogins['password']}")

运行结果如下:

四、一个装饰器加多个fixture

一个装饰器的意思就是,数据源是一个,这次我们用元祖来做数据源,示例代码如下:

# 一个装饰器+多个fixture
@pytest.fixture(scope="module")
def getusername(request):
    username = request.param
    print(f" username is {username}")
    return username


@pytest.fixture(scope="module")
def getpassword(request):
    password = request.param
    print(f" password is {password}")
    return password


data = [("jojo","1"),("lilei","123654")]


@pytest.mark.parametrize("getusername,getpassword",indirect=True)
def test_getUserinfo(getusername,getpassword):
    print(f"用户名:{getusername} 密码:{getpassword}")

运行结果如下:

五、多个装饰器+多个fixture

就是多个数据源,这次用list来做演示,示例代码如下:

# 多个装饰器+多个fixture
@pytest.fixture()
def users(request):
    user = request.param
    print(f" 用户名:{user}")
    return user


@pytest.fixture()
def pwds(request):
    pwd = request.param
    print(f" 密码:{pwd}")
    return pwd


data1 = ["lilei","hameimei","jojo"]
data2 = ["1","2","3"]


@pytest.mark.parametrize("users",data1,indirect=True)
@pytest.mark.parametrize("pwds",data2,indirect=True)
def test_getuserinfo(users,pwds):
    print(f"用户名为:{users} 密码为:{pwds}")

运行结果如下:


细心的同学可能会发现,这块和上篇文章第4小结一样,多个参数的混合使用,类似笛卡尔积的意思。
注意:
当多个参数时,需要用 变量=request.param来接收参数,否则不好用哦。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读