原文: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)只对函数用例生效,而且不在类中使用

  1. #!/usr/bin/env/python
  2. # -*-coding:utf-8-*-
  3.  
  4. import pytest
  5.  
  6. """
  7. 只对函数用例生效,不在类中
  8. setup_function
  9. teardown_function
  10. """
  11.  
  12. def setup_function():
  13. print "setup_function():每个方法之前执行"
  14.  
  15. def teardown_function():
  16. print "teardown_function():每个方法之后执行"
  17.  
  18. def test_01():
  19. print "正在执行test1"
  20. x = "this"
  21. assert 'h' in x
  22.  
  23. def test_02():
  24. print "正在执行test2"
  25. x = "hello"
  26. assert hasattr(x,"hello")
  27.  
  28. def add(a,b):
  29. return a+b
  30.  
  31. def test_add():
  32. print "正在执行test_add()"
  33. assert add(3,4) == 7
  34.  
  35. if __name__=="__main__":
  36. pytest.main(["-s","test_function.py"])
  1.  
  2. 运行结果为:(-s为了显示用例的打印信息 -q只显示结果不显示过程)
    可以看出执行的结果是:
    setup_function--》 test_01 --》teardown_function
    setup_function--》 test_02 --》teardown_function
    setup_function--》 test_add --》teardown_function

二、类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次

  1. #!/usr/bin/env/python
  2. # -*-coding:utf-8-*-
  3.  
  4. """
  5. 在类之前和之后执行一次
  6. setup_class
  7. teardown_class
  8. """
  9.  
  10. import pytest
  11.  
  12. class TestClass(object):
  13.  
  14. def setup_class(self):
  15. print "setup_class(self):每个类之前执行一次"
  16.  
  17. def teardown_class(self):
  18. print "teardown_class(self):每个类之后执行一次"
  19.  
  20. def add(self,a,b):
  21. print "这是加法运算"
  22. return a+b
  23.  
  24. def test_01(self):
  25. print "正在执行test1"
  26. x = "this"
  27. assert 'h' in x
  28.  
  29. def test_add(self):
  30. print "正在执行test_add()"
  31. assert self.add(3, 4) == 7
  1. 执行结果:
    可以看出执行的顺序是 setup_class --》 test1 --》test_add()--》teardown_class

三、类中方法级的(setup_method、teardown_method)在每一个方法之前执行一次,在每一个方法之后执行一次

  1. #!/usr/bin/env/python
  2. # -*-coding:utf-8-*-
  3.  
  4. """
  5. 开始于方法始末(在类中)
  6. setup_method
  7. teardown_method
  8. """
  9. import pytest
  10.  
  11. class TestMethod(object):
  12.  
  13. def setup_class(self):
  14. print "setup_class(self):每个类之前执行一次\n"
  15.  
  16. def teardown_class(self):
  17. print "teardown_class(self):每个类之后执行一次"
  18.  
  19. def setup_method(self):
  20. print "setup_method(self):在每个方法之前执行"
  21.  
  22. def teardown_method(self):
  23. print "teardown_method(self):在每个方法之后执行\n"
  24.  
  25. def add(self,a,b):
  26. print "这是加法运算"
  27. return a+b
  28.  
  29. def test_01(self):
  30. print "正在执行test1"
  31. x = "this"
  32. assert 'h' in x
  33.  
  34. def test_add(self):
  35. print "正在执行test_add()"
  36. assert self.add(3, 4) == 7
  1. 执行结果: setup_class --》 setup_method -->test1 -->teardown_method --》setup_method --> test_add()--》teardown_method --> teardown_class

四、模块级的(setup_module、teardown_module)全局的,在模块执行前运行一遍,在模块执行后运行一遍

  1. #!/usr/bin/env/python
  2. # -*-coding:utf-8-*-
  3.  
  4. import pytest
  5. """
  6. 开始于模块始末,全局的
  7. setup_module
  8. teardown_module
  9. """
  10.  
  11. def setup_module():
  12. print "setup_module():在模块最之前执行\n"
  13.  
  14. def teardown_module():
  15. print "teardown_module:在模块之后执行"
  16.  
  17. def setup_function():
  18. print "setup_function():每个方法之前执行"
  19.  
  20. def teardown_function():
  21. print "teardown_function():每个方法之后执行\n"
  22.  
  23. def test_01():
  24. print "正在执行test1"
  25. x = "this"
  26. assert 'h' in x
  27.  
  28. def add(a,b):
  29. return a+b
  30.  
  31. def test_add():
  32. print "正在执行test_add()"
  33. assert add(3,4) == 7
  1. 运行结果:setup_module --> setup_function --> test_01--> teardown_function --> setup_function --> test_add()--> teardown_function --> teardown_module

