本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

python(8)

java(2)

标签  

python(5)

java(1)

日期归档  

暂无数据

pytest框架-测试用例setup和teardown

发布于2021-07-25 06:44     阅读(608)     评论(0)     点赞(25)     收藏(0)


目录

用例运行级别

模块级(setup_module/teardown_module)

函数级(setup_function/teardown_function)

类、类级方法级

当函数和类都有的时候


用例运行级别

  • 模块级(setup_module/teardown_module):开始于模块始末,全局的

  • 函数级(setup_function/teardown_function):只对函数用例生效(不在类中

  • 类级(setup_class/teardown_class):只在类中前后运行一次(在类中)

  • 方法级(setup_method/teardown_method):开始于方法始末(在类中

  • 类里面的(setup/teardown):运行在调用方法的前后

模块级(setup_module/teardown_module)

setup_module:所有用例开始前只执行一次

teardown_module:所有用例结束后只执行一次

示例1:

  1. #coding:utf-8
  2. #模块级(setup_module/teardown_module)
  3. import pytest
  4. def setup_module():
  5. print("setup_module:所有用例开始前只执行一次")
  6. print("----------------------------")
  7. def teardown_module():
  8. print("-----------------------------")
  9. print("teardown_module:所有用例结束后只执行一次")
  10. def setup_function():
  11. print("setup_function:每个用例开始前执行")
  12. def teardown_function():
  13. print("teardown_function:每个用例结束后执行")
  14. def test_1():
  15. print("正在执行test_1。。。。。。")
  16. a="hello"
  17. #assert断言
  18. assert 'e' in a
  19. def test_2():
  20. print("正在执行test_2。。。。。。")
  21. a="halo"
  22. assert hasattr(a,'check')
  23. def test_3():
  24. print("正在执行test_3。。。。。。")
  25. c="hello"
  26. d="hello world"
  27. assert c in d
  28. if __name__ == '__main__':
  29. pytest.main(["-s", "test_01.py"])

运行结果:

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
  3. rootdir: D:\Python\WareSpace\py_case\python-pytest\setup_teardown
  4. plugins: html-3.1.1, metadata-1.11.0
  5. collected 3 items
  6. test_01.py setup_module:所有用例开始前只执行一次
  7. ----------------------------
  8. setup_function:每个用例开始前执行
  9. 正在执行test_1。。。。。。
  10. .teardown_function:每个用例结束后执行
  11. setup_function:每个用例开始前执行
  12. 正在执行test_2。。。。。。
  13. Fteardown_function:每个用例结束后执行
  14. setup_function:每个用例开始前执行
  15. 正在执行test_3。。。。。。
  16. .teardown_function:每个用例结束后执行
  17. -----------------------------
  18. teardown_module:所有用例结束后只执行一次
  19. ================================== FAILURES ===================================
  20. ___________________________________ test_2 ____________________________________
  21. def test_2():
  22. print("正在执行test_2。。。。。。")
  23. a="halo"
  24. > assert hasattr(a,'check')
  25. E AssertionError: assert False
  26. E + where False = hasattr('halo', 'check')
  27. test_01.py:29: AssertionError
  28. =========================== short test summary info ===========================
  29. FAILED test_01.py::test_2 - AssertionError: assert False
  30. ========================= 1 failed, 2 passed in 0.14s =========================

从运行结果看:setup_module和teardown_module只执行了一次

setup_function和teardown_function每次执行用例都执行了一次

这四种方法是可以任意组合的,可以用多个

函数级(setup_function/teardown_function)

pytest框架中只支持函数和类两种用例方式

setup_function/teardown_function:每个用例开始和结束调用一次,只对函数用例有效

示例2:

  1. #coding:UTF-8
  2. #函数级setup_function/teardown_function
  3. import pytest
  4. def setup_function():
  5. print("setup_function:每个用例开始前执行")
  6. def teardown_function():
  7. print("teardown_function:每个用例结束后执行")
  8. def test_1():
  9. print("正在执行test_1。。。。。。")
  10. a="hello"
  11. #assert断言
  12. assert 'e' in a
  13. def test_2():
  14. print("正在执行test_2。。。。。。")
  15. a="halo"
  16. assert hasattr(a,'check')
  17. def test_3():
  18. print("正在执行test_3。。。。。。")
  19. c="hello"
  20. d="hello world"
  21. assert c in d
  22. if __name__ == '__main__':
  23. pytest.main(["-s", "test_02.py"])

运行结果:

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
  3. rootdir: D:\Python\WareSpace\py_case\python-pytest\setup_teardown
  4. plugins: html-3.1.1, metadata-1.11.0
  5. collected 3 items
  6. test_02.py setup_function:每个用例开始前执行
  7. 正在执行test_1。。。。。。
  8. .teardown_function:每个用例结束后执行
  9. setup_function:每个用例开始前执行
  10. 正在执行test_2。。。。。。
  11. Fteardown_function:每个用例结束后执行
  12. setup_function:每个用例开始前执行
  13. 正在执行test_3。。。。。。
  14. .teardown_function:每个用例结束后执行
  15. ================================== FAILURES ===================================
  16. ___________________________________ test_2 ____________________________________
  17. def test_2():
  18. print("正在执行test_2。。。。。。")
  19. a="halo"
  20. > assert hasattr(a,'check')
  21. E AssertionError: assert False
  22. E + where False = hasattr('halo', 'check')
  23. test_02.py:21: AssertionError
  24. =========================== short test summary info ===========================
  25. FAILED test_02.py::test_2 - AssertionError: assert False
  26. ========================= 1 failed, 2 passed in 0.13s =========================

从运行结果可以看出执行顺序:setup_function--用例--teardown_function

-s参数是为了显示用例的打印信息。 -q参数只显示结果,不显示过程

类、类级方法级

类(setup/teardown),类级(setup_class/teardown_class),方法级(setup_method/teardown_method)

示例3:

  1. #coding:utf-8
  2. #类、类级方法级
  3. #类(setup/teardown),类级(setup_class/teardown_class),方法级(setup_method/teardown_method)
  4. import pytest
  5. class Test():
  6. def setup(self):
  7. print("setup:每个用例开始前都执行。。。。")
  8. print("------------------------------")
  9. def teardown(self):
  10. print("teardowm:每个用例结束后都执行。。。。")
  11. print("---------------------------------")
  12. def setup_class(self):
  13. print("setup_calss:所有用例执行之前。。。。")
  14. def teardown_calss(self):
  15. print("teardowm_calss:所有用例执行之后。。。。")
  16. def setup_method(self):
  17. print("setup_method:每个用例开始前执行")
  18. def teardown_method(self):
  19. print("tear_method:每个用例结束后执行")
  20. def test_1(self):
  21. print("正在执行用例1。。。。。。")
  22. a="hello"
  23. assert 'o' in a
  24. def test_2(self):
  25. print("正在执行用例2。。。。。。")
  26. a="hello"
  27. assert hasattr(a,'check')
  28. def test_3(self):
  29. print("正在执行用例3。。。。。。")
  30. a="hello"
  31. b="hello halo"
  32. assert a in b
  33. if __name__ == "__main__":
  34. pytest.main(["-s", "test_03.py"])

运行结果:

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
  3. rootdir: D:\Python\WareSpace\py_case\python-pytest\setup_teardown
  4. plugins: html-3.1.1, metadata-1.11.0
  5. collected 3 items
  6. test_03.py setup_calss:所有用例执行之前。。。。
  7. setup_method:每个用例开始前执行
  8. setup:每个用例开始前都执行。。。。
  9. ------------------------------
  10. 正在执行用例1。。。。。。
  11. .teardowm:每个用例结束后都执行。。。。
  12. ---------------------------------
  13. tear_method:每个用例结束后执行
  14. setup_method:每个用例开始前执行
  15. setup:每个用例开始前都执行。。。。
  16. ------------------------------
  17. 正在执行用例2。。。。。。
  18. Fteardowm:每个用例结束后都执行。。。。
  19. ---------------------------------
  20. tear_method:每个用例结束后执行
  21. setup_method:每个用例开始前执行
  22. setup:每个用例开始前都执行。。。。
  23. ------------------------------
  24. 正在执行用例3。。。。。。
  25. .teardowm:每个用例结束后都执行。。。。
  26. ---------------------------------
  27. tear_method:每个用例结束后执行

 从运行结果看:setup_calss>>setup_method>>setup>>用例>>teardown>>teardown_method>>>teardown_class

setup_method、teardown_methodhe 和 setup、teardown一样的,二者可以选其中一个

当函数和类都有的时候

示例4:

  1. #coding:utf-8
  2. #当函数和类都有的事情
  3. import pytest
  4. #模块级
  5. def setup_module():
  6. print("setup_module:所有用例开始前只执行一次")
  7. print("----------------------------")
  8. def teardown_module():
  9. print("-----------------------------")
  10. print("teardown_module:所有用例结束后只执行一次")
  11. #函数级
  12. def setup_function():
  13. print("setup_function:每个用例开始前执行")
  14. def teardown_function():
  15. print("teardown_function:每个用例结束后执行")
  16. def test_1():
  17. print("正在执行test_1。。。。。。")
  18. a="hello"
  19. #assert断言
  20. assert 'e' in a
  21. def add(a,b):
  22. return a+b
  23. def test_add():
  24. print("正在执行test_add。。。。。。")
  25. assert add(3,4)==7
  26. #类
  27. class Test():
  28. #类级
  29. def setup_class(self):
  30. print("setup_calss:所有用例执行之前aaaaa")
  31. def teardown_class(self):
  32. print("teardown_class:所有用例执行之后bbbbbb")
  33. def test_3(self):
  34. print("正在执行用例3。。。。。。")
  35. a = "hello"
  36. assert 'o' in a
  37. def test_4(self):
  38. print("正在执行用例4。。。。。。")
  39. a = "hello"
  40. b = "hello halo"
  41. assert a in b
  42. if __name__ == "__main__":
  43. pytest.main(["-s", "test_04.py"])

运行结果:

  1. test_04.py setup_module:所有用例开始前只执行一次
  2. ----------------------------
  3. setup_function:每个用例开始前执行
  4. 正在执行test_1。。。。。。
  5. .teardown_function:每个用例结束后执行
  6. setup_function:每个用例开始前执行
  7. 正在执行test_add。。。。。。
  8. .teardown_function:每个用例结束后执行
  9. setup_calss:所有用例执行之前aaaaa
  10. 正在执行用例3。。。。。。
  11. .正在执行用例4。。。。。。
  12. .teardown_class:所有用例执行之后bbbbbb
  13. -----------------------------
  14. teardown_module:所有用例结束后只执行一次

从运行结果看:模块级setup_module、teardown_module优先级最大

函数级setup_function/teardown_function与类里面的setup_class/teardown_class同级,互不干涉不影响

原文链接:https://blog.csdn.net/weixin_46731640/article/details/119000156



所属网站分类: 技术文章 > 博客

作者:小酷狗

链接:http://www.pythonpdf.com/blog/article/519/ea606b7ce8821de3ecb4/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)