python:pytest中的setup和teardown
原文:https://www.cnblogs.com/peiminer/p/9376352.html
之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的固件。
(1.setup_function、teardown_function 2.setup_class、teardown_class 3.setup_method、teardown_method 4.setup_module、teardown_module)
setup/teardown和unittest里面的setup/teardown是一样的功能,这里setup_method和teardown_method的功能和setup/teardown功能是一样的,优先级是先执行setup_method,在执行setup。一般二者用其中一个即可,就不详细介绍了。setup_class和teardown_class等价于unittest里面的setupClass和teardownClass
一、函数级的(setup_function、teardown_function)只对函数用例生效,而且不在类中使用
- #!/usr/bin/env/python
- # -*-coding:utf-8-*-
- import pytest
- """
- 只对函数用例生效,不在类中
- setup_function
- teardown_function
- """
- def setup_function():
- print "setup_function():每个方法之前执行"
- def teardown_function():
- print "teardown_function():每个方法之后执行"
- def test_01():
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def test_02():
- print "正在执行test2"
- x = "hello"
- assert hasattr(x,"hello")
- def add(a,b):
- return a+b
- def test_add():
- print "正在执行test_add()"
- assert add(3,4) == 7
- if __name__=="__main__":
- pytest.main(["-s","test_function.py"])
- 运行结果为:(-s为了显示用例的打印信息 -q只显示结果不显示过程)
可以看出执行的结果是:
setup_function--》 test_01 --》teardown_function
setup_function--》 test_02 --》teardown_function
setup_function--》 test_add --》teardown_function
二、类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次
- #!/usr/bin/env/python
- # -*-coding:utf-8-*-
- """
- 在类之前和之后执行一次
- setup_class
- teardown_class
- """
- import pytest
- class TestClass(object):
- def setup_class(self):
- print "setup_class(self):每个类之前执行一次"
- def teardown_class(self):
- print "teardown_class(self):每个类之后执行一次"
- def add(self,a,b):
- print "这是加法运算"
- return a+b
- def test_01(self):
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def test_add(self):
- print "正在执行test_add()"
- assert self.add(3, 4) == 7
- 执行结果:
可以看出执行的顺序是 setup_class --》 test1 --》test_add()--》teardown_class
三、类中方法级的(setup_method、teardown_method)在每一个方法之前执行一次,在每一个方法之后执行一次
- #!/usr/bin/env/python
- # -*-coding:utf-8-*-
- """
- 开始于方法始末(在类中)
- setup_method
- teardown_method
- """
- import pytest
- class TestMethod(object):
- def setup_class(self):
- print "setup_class(self):每个类之前执行一次\n"
- def teardown_class(self):
- print "teardown_class(self):每个类之后执行一次"
- def setup_method(self):
- print "setup_method(self):在每个方法之前执行"
- def teardown_method(self):
- print "teardown_method(self):在每个方法之后执行\n"
- def add(self,a,b):
- print "这是加法运算"
- return a+b
- def test_01(self):
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def test_add(self):
- print "正在执行test_add()"
- assert self.add(3, 4) == 7
- 执行结果: setup_class --》 setup_method -->test1 -->teardown_method --》setup_method --> test_add()--》teardown_method --> teardown_class
四、模块级的(setup_module、teardown_module)全局的,在模块执行前运行一遍,在模块执行后运行一遍
- #!/usr/bin/env/python
- # -*-coding:utf-8-*-
- import pytest
- """
- 开始于模块始末,全局的
- setup_module
- teardown_module
- """
- def setup_module():
- print "setup_module():在模块最之前执行\n"
- def teardown_module():
- print "teardown_module:在模块之后执行"
- def setup_function():
- print "setup_function():每个方法之前执行"
- def teardown_function():
- print "teardown_function():每个方法之后执行\n"
- def test_01():
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def add(a,b):
- return a+b
- def test_add():
- print "正在执行test_add()"
- assert add(3,4) == 7
- 运行结果:setup_module --> setup_function --> test_01--> teardown_function --> setup_function --> test_add()--> teardown_function --> teardown_module
五、当类和函数都有的时候
- #!/usr/bin/env/python
- # -*-coding:utf-8-*-
- """
- 在类之前和之后执行一次
- setup_class
- teardown_class
- """
- import pytest
- def setup_module():
- print "setup_module():在模块最之前执行\n"
- def teardown_module():
- print "teardown_module:在模块之后执行"
- def setup_function():
- print "setup_function():每个方法之前执行"
- def teardown_function():
- print "teardown_function():每个方法之后执行\n"
- def test_10():
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def add0(a,b):
- return a+b
- def test_add():
- print "正在执行test_add()"
- assert add0(3,4) == 7
- class TestClass(object):
- def setup_class(self):
- print "setup_class(self):每个类之前执行一次"
- def teardown_class(self):
- print "teardown_class(self):每个类之后执行一次"
- def add(self,a,b):
- print "这是加法运算"
- return a+b
- def test_01(self):
- print "正在执行test1"
- x = "this"
- assert 'h' in x
- def test_add(self):
- print "正在执行test_add()"
- assert self.add(3, 4) == 7
- if __name__=="__main__":
- pytest.main(["-s","test_class0.py"])
- 运行结果:可以看出来,都互不影响,setup_module还是在最之前执行,所有之后执行。
setup_modele --> setup_function -->test1 -->teardown_function --> setuo_function -->test_add -->teardown_function -->setup_class -->teardown_class-->taerdown_module
python:pytest中的setup和teardown的更多相关文章
- 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...
- pytest 2.测试用例setup和teardown
之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的 ...
- python单元测试unittest、setUp、tearDown()
单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...
- Junit测试中的setup和teardown 和 @before 和 @After 方法
这几天做Junit测试接触到了setup和teardown两个方法,简单的可以这样理解它们,setup主要实现测试前的初始化工作,而teardown则主要实现测试完成后的垃圾回收等工作. 需要注意的是 ...
- pytest测试框架 -- setup和teardown等
一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...
- pytest二:setup和teardown
用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...
- Junit中的setup和teardown方法
setup需要@before注解,实现测试前的初始化工作 teardown需要@after注解,测试完成后垃圾回收等后续工作
- pytest用例setup和teardown
函数式以下两种: setup_function/teardown_function 每个用例开始和结束调用一次 setup_module/teardown_module setup_modu ...
- python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)
pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...
随机推荐
- 树莓派安装C#运行环境
一. 安装mono ARMv6(一代 Raspberry Pi B+) : http://yunpan.cn/cw6NYzXkD9kHq 访问密码 63ae ARMv7(二代 Raspberry Pi ...
- 最小圆覆盖(洛谷 P1742 增量法)
题意:给定N个点,求最小圆覆盖的圆心喝半径.保留10位小数点. N<1e5: 思路:因为精度要求较高,而且N比较大,所以三分套三分的复杂度耶比较高,而且容易出错. 然是写下增量法吧. 伪代码加深 ...
- CSS——设置边框渐变色
前言 最近在写一个typecho的主题,刚好遇到这样一个问题就记录下吧 步骤 这是一个CSS的过度效果,效果如下. 代码 .object{ width: 50px; height: 50px; bac ...
- 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)
https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...
- 可持久化01trie树——模板
给你一个数,在一段区间内找到另一个数,使得他们的异或最大: trie树上存储每个数的二进制位,查询时贪心查询能让当前高位取得1的位置: 实际上是一个求前缀和的思想.每个数都开一个trie树浪费空间,当 ...
- 游标_oracle
https://blog.csdn.net/weixin_41367660/article/details/80449032
- react项目如何运行
react项目如何运行 一.总结 一句话总结: npm i 安装好package.json的 指定插件后,npm start 启动项目 二.react项目的安装与运行 转自或参考:react项目的安装 ...
- php 5 与7有什么区别
PHP 7.0使用新版的ZendEngine引擎,带来了许多新的特性,其与相比,有如下特性: 性能提升:PHP7比PHP5.0性能提升了两倍. 全面一致的64位支持. 以前的许多致命错误,现在改成抛出 ...
- 前端js 爬取 获取网页
1.存在问题 same origin policy(同源策略) 页面中的Javascript只能读取,访问同域的网页.这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和 ...
- python练习:寒冰猴子狐狸,猫狗咬架
python练习:寒冰猴子狐狸,猫狗咬架 一,寒冰猴子狐狸 class Person: def __init__(self, na, gen, age, fig): self.name = na se ...