Pytest学习(十) - parametrize、fixture、request的混合使用
一、前言
上篇文章有提及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", "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 password
data = [("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 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来接收参数,否则不好用哦。
Pytest学习(十) - parametrize、fixture、request的混合使用的更多相关文章
- Pytest学习(四) - fixture的使用
前言 写这篇文章,整体还是比较坎坷的,我发现有知识断层,理解再整理写出来,还真的有些难. 作为java党硬磕Python,虽然对我而言是常事了(因为我比较爱折腾,哈哈),但这并不能影响我的热情. 执念 ...
- [转载]pytest学习笔记
pytest学习笔记(三) 接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...
- pytest 学习笔记一:参数化与组织分层
组织分层: 1.普通方式,和unittest分层类似: setup_module() # 通常放在类外 setup_class(cls) setup(self) teardown(self) tea ...
- pytest学习纪要123-针对经常用到的内容详实记录
pytest123 本文主要参考:https://www.cnblogs.com/yoyoketang/tag/pytest 如有侵权,请站内联系我 目录 pytest123 1.setup和tear ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- Pytest(3)fixture的使用
fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- 强化学习(十六) 深度确定性策略梯度(DDPG)
在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
- 强化学习(十四) Actor-Critic
在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...
随机推荐
- Pyhton中获取列表的索引
index方法 list_a= [12,213,22,2,32] for a in list_a: print(list_a.index(a)) 结果: 0 1 2 3 4 如果列表的没有重复项的话那 ...
- go视频提取音频
package main import ( "bytes" "fmt" "log" "os" "os/exec ...
- maven项目导入eclipse报错
错误提示: 原因:未安装maven,缺少ojdbc6.jar包 解决: 一.安装maven 第一步百度搜索Maven官网,进去之后,下载apache-maven-3.5.3-bin.zip,下载完成之 ...
- win10 随记
昨天买的台式电脑,今天到了.有点小激动(用了5年的i3笔记本可以稍微休息下了,哈哈) 拿到电脑,和朋友一块,插线...最终连接成功. 记录下过程中的乌龙操作,,, 1.连接好线路后,显示器没反应,(显 ...
- No compatible servers were found,You'll need to cancel this wizard and install one!
原文链接:https://www.jianshu.com/p/a11f93fb16ce 问题原因 笔记本重装的windows系统,重新安装mysql的时候,显示错误,看了一下缺失服务,实际上可能是缺少 ...
- tp3.2,php5使用PHPExcel将数据导出至Excel
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel public function checkexcel($id){ ...
- C语言知识点复习梳理
C语言知识点复习梳理 C语言的知识点讲完了,接下来就是做一下整理与总结,然后就会进入其他知识的学习. 本文目录如下: 基础知识. 顺序程序设计. 数据类型. 标准输入输出. 进制转换. 选择结构. 循 ...
- 世界碰撞算法原理和总结(sat gjk)
序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...
- 基于ArcGIS ModelBuilder的GDB批量分区裁剪——可保留原始GDB要素集要素类结构
文章版权由作者pxtgis和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/pxtgis/. 一.概述 在数据处理工作中经常遇到批量裁剪ArcGIS文件地理数据库( ...
- 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子
1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...