Python Pytest调用fixture之@pytest.mark.usefixtures()、叠加usefixtures、@pytest.fixture(autouse=True)用法详解

 

usefixtures与传fixture区别

 如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

 

1.函数或类里面方法直接传fixture的函数参数名称


@pytest.fixture()
def test1():print('\n开始执行function')def test_a(test1):print('---用例a执行---')class TestCase:def test_b(self,test1):print('---用例b执行')if __name__=="__main__":pytest.main(["-s","test03.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 itemstest03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.============================== 2 passed in 0.04s ==============================Process finished with exit code 0

2、fixture自动使用autouse=True 当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 autouse设置为True,自动调用fixture功能

@pytest.fixture(autouse=True)
def test1():print('\n开始执行function')def test_a():print('---用例a执行---')class TestCase:def test_b(self):print('---用例b执行')if __name__=="__main__":pytest.main(["-s","test03.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 itemstest03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.============================== 2 passed in 0.04s ==============================Process finished with exit code 0
@pytest.fixture(scope='module', autouse=True)
def test1():print('\n开始执行module')@pytest.fixture(scope='class', autouse=True)
def test2():print('\n开始执行class')@pytest.fixture(scope='function', autouse=True)
def test3():print('\n开始执行function')def test_a():print('---用例a执行---')def test_d():print('---用例d执行---')class TestCase:def test_b(self):print('---用例b执行---')def test_c(self):print('---用例c执行---')if __name__=="__main__":pytest.main(["-s","test03.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 4 itemstest03.py 
开始执行module开始执行class开始执行function
---用例a执行---
.
开始执行class开始执行function
---用例d执行---
.
开始执行class开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.============================== 4 passed in 0.05s ==============================Process finished with exit code 0

3、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

@pytest.fixture()
def test1():print('\n开始执行function')@pytest.mark.usefixtures('test1')
def test_a():print('---用例a执行---')@pytest.mark.usefixtures('test1')
class TestCase:def test_b(self):print('---用例b执行---')def test_c(self):print('---用例c执行---')if __name__=="__main__":pytest.main(["-s","test03.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 itemstest03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.============================== 3 passed in 0.05s ==============================Process finished with exit code 0

4、叠加usefixtures

如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

@pytest.fixture()
def test1():print('\n开始执行function1')@pytest.fixture()
def test2():print('\n开始执行function2')@pytest.mark.usefixtures('test1')
@pytest.mark.usefixtures('test2')
def test_a():print('---用例a执行---')@pytest.mark.usefixtures('test2')
@pytest.mark.usefixtures('test1')
class TestCase:def test_b(self):print('---用例b执行---')def test_c(self):print('---用例c执行---')if __name__=="__main__":pytest.main(["-s","test03.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 itemstest03.py 
开始执行function2开始执行function1
---用例a执行---
.
开始执行function1开始执行function2
---用例b执行---
.
开始执行function1开始执行function2
---用例c执行---
.============================== 3 passed in 0.04s ==============================Process finished with exit code 0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu Django项目后台不挂断运行之screen命令

1、安装screen apt install screen 2、新建一个screen screen -S web这样就会新开一个窗口。cd到你需要的目录然后输入你想输入的命令。输入: python manage.py runserver 0.0.0.0:80 3、重新开一个窗口,列出所有screen进程 screen -ls4、如果之前的s…

【Python】Paramiko模块实现Linux服务器远程文件操作

ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。 有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对…

Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer

引入 我们之前学习的都是测试用例的前置固件,也就是相当于“setup”。说到这,细心的你可能想到了,那有没有什么方式可以表示出“teardown”?这就是我们今天学习的yield和addfinalizer。 yield yield是一个关键字,它不…

django项目时间与Ubuntu时间不一致

今天发布项目后才发现log时间和win10系统时间或者date不一致。 查了好多。 最后:是django项目中settings中时区的问题 在settings中默认为UTC时区,我们应转换为中国时区 即做一下修改: LANGUAGE_CODE zh-Hans TIME_ZONE Asia/Shanghai…

【Python】Paramiko模块在Windows10中import ssl报错的处理方法

上一篇文章【Python】Paramiko模块实现Linux服务器远程文件操作 介绍了如何通过Paramiko进行 sftp的操作,但最近遇到一个问题,换上家里的windows10电脑后,执行脚本时发现报错:\lib\site-packages\cryptography\hazmat\bindings\op…

【Jmeter篇】Linux环境下安装部署运行Jmeter

JDK安装和配置 1、使用yum线上安装jdk1.8 yum -y list java* #浏览线上所有jdk版本列表 yum -y list java-1.8*#浏览线上jdk1.7版本列表 yum -y install java-1.8.0-openjdk* #下载安装jdk1.8套件 java -version #检查是否安装成功 2、配置全局环境变量 which java ls -…

django项目连接远程数据库

1、远程数据库开放连接权限 如果连接错误,请考虑 1)用户添加访问其他ip权限 2)3306端口是否开放 3)阿里云服务器安全组规则是否添加3306端口 2、django项目中settings中的host填写远程数据库的公有ip,及填写远程数…

【Python实战】使用python批量生成发票

一般的贸易或者货运型公司,经常需要做发票,有时候我们会遇到需要做大批量重复性的发票时,如果人工一个个去做,即耗时而且容易出错,这时我们可以用的python和excel相关的模块去批量生成。 现在有这样一个场景&#xff…

【Jmeter篇】Jmeter踩坑记(一)

踩坑一: Response code: Non HTTP response code: java.net.SocketTimeoutException Response message: Non HTTP response message: connect timed out 查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有…

Ajax动态拼接li并绑定事件

一、二对新增元素 再次进行绑定相应事件&#xff0c;例如在 Ajax 中的 success 返回函数中&#xff0c;再执行完新增元素的代码后进行绑定 success: $(body).append("<li idnew> new Li </li>"); //这里统一用click事件为例 $(#new).click(function(){}…

【PS】如何将截图获取的印章迁移到新图片上

有时候我们需要特殊签名或者合同印章时&#xff0c;可以通过其他图片上截图后&#xff0c;经过处理后放置到新的图片上&#xff0c;这个时候我们可以通过ps进行处理&#xff0c;主要三个流程&#xff1a; 1.截取需要的签名或印章&#xff0c;用ps消除多余的信息&#xff1b; 2…

【Jmeter篇】Jmeter分布式调度压测部署

Jmeter 是java 应用&#xff0c;对于CPU和内存的消耗比较大&#xff0c;因此&#xff0c;当需要模拟数以千计的并发用户时&#xff0c;使用单台机器模拟所有的并发用户就有些力不从心&#xff0c;甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力&#xff0c;j…

echarts案例链接

https://blog.csdn.net/luanpeng825485697/article/details/77198858 http://echarts.baidu.com/echarts2/doc/example/mix4.html#infographic

【工具】FTP软件FileZilla下载和连接服务器

作为一名偏后台程序测试的测试工程师&#xff0c;经常会接触运维相关工作&#xff0c;与服务器打交道。 一般公司会搭建内网环境和外网环境&#xff0c;项目开发、SIT测试主要是在内网环境做&#xff0c;然后等到UTA、预投产阶段在外网环境。 如果公司业务量大&#xff0c;多个…

【Fiddler篇】Stave插件之环境映射

Stave是一个Fiddler扩展插件&#xff0c;让Fiddler能将URL映射到本地目录&#xff0c;实现批量文件自动响应。 Fiddler自带的AutoResponder每条自动响应规则只能对应一个本地文件&#xff0c; 在文件数目较多的时候&#xff0c;使用起来很不方便&#xff0c;往往需要部署到本地…

C++ const 引用 指针答疑

常变量 const int a 常引用 const int &a 常指针 const int *a const * int a 用法1&#xff1a;常量 取代了C中的宏定义&#xff0c;声明时必须进行初始化(!c类中则不然&#xff09;。const限制了常量的使用方式&#xff0c;并没有描述常量应该如何分配。如果编译器知…

【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测

临界区控制器&#xff08;critical section Controller&#xff09; 作用&#xff1a;临界区控制器确保其子节点下的取样器或控制器将被执行&#xff08;只有一个线程作为一个锁&#xff09;确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定…

【Python】Python3编码规范

Python核心发行代码里面优先使用ASCII码或Latin-1编码。3.0后UTF-8编码优先于Latin-1。 一 、空格与缩进&#xff1a; 缩进 对于每一次缩进使用4个空格。使用括号、中括号、大括号进行垂直对齐&#xff0c;或者缩进对齐。 制表符还是空格? 永远不要将制表符与空格混合使用。P…

服务器判断客户端是否连接标志

利用客户端传回来的数据长度&#xff0c;如果小于0则是断开状态&#xff0c;否则为连接状态

【Jmeter篇】后置处理器之边界提取器

我们想从接口中提取一些想用的东西&#xff0c;不习惯用正则提取器和json提取器&#xff0c;今天我们来介绍下边界提取器&#xff0c;相对前者较简单些。它通过左右边界来提取需要的内容&#xff0c;它可以匹配任何格式的内容&#xff0c;如文本、json、xpath、html等等&#x…