pytest--fixture参数化的实现方式和执行顺序
之前看到fixture函数可以通过添加,params参数来实现参数化,后续看到了悠悠 的博客,可以通过@pytest.mark.parametrize来实现,现在做一个总结
实现方式一
通过params函数实现fixture的参数化
import pytest
@pytest.fixture(params=[1,2,3])
def fixture_param(request):
request.param
print("\033[31;1m我是fixture_param,这是第%s次打印\033[0m"%request.param)
return request.param
def test_fixture_param(fixture_param):
print("我是test_fixture_param函数")
# print("我fixture_param现在是:%s"%fixture_param)
if __name__ == '__main__':
pytest.main(["-s",'test_fixture_params.py'])
结果
输出的结果是这样的
大家都知道,使用fixture函数有两种方法
第一种是:直接将fixture函数的名字当做参数传入
另一种是:使用装饰器@pytest.mark.usefixtures("fixture函数名") 由于这种不能同过parametrize来传参,这里不做赘述
实现方法二
通过@pytest.mark.parametrize来实现(只能实现第一种使用fixture的方法)
@pytest.fixture(params=[1,2,3])
def fixture_param(request):
request.param
print("\033[31;1m我是fixture_param,这是第%s次打印\033[0m"%request.param)
return request.param
@pytest.mark.parametrize("fixture_param",["a","b"],indirect=True)
@pytest.mark.parametrize("a,b",[(1,6),(2,7),(3,8),(4,9)])
def test_fixture_param_and_parametrize(a,b,fixture_param):
print("我是测试函数test_fixture_param_and_parametrize,参数a是%s,b是%s"%(a,b))
# print("我fixture_param现在是:%s"%fixture_param)
if __name__ == '__main__':
pytest.main(["-s",'test_fixture_params.py'])
注意:这个参数indirect=True,一定不能少,要不就会直接把 fixture_param当成测试函数的一个参数来用,加上indirect=True这个参数,才会在fixture的函数中查找
结果
结果是这样子的,从图中我们可以就看到,fixture中的params参数在这个test_fixture_param_and_parametrize函数中被覆盖了,而且不影响它在别的函数中的使用
刚刚,还想到了装饰器执行顺序的问题,不顾好像对于参数化测试没多大影响,反正执行结果都是 ?*?的都执行到了
可能,在功能开发过程中,需要用到这个顺序
执行顺序
fixture的执行顺序
上图就好了
调整一下上下和左右顺序
以上是执行结果
可以看出越接近函数名的装饰器或者参数,越早执行,好了,姑且这样子,反正我懂了
parametrize执行顺序
上图就好了
上图可以看出,越远的装饰器,越早遍历完*,可以看做下图
加上参数化fixture也是一样
pytest--fixture参数化的实现方式和执行顺序的更多相关文章
- js中页面加载完成后执行的几种方式及执行顺序
1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...
- C#创建对象时各种初始化属性、字段的方式的执行顺序
创建对象代码如下: new FilterInfo(Student.CreateTimeProperty,"朱七",Express.Equals,Relationship.Or) { ...
- Django中CBV的执行顺序之源码解析
浅析Django中的CBV的执行顺序 下图为CBV方式的执行顺序,大概执行流程如下: 其中浅蓝色为在假设自己写的类,即Test类中没有dispatch方法的情况下的执行顺序,当自己的类中有dispat ...
- 【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据
我们都知道参数化. 比如我要测试一个查询接口/test/get_goods_list,这个接口可以查询到商品的信息. 在请求中,我可以根据请参数goods_status的不同传值,可以查询到对应状态的 ...
- pytest.5.参数化的Fixture
From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...
- pytest.9.使用fixture参数化接口入参
From: http://www.testclass.net/pytest/test_api_using_params/ 背景 接上一节v2ex网站的查看论坛节点信息的api.具体如下: 节点信息 获 ...
- 【pytest官方文档】解读fixtures - 11. fixture的执行顺序,3要素详解(长文预警)
当pytest要执行一个测试函数,这个测试函数还请求了fixture函数,那么这时候pytest就要先确定fixture的执行顺序了. 影响因素有三: scope,就是fixture函数的作用范围,比 ...
- pytest用例的执行顺序
Pytest执行的顺序 当pytest运行测试函数时,它会查看该测试函数中的参数,然后搜索与这些参数具有相同名称的fixture.一旦pytest找到这些对象,它就会运行这些fixture 影响执行顺 ...
- Pytest fixture及conftest详解
前言 fixture是在测试函数运行前后,由pytest执行的外壳函数.fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集.配置测试前系统的初始状态.为批量测试提供数据源等 ...
随机推荐
- Linux命令行基础
常用命令 命令 功能 pwd 打开当前所在的文件目录 ls 查看当前文件夹下的文件(不包括隐藏文件) ls -a 查看当前文件夹下的文件(包括隐藏文件) ls -al 查看当前文件夹下的文件(包括隐藏 ...
- 007-li标签CSS水平居中垂直居中
水平居中是text-align:center垂直居中 一般是用 line-height比如你li的高度是80px 那你设置 line-height:80px 文字就垂直居中
- 对于Java Bean的类型转换问题()使用 org.apache.commons.beanutils.ConvertUtils)
在进行与数据库的交互过程中,由数据库查询到的数据放在 map 中,由 map 到 JavaBean 的过程中可以使用 BeanUtils.populate(map,bean)来进行转换 这里要处理的问 ...
- cookie小结
cookie的用处:当不同的用户访问同一家网站时(采用相同的请求地址),服务器如何区分不同用户的请求操作呢?需要浏览器对发出的每个请求进行标识.属于同一个会话的请求,都带有相同的标识,不同的会话带有不 ...
- CentOS 7 安装Redis4.0
redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用 redis存储数据的方法是以key-value的形式 value类型支持字符串,列表,哈希等多种类型 环境 : CnetOS7 ...
- log4j2 标签解析
根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers. status用来指定log4j本身的打印日志的级别. mo ...
- Java类型信息之RTTI
软件工程的一个核心问题就是软件的复用和扩展.面向对象思想通过封装,继承,派生等机制有效地解决了这个问题.但需求总是变幻莫测,不可琢磨,在面向对象这栋恢宏的大厦旁,还漂浮着一朵乌云,从而导致了RTTI的 ...
- 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...
- laravel 常见问题
1. Specified key was too long; max key length is 767 bytes 处理: 修改config/database.php , mysql配置.删除数据库 ...
- Python并发编程之线程池&进程池
引用 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我 ...