一、前言

上篇文章有提及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的混合使用的更多相关文章

  1. Pytest学习(四) - fixture的使用

    前言 写这篇文章,整体还是比较坎坷的,我发现有知识断层,理解再整理写出来,还真的有些难. 作为java党硬磕Python,虽然对我而言是常事了(因为我比较爱折腾,哈哈),但这并不能影响我的热情. 执念 ...

  2. [转载]pytest学习笔记

    pytest学习笔记(三)   接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...

  3. pytest 学习笔记一:参数化与组织分层

    组织分层: 1.普通方式,和unittest分层类似: setup_module()  # 通常放在类外 setup_class(cls) setup(self) teardown(self) tea ...

  4. pytest学习纪要123-针对经常用到的内容详实记录

    pytest123 本文主要参考:https://www.cnblogs.com/yoyoketang/tag/pytest 如有侵权,请站内联系我 目录 pytest123 1.setup和tear ...

  5. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  6. Pytest(3)fixture的使用

    fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...

  7. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

  8. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  9. 强化学习(十五) A3C

    在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...

  10. 强化学习(十四) Actor-Critic

    在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法.但是由于该算法 ...

随机推荐

  1. day54 Pyhton 前端JS05

    今日内容: 1.数组Array var colors = ['red','color','yellow']; 使用new 关键词对构造函数进行创建对象 var colors2 = new Array( ...

  2. Elasticsearch修改字段类型 (_reindex)

    1.设置索引t2为想要的数据类型 2.将t1 reindex到t2 3.数据reindex完成删除t1 4.设置索引t1为想要的数据类型 5.将t2 reindex到t1 如果 _reindex 超时 ...

  3. 50种编程语言,一句 “Hello, World”!展现编程语言七十年发展!

    mod confinment { use std::os::raw::{c_char}; extern "C" { pub fn puts(txt: *const c_char); ...

  4. 【C语言入门学习笔记】如何把C语言程序变成可执行文件!

    环境 在ANSI的任何一种实现中,存在两种不同的环境. 翻译环境:在这个环境里,源代码被转换为可执行的机器指令. 执行环境:用于实际执行代码. 翻译环境 组成一个程序的每个源文件通过编译过程分别转成目 ...

  5. docker19.03使用数据卷

    一,查看当前的docker版本 [root@localhost data]# docker --version Docker version 19.03.8, build afacb8b 说明:刘宏缔 ...

  6. php生成签名

    // 生成签名private function makeSignature($params){ foreach ($params as $key=>$value){ $arr[$key] = $ ...

  7. 这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。

    这是why哥的第 70 篇原创文章 从Dubbo的一次提交开始 故事得从前段时间翻阅 Dubbo 源码时,看到的一段代码讲起. 这段代码就是这个: org.apache.dubbo.rpc.RpcCo ...

  8. 教你怎么写jQuery的插件

    jQuery(以下简称JQ)是一个功能强大而又小巧的JS框架,现在很多网站都在使用JQ,本站也不例外.本文教大家如何写一个属于你自己的JQ插件. 本JQ插件例子是在你网站的文章结尾处添加你的版权. J ...

  9. Linux运维学习第一周记

    1 当年白岳伴清游, 2 江石台空一苇浮. 3 缥渺临风闻郢曲, 4 殷勤歧路看吴钩. 老气横秋方知世间沧桑! 以前一直忙,没有时间沉浸下来学习,一直都是浮着. 至此大疫,给生命按下了暂停键. 踏踏实 ...

  10. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...