学习-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提供的表示方式相同,可以与 ...
随机推荐
- Python学习笔记:第一次接触
用的是windows的IDLE(python 3) 对象的认识:先创建一个list对象(用方括号) a = ['xieziyang','chenmanru'] a 对list中对象的引用 a[0] # ...
- html实现高亮检索
实现效果如下: demo.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 转 Cookie、Session
https://www.cnblogs.com/liwenzhou/p/8343243.html Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况 ...
- python MySQLdb 如何设置读超时read_timeout
在python中,经常用到 MySQLdb操作MySQL数据库. 在实现上,MySQLdb并不是纯python的,而是封装了MySQL C API库_mysql. 对于MySQLdb是否支持read_ ...
- 第五周作业,LVM和TCP
1.磁盘lvm管理,完成下面要求,并写出详细过程: 1) 创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv; ...
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_4 JdbcTemplate的CRUD操作
复制demo起名3 保存 update delete selct 有这么多的重载方法 如何去定位 可变参数是JDK1.5版本之后才有的东西 RowMapper 实现RowMapper这个接口.然后实现 ...
- QA Issue: PN: startUp is upper case, this can result in unexpected behavior. [uppercase-pn]
(借用一下) 该错误直接导致生成开机启动程序无法启动,既无法生成S99***快捷链接. 解决方法:仅仅将recpie lib-Test改成lib-test就可以了,即不要有大写字母. 附启动方法: S ...
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- CF1142B Lynyrd Skynyrd
题目 有两种做法: 第一种是\(O(nlog\ n)\)的. 我们预处理两个数组: \(pre_i\)表示\(p\)中\(i\)前面的那个数是\(pre_i\). \(lst_i\)表示\(a\)中\ ...
- python-day1(学前了解)
Markdown基本语法 各级标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 加粗 **加粗文本** 斜体 *我斜了* 高亮 ==我高亮了== 上标 2 ...