五、当类和函数都有的时候

  1. #!/usr/bin/env/python
  2. # -*-coding:utf-8-*-
  3.  
  4. """
  5. 在类之前和之后执行一次
  6. setup_class
  7. teardown_class
  8. """
  9.  
  10. import pytest
  11.  
  12. def setup_module():
  13. print "setup_module():在模块最之前执行\n"
  14.  
  15. def teardown_module():
  16. print "teardown_module:在模块之后执行"
  17.  
  18. def setup_function():
  19. print "setup_function():每个方法之前执行"
  20.  
  21. def teardown_function():
  22. print "teardown_function():每个方法之后执行\n"
  23.  
  24. def test_10():
  25. print "正在执行test1"
  26. x = "this"
  27. assert 'h' in x
  28.  
  29. def add0(a,b):
  30. return a+b
  31.  
  32. def test_add():
  33. print "正在执行test_add()"
  34. assert add0(3,4) == 7
  35.  
  36. class TestClass(object):
  37.  
  38. def setup_class(self):
  39. print "setup_class(self):每个类之前执行一次"
  40.  
  41. def teardown_class(self):
  42. print "teardown_class(self):每个类之后执行一次"
  43.  
  44. def add(self,a,b):
  45. print "这是加法运算"
  46. return a+b
  47.  
  48. def test_01(self):
  49. print "正在执行test1"
  50. x = "this"
  51. assert 'h' in x
  52.  
  53. def test_add(self):
  54. print "正在执行test_add()"
  55. assert self.add(3, 4) == 7
  56.  
  57. if __name__=="__main__":
  58. pytest.main(["-s","test_class0.py"])
  1. 运行结果:可以看出来,都互不影响,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. 树莓派安装C#运行环境

    一. 安装mono ARMv6(一代 Raspberry Pi B+) : http://yunpan.cn/cw6NYzXkD9kHq 访问密码 63ae ARMv7(二代 Raspberry Pi ...

  2. 最小圆覆盖(洛谷 P1742 增量法)

    题意:给定N个点,求最小圆覆盖的圆心喝半径.保留10位小数点. N<1e5: 思路:因为精度要求较高,而且N比较大,所以三分套三分的复杂度耶比较高,而且容易出错. 然是写下增量法吧. 伪代码加深 ...

  3. CSS——设置边框渐变色

    前言 最近在写一个typecho的主题,刚好遇到这样一个问题就记录下吧 步骤 这是一个CSS的过度效果,效果如下. 代码 .object{ width: 50px; height: 50px; bac ...

  4. 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)

    https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...

  5. 可持久化01trie树——模板

    给你一个数,在一段区间内找到另一个数,使得他们的异或最大: trie树上存储每个数的二进制位,查询时贪心查询能让当前高位取得1的位置: 实际上是一个求前缀和的思想.每个数都开一个trie树浪费空间,当 ...

  6. 游标_oracle

    https://blog.csdn.net/weixin_41367660/article/details/80449032

  7. react项目如何运行

    react项目如何运行 一.总结 一句话总结: npm i 安装好package.json的 指定插件后,npm start 启动项目 二.react项目的安装与运行 转自或参考:react项目的安装 ...

  8. php 5 与7有什么区别

    PHP 7.0使用新版的ZendEngine引擎,带来了许多新的特性,其与相比,有如下特性: 性能提升:PHP7比PHP5.0性能提升了两倍. 全面一致的64位支持. 以前的许多致命错误,现在改成抛出 ...

  9. 前端js 爬取 获取网页

    1.存在问题 same origin policy(同源策略) 页面中的Javascript只能读取,访问同域的网页.这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和 ...

  10. python练习:寒冰猴子狐狸,猫狗咬架

    python练习:寒冰猴子狐狸,猫狗咬架 一,寒冰猴子狐狸 class Person: def __init__(self, na, gen, age, fig): self.name = na se ...