首页 技术 正文
技术 2022年11月20日
0 收藏 973 点赞 2,462 浏览 2022 个字

一、前言

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

二、传单个参数

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

# 传单个参数
@pytest.fixture()
def getuser(request):
user = request.param
print(f" 获取用户: {user}")
return userdata = ["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 paramdata = [{"username": "jojo", "password": "123456"},
{"username": "hanmeimei", "password": "123456"},
{"username": "lilei", "password": "123456"}]@pytest.mark.parametrize("getlogins", data, 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 passworddata = [("jojo", "1"), ("lilei", "123654")]@pytest.mark.parametrize("getusername,getpassword", data, 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 pwddata1 = ["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来接收参数,否则不好用哦。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,078
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,553
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,402
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,177
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,814
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898