学习-Pytest(五)yield操作
1.fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作
2.scope="module"
1.fixture参数scope=”module”,module作用是整个.py文件都会生效( 整个文件只会执行一次),
用例调用时,参数写上函数名称就行
- # 新建一个文件test_f1.py
- # coding:utf-8
- import pytest
- @pytest.fixture(scope="module")
- def open():
- print("打开浏览器,并且打开百度首页")
- def test_s1(open):
- print("用例1:搜索python-1")
- def test_s2(open): # 不传login
- print("用例2:搜索python-2")
- def test_s3(open):
- print("用例3:搜索python-3")
- if __name__ == "__main__":
- pytest.main(["-s", "test_f1.py"])
运行结果:
- ============================= test session starts =============================
- platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
- rootdir: D:\, inifile:
- collected 3 items
- ..\..\..\..\..\..\test_f1.py 打开浏览器,并且打开百度首页
- 用例1:搜索python-1
- .用例2:搜索python-2
- .用例3:搜索python-3
- .
- ========================== 3 passed in 0.01 seconds ===========================
从结果看出,虽然test_s1,test_s2,test_s3三个地方都调用了open函数,但是它只会在第一个用例前执行一次
2.如果test_s1不调用,test_s2(调用open),test_s3不调用
- # 新建一个文件test_f1.py
- # coding:utf-8
- import pytest
- @pytest.fixture(scope="module")
- def open():
- print("打开浏览器,并且打开百度首页")
- def test_s1():
- print("用例1:搜索python-1")
- def test_s2(open): # 不传login
- print("用例2:搜索python-2")
- def test_s3():
- print("用例3:搜索python-3")
- if __name__ == "__main__":
- pytest.main(["-s", "test_f1.py"])
运行结果:
- ============================= test session starts =============================
- platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
- rootdir: D:\, inifile:
- collected 3 items
- ..\..\..\..\..\..\test_f1.py 用例1:搜索python-1
- .打开浏览器,并且打开百度首页
- 用例2:搜索python-2
- .用例3:搜索python-3
- .
- ========================== 3 passed in 0.01 seconds ===========================
从结果看出,module级别的fixture在当前.py模块里,只会在用例(test_s2)第一次调用前执行一次
3. yield执行teardown
1.fixture里面的teardown用yield来唤醒teardown的执行
- # 新建一个文件test_f1.py
- # coding:utf-8
- import pytest
- @pytest.fixture(scope="module")
- def open():
- print("打开浏览器,并且打开百度首页")
- yield
- print("执行teardown!")
- print("最后关闭浏览器")
- def test_s1(open):
- print("用例1:搜索python-1")
- def test_s2(open): # 不传login
- print("用例2:搜索python-2")
- def test_s3(open):
- print("用例3:搜索python-3")
- if __name__ == "__main__":
- pytest.main(["-s", "test_f1.py"])
运行结果:
- ============================= test session starts =============================
- platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
- rootdir: D:\, inifile:
- collected 3 items
- ..\..\..\..\..\..\test_f1.py 打开浏览器,并且打开百度首页
- 用例1:搜索python-1
- .用例2:搜索python-2
- .用例3:搜索python-3
- .执行teardown!
- 最后关闭浏览器
- ========================== 3 passed in 0.01 seconds ===========================
3. yield遇到异常
1.如果其中一个用例出现异常,不影响yield后面的teardown执行,运行结果互不影响,并且在用例全部执行完之后,会呼唤teardown的内容
- # 新建一个文件test_f1.py
- # coding:utf-8
- import pytest
- @pytest.fixture(scope="module")
- def open():
- print("打开浏览器,并且打开百度首页")
- yield
- print("执行teardown!")
- print("最后关闭浏览器")
- def test_s1(open):
- print("用例1:搜索python-1")
- # 如果第一个用例异常了,不影响其他的用例执行
- raise NameError # 模拟异常
- def test_s2(open): # 不传login
- print("用例2:搜索python-2")
- def test_s3(open):
- print("用例3:搜索python-3")
- if __name__ == "__main__":
- pytest.main(["-s", "test_f1.py"])
运行结果:
- test_f1.py 打开浏览器,并且打开百度首页
- 用例1:搜索python-1
- F
- open = None
- def test_s1(open):
- print("用例1:搜索python-1")
- # 如果第一个用例异常了,不影响其他的用例执行
- > raise NameError # 模拟异常
- E NameError
- D:\YOYO\test_f1.py:16: NameError
- 用例2:搜索python-2
- .用例3:搜索python-3
- .执行teardown!
- 最后关闭浏览器
2.如果在setup就异常了,那么是不会去执行yield后面的teardown内容了
3.yield也可以配合with语句使用,以下是官方文档给的案例
- # 官方文档案例
- # content of test_yield2.py
- import smtplib
- import pytest
- @pytest.fixture(scope="module")
- def smtp():
- with smtplib.SMTP("smtp.gmail.com") as smtp:
- yield smtp # provide the fixture value
学习-Pytest(五)yield操作的更多相关文章
- Mongodb学习笔记五(C#操作mongodb)
mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...
- python学习笔记(五)-文件操作2
一.文件修改 现有文件file.txt,内容如下:二十四节气歌春雨惊春清谷天,夏满芒夏暑相连.秋处露秋寒霜降,冬雪雪冬小大寒.上半年逢六廿一,下半年逢八廿三.每月两节日期定,最多相差一二天.要求:将文 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- 《带你装B,带你飞》pytest修仙之路5 - yield操作
1. 简介 上一篇中,我们刚刚实现了在每个用例之前执行初始化操作,那么用例执行完之后如需要清除数据(或还原)操作,可以使用 yield 来实现.fixture通过scope参数控制setup级别,既然 ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作
就像 PDO 中的 PDO_Statment 对象一样,MySQLI_STMT 对象也是一个预处理语句所形成的对象,专门用来操作 MySQLi 所生成的预处理语句的.其实操作方式之类也都比较相似,不外 ...
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- 六、Android学习第五天——Handler的使用(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
随机推荐
- shell sed应用
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:sed [-nefri] ...
- CentOS7 一个网卡配置多个IP地址
1.给网卡p8p1新创建配置文件(复制原来的p8p1,修改IP地址即可) ifcfg-p8p1:0 vim /etc/sysconfig/network-scripts/ifcfg-p8p1:0 D ...
- emqttd学习教程(二):emqttd配置说明
一.配置文件说明emqttd消息服务器通过 etc/ 目录下配置文件进行设置,主要配置文件包括: 配置文件 说明 etc/emq.conf 消息服务器配置文件etc/acl.conf 默认ACL规则配 ...
- nginx提示地址或端口被占用解决
nginx提示地址或端口被占用解决 今天小编在启动nginx 的时候遇到如下的错误 Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed ...
- PyCharm给函数增加文档注释
选择函数名,左上角会出现一个小灯泡,点击小灯泡 选择第二项 选中调用的函数名 Ctrl + Q 显示注释 如何配置操作习惯 File > sitting > 搜索 'keymap' > ...
- springboot-elasticsearch项目启动报错:'elasticsearchTemplate' that could not be found
解决: 将elasticsearch的相关配置加入到application.yml配置文件中就可以解决
- Linux 的简单命令以及在idea中配置码云
Linux 的简单命令: ls(list)功能:列出目录内容 cd(change directory)功能:切换目录 touch 1.txt 在当前目录创建一个文件1.txt clear:清除屏幕 p ...
- Shell编程、part2
本节内容 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 1 ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- win10 hhctrl.ocx 丢失
1.我的是从同事电脑上复制过来的,他电脑也是win102.复制文件“hhctrl.ocx”到系统目录下 32位系统目录为:C:\WINNT\System32:64位系统为C:\Windows\Sys ...