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

最新文章

  1. Android开发之延时执行
  2. Bzoj1305 [CQOI2009]dance跳舞
  3. C中的fseek函数使用
  4. 多个ajax请求下等待条显示和隐藏的简单处理
  5. jQuery 图片等比缩放
  6. centos6.x下手工安装二进制Docker v1.1x
  7. 自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
  8. Python入门笔记(21):Python函数(4):关于函数式编程的内建函数
  9. Spring学习4-面向切面(AOP)之schema配置方式
  10. bzoj1433: [ZJOI2009]假期的宿舍
  11. error: C1083: 无法打开包括文件:“QDomDocument”“QAxObject”
  12. 自定义MVC框架---第二章
  13. Paper藐小之处明察秋毫故时有物外之趣
  14. jquery datagrid添加冻结列等
  15. sourceinsight问题
  16. Linux 下 boost 库的安装,配置个人环境变量
  17. Git全面应用
  18. python之squid实现免费 IP代理 (windows win7 单机 本机 本地 正向代理 区分 HTTPS)
  19. 2153 ACM 仙人球的残影 输出格式
  20. TensorFlow保存和载入模型

热门文章

  1. windows spark1.6
  2. 后盾网lavarel视频项目---vue-axios基本用法
  3. SpringMvc的学习之路
  4. 兼容ie9以下支持媒体查询和html5
  5. 左值引用&右值引用实践【TODO】
  6. leetcode 289生命游戏
  7. navicat 系列软件一点击菜单栏就闪退
  8. vue-cli3.0使用及部分配置详解
  9. 微信小程序购物车实现
  10. zabbix监控java