原文: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的更多相关文章

  1. 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?

    还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...

  2. pytest 2.测试用例setup和teardown

    之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的 ...

  3. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  4. Junit测试中的setup和teardown 和 @before 和 @After 方法

    这几天做Junit测试接触到了setup和teardown两个方法,简单的可以这样理解它们,setup主要实现测试前的初始化工作,而teardown则主要实现测试完成后的垃圾回收等工作. 需要注意的是 ...

  5. pytest测试框架 -- setup和teardown等

    一.用例运行级别 1.函数级别(setup.teardown 或 setup_function.teardown_function): 仅对处于同作用域的测试函数有效(该函数定义不在类中,则对非类中测 ...

  6. pytest二:setup和teardown

    用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效(不在 ...

  7. Junit中的setup和teardown方法

    setup需要@before注解,实现测试前的初始化工作 teardown需要@after注解,测试完成后垃圾回收等后续工作

  8. pytest用例setup和teardown

    函数式以下两种: setup_function/teardown_function  每个用例开始和结束调用一次 setup_module/teardown_module     setup_modu ...

  9. python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)

    pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...

随机推荐

  1. js中的全局对象

  2. Codeforces 1251E Voting

    E2. Voting (Hard Version) 题意: 有n个人, 你想让他们都给你投票. 你可以选择花费pi收买第i个人, 或者如果有mi个人已经给你投票了, 那么第i个人会自动给你投票. 不妨 ...

  3. Tips on Probability Theory

    1.独立与不相关 随机变量X和Y相互独立,有:E(XY) = E(X)E(Y). 独立一定不相关,不相关不一定独立(高斯过程里二者等价) .对于均值为零的高斯随机变量,“独立”和“不相关”等价的. 独 ...

  4. Django 实现文件下载

    1. 思路: 文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载) 2. a标签实现 <a href="/static/xxx.xlsx"& ...

  5. win7虚拟机安装

    https://blog.csdn.net/qq_16503045/article/details/81904986 iso下载地址 https://msdn.itellyou.cn/

  6. k8s 基础概念

    摘录自k8s中文社区https://www.kubernetes.org.cn/course kubernetes 源自希腊文,意为舵手,k与s之间是8个字母,所以也叫k8s, docker就像一个个 ...

  7. 71: libreoj #10151 区间dp

    $des$ https://loj.ac/problem/10151 $sol$ 区间dp $f_{i, j}$ 表示区间 $[l, r]$ 合并的最大值 枚举中间点 $k$ $f_{i, j} =m ...

  8. 微信小程序组件化开发框架WePY

    wepy-CLI 安装 npm install -g wepy-cli wepy init standard my-project https://github.com/Tencent/wepy 特性 ...

  9. SpringMVC自定义类型转换器

    SpringMVC 自定义类型转换器  我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,我们可以在默认的spring-servlet.xml加上如下的配置即可做到普通数据 ...

  10. Jquery创建动态表单

    $(document).ready(function(){ $("#button1").click(function(){ //获取html <body></bo ...