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中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集.配置测试前系统的初始状态.为批量测试提供数据源等 ...
随机推荐
- element-ui+vue-treeselect校验
element-ui+vue-treeselect下拉框的校验 问题陈述: 在element-ui中有自带的表单验证,但是使用的vue-treeselect无法验证 vue-treeselect DE ...
- .NET CORE 使用Dapper连接MSSQL,MYSQL
Project file: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <Outp ...
- python爬虫中scrapy框架是否安装成功及简单创建
判断框架是否安装成功,在新建的爬虫文件夹下打开盘符中框输入cmd,在命令中输入scrapy,若显示如下图所示,则说明成功安装爬虫框架: 查看当前版本:在刚刚打开的命令框内输入scrapy versio ...
- django的url反向解析
目的:防止页面中url地址改变,其他与这个URL地址有关联的都要改,减少耦合度 使用:主要分为在html中和视图函数中的使用 HTML中的使用: 如果我们在项目的url文件中通过include导入了应 ...
- js统计字数
<div class="toolcode"> <style type="text/css"> .num { font-size: 14p ...
- Ubuntu 安装第三方工具
1. pycharm 安装(链接:https://pan.baidu.com/s/1fIp-AhBmnPvqYW40140RLw 提取码:ukkv ) 1.运行以下命令安装 sh pycha ...
- Color Schema 配色随笔
附pdf文件: ColorSchema.pdf
- UDP广播 与 TCP客户端 --服务端
随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们 ...
- flask 电子邮件进阶实践-用模板发送163邮件
电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...
- 2018-2019-2 20165215《网络攻防技术》Exp6 信息搜集与漏洞扫描
目录 实验目的 实验内容 基础知识 实验步骤 (一)各种搜索技巧的应用 Google Hacking 搜索网址目录结构 搜索特定类型的文件 路由侦查 (二)DNS IP注册信息的查询 whois域名注 ...