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中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集.配置测试前系统的初始状态.为批量测试提供数据源等 ...
随机推荐
- C++ MFC万能的类向导
MFC的类向导 只要你掌握了类向导,你基本就已经掌握了MFC了,毕竟布局和代码都是自动生成,再加上C++基础上手还是挺快的,剩下的就是多多练习了. 转自: https://blog.csdn.net/ ...
- Excle中的使用小技巧
关于从数据库中拷贝来的数字,拷贝到excle中,那些数字都变成了科学计算法. 步骤1,鼠标右键选中的列,选择“设置单元格格式(F)” 2.从这里面选中这些是否有小数,如果没有小数就把这个改成0
- springmvc中的一些服务器报错
这是springmvc的前端控制器的加载格式要求.服务器加载web.xml后,它会在web-inf/下找名为spring[servlet名/handler处理器名]-servlet.xml文件. 可以 ...
- #WEB安全基础 : HTTP协议 | 0x14 HTTP的详细安全问题
我们提到过HTTP是不安全的. 由于任何人都可以向服务器发送请求,而并不会验证身份,所以这就会引发一些问题: 1,发出响应的服务器是否为正确的服务器 2,发送请求的客户端是否为正确的客户端 3,通信双 ...
- Oracle函数中对于NO_DATA_FOUND异常处理的研究
一直以来有一个困惑,一直没解决,昨天一哥们问我这个问题,决心弄清楚,终于得到了答案.先看下面这个函数: create or replace function fn_test(c_xm varchar) ...
- python练习--利用while循环和if语句,完成猜骰子的数字大小
#exampleimport random# 骰子投掷的随机叔numnum = random.randint(1,6)# 输入一个猜测的数字temp = input("请输入一个整数:&qu ...
- 解决c# progressBar更新出现界面假死
最近一个项目需求中的一个功能是需要用progressBar反映处理文件的进度. 研究了Invoke和BeginInvoke方法. Control.Invoke 方法 (Delegate) :在拥有此控 ...
- C# 获取 串口 设备名称 与 串口号 ManagementObjectSearcher类
1.效果图: 2.代码 class Program { static void Main(string[] args) { GetComList(); } private static void Ge ...
- Angular4 管道
- ajax 防止重复提交
参考链接:http://www.hollischuang.com/archives/931 http://blog.csdn.net/everything1209/article/details/52 ...