pytest学习和使用13-Pytest的fixture如何使用request传入参数?
【摘要】 1 使用场景当我们为了提高用例的复用性,会用到不同的fixture,比如登陆场景;但是如果登陆场景,我们使用不同的账号进行测试,那如何来做?此时不能使用fixture把账号直接写死,需要通过传参的方式来实现。 2 传单个参数# -*- coding:utf-8 -*-# 作者:NoamaNelson# 日期:2022/12/27 # 文件名称:test_request.py# 作用:fix...
1 使用场景
- 当我们为了提高用例的复用性,会用到不同的
fixture
,比如登陆场景; - 但是如果登陆场景,我们使用不同的账号进行测试,那如何来做?
- 此时不能使用
fixture
把账号直接写死
,需要通过传参的方式来实现。
2 传单个参数
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27
# 文件名称:test_request.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pytest
# 传一个参数
@pytest.fixture()
def user_login(request):
user_name = request.param
return user_name
data = ["user_name01", "user_name02"]
@pytest.mark.parametrize("user_login", data, indirect=True)
def test_login(user_login):
print(f"登陆用户的名称为:{user_login}")
if __name__ == '__main__':
pytest.main(["-s", "test_request.py"])
test_request.py::test_login[user_name01] PASSED
[ 50%]登陆用户的名称为:user_name01
test_request.py::test_login[user_name02] PASSED
[100%]登陆用户的名称为:user_name02
============================== 2 passed in 0.03s ==============================
- 其中
indirect=True
参数是为了把user_login
当成一个函数去执行,而不是一个参数,并且将data
当做参数传入函数。
3 传多个参数
- 传多个参数,需要通过字典去传。
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27
# 文件名称:test_request01.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pytest
# 传多个参数
@pytest.fixture()
def user_login(request):
user_name = request.param
return user_name
data = [{"user_name": "user_name01", "passwd": "passwd01"},
{"user_name": "user_name02", "passwd": "passwd02"}
]
@pytest.mark.parametrize("user_login", data, indirect=True)
def test_login(user_login):
print(f"登陆用户的名称为:{user_login['user_name']},登陆的密码: {user_login['passwd']}")
if __name__ == '__main__':
pytest.main(["-s", "test_request01.py"])
test_request01.py::test_login[user_login0] PASSED
[ 50%]登陆用户的名称为:user_name01,登陆的密码: passwd01
test_request01.py::test_login[user_login1] PASSED
[100%]登陆用户的名称为:user_name02,登陆的密码: passwd02
============================== 2 passed in 0.04s ==============================
4 多个fixtrue
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27
# 文件名称:test_request02.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pytest
# 传多个fixture
@pytest.fixture()
def user_name(request):
name = request.param
return name
@pytest.fixture()
def user_pwd(request):
pwd = request.param
return pwd
data = [("user_name01", "pwd01"), ("user_name02", "pwd02")]
@pytest.mark.parametrize("user_name, user_pwd", data, indirect=True)
def test_login(user_name, user_pwd):
print(f"登陆信息为{user_name}, {user_pwd}")
if __name__ == '__main__':
pytest.main(["-s", "test_request02.py"])
test_request02.py::test_login[user_name01-pwd01] PASSED
[ 50%]登陆信息为user_name01, pwd01
test_request02.py::test_login[user_name02-pwd02] PASSED
[100%]登陆信息为user_name02, pwd02
============================== 2 passed in 0.03s ==============================
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)