Pytest框架 — 05、setup和teardown(固定前后置)

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

目录

1、前言

在自动化测试过程中经常需要进行初始化和后期处理等工作,如电商加购物车测试需要先登录,测试完毕需要关闭浏览器等。Pytest提供了5种类型的setup和teardown的方法,具体如下:

  • 模块级别:setup_module,teardown_module
  • 函数级别:setup_function,teardown_function
  • 类级别:setup_class,teardown_class
  • 类方法级别:setup_method,teardown_method
  • 函数或类方法级别(兼容unittest):setup,teardown
2、各级别详解


  • 模块级别:是全局的,在模块运行前执行一次setup_module()方法,在模块运行后执行一次teardown_module()方法
  1. def setup_module():
  2.     print("【初始化...】")
  3. def teardown_module():
  4.     print("【后期处理】")
  5. class Test_1:
  6.     def test_1_a(self):
  7.         print("这是类方法test_1_a")
  8.     def test_1_b(self):
  9.         print("这是类方法test_1_b")
  10. class Test_2:
  11.     def test_2_a(self):
  12.         print("这是类方法test_2_a")
  13.     def test_2_b(self):
  14.         print("这是类方法test_2_b")
  15. def test_3():
  16.     print("这是函数test_3")
  17. """
  18. 执行结果
  19. setupAndteardown/test_module.py::Test_1::test_1_a 【初始化...】
  20. 这是类方法test_1_a
  21. PASSED
  22. setupAndteardown/test_module.py::Test_1::test_1_b 这是类方法test_1_b
  23. PASSED
  24. setupAndteardown/test_module.py::Test_2::test_2_a 这是类方法test_2_a
  25. PASSED
  26. setupAndteardown/test_module.py::Test_2::test_2_b 这是类方法test_2_b
  27. PASSED
  28. setupAndteardown/test_module.py::test_3 这是函数test_3
  29. PASSED【后期处理】
  30. """
复制代码

  • 函数级别:只对函数用例生效,在每个函数用例前后执行,不包括类中方法
  1. def setup_function():
  2.     print("【初始化...】")
  3. def teardown_function():
  4.     print("【后续处理】")
  5. class Test_1:
  6.     def test_1_a(self):
  7.         print("这是类方法test_1_a")
  8.     def test_1_b(self):
  9.         print("这是类方法test_1_b")
  10. def test_2():
  11.     print("这是函数test_2")
  12. def test_3():
  13.     print("这是函数test_3")
  14. """
  15. 执行结果
  16. setupAndteardown/test_function.py::Test_1::test_1_a 这是类方法test_1_a
  17. PASSED
  18. setupAndteardown/test_function.py::Test_1::test_1_b 这是类方法test_1_b
  19. PASSED
  20. setupAndteardown/test_function.py::test_2 【初始化...】
  21. 这是函数test_2
  22. PASSED【后续处理】
  23. setupAndteardown/test_function.py::test_3 【初始化...】
  24. 这是函数test_3
  25. PASSED【后续处理】
  26. """
复制代码

  • 类级别:只在类中运行。在类的全部方法前执行一次setup_class(),全部方法后执行一次teardown_class()
  1. class Test_1:
  2.     def setup_class(self):
  3.         print("【初始化...】")
  4.     def teardown_class(self):
  5.         print("【后续处理】")
  6.     def test_1_a(self):
  7.         print("这是类中方法test_1_a")
  8.     def test_1_b(self):
  9.         print("这是类中方法test_1_b")
  10. class Test_2:
  11.     def test_2_a(self):
  12.         print("这是类中方法test_2_a")
  13.     def test_2_b(self):
  14.         print("这是类中方法test_2_b")
  15. def test_3():
  16.     print("这是函数test_3")
  17. """
  18. 执行结果
  19. setupAndteardown/test_class.py::Test_1::test_1_a 【初始化...】
  20. 这是类中方法test_1_a
  21. PASSED
  22. setupAndteardown/test_class.py::Test_1::test_1_b 这是类中方法test_1_b
  23. PASSED【后续处理】
  24. setupAndteardown/test_class.py::Test_2::test_2_a 这是类中方法test_2_a
  25. PASSED
  26. setupAndteardown/test_class.py::Test_2::test_2_b 这是类中方法test_2_b
  27. PASSED
  28. setupAndteardown/test_class.py::test_3 这是函数test_3
  29. PASSED
  30. """
复制代码

  • 类方法级别:只在类中运行。类中每个方法级别的测试用例之前先执行一次setup_method(),执行后再执行一次teardown_method ()
  1. class Test_1:
  2.     def setup_method(self):
  3.         print("【初始化...】")
  4.     def teardown_method(self):
  5.         print("【后续处理】")
  6.     def test_1_a(self):
  7.         print("这是类方法test_1_a")
  8.     def test_1_b(self):
  9.         print("这是类方法test_1_b")
  10.     def test_1_c(self):
  11.         print("这是类方法test_1_c")
  12.     def test_1_d(self):
  13.         print("这是类方法test_1_d")
  14. """
  15. 执行结果
  16. setupAndteardown/test_method.py::Test_1::test_1_a 【初始化...】
  17. 这是类方法test_1_a
  18. PASSED【后续处理】
  19. setupAndteardown/test_method.py::Test_1::test_1_b 【初始化...】
  20. 这是类方法test_1_b
  21. PASSED【后续处理】
  22. setupAndteardown/test_method.py::Test_1::test_1_c 【初始化...】
  23. 这是类方法test_1_c
  24. PASSED【后续处理】
  25. setupAndteardown/test_method.py::Test_1::test_1_d 【初始化...】
  26. 这是类方法test_1_d
  27. PASSED【后续处理】
  28. """
复制代码

  • 函数或类方法级别:setup()和teardown()放类里面就会对类方法前后置,放在类外面就会对函数前后置,同unittest中效果。
  1. # 类外前后置
  2. def setup():
  3.     print("【函数初始化...】")
  4. def teardown():
  5.     print("【函数后期处理】")
  6. class Test_1:
  7.     # 类中前后置
  8.     def setup(self):
  9.         print("【类方法初始化...】")
  10.     def teardown(self):
  11.         print("【类方法后期处理】")
  12.     def test_1_a(self):
  13.         print("这是类方法test_1_a")
  14.     def test_1_b(self):
  15.         print("这是类方法test_1_b")
  16. def test_2():
  17.     print("这是函数test_2")
  18. def test_3():
  19.     print("这是函数test_3")
  20. """
  21. 执行结果
  22. setupAndteardown/test_setup.py::Test_1::test_1_a 【类方法初始化...】
  23. 这是类方法test_1_a
  24. PASSED【类方法后期处理】
  25. setupAndteardown/test_setup.py::Test_1::test_1_b 【类方法初始化...】
  26. 这是类方法test_1_b
  27. PASSED【类方法后期处理】
  28. setupAndteardown/test_setup.py::test_2 【函数初始化...】
  29. 这是函数test_2
  30. PASSED【函数后期处理】
  31. setupAndteardown/test_setup.py::test_3 【函数初始化...】
  32. 这是函数test_3
  33. PASSED【函数后期处理】
  34. """
复制代码
3、总结

从2中的模块级别例子中可以看到,优先级最高的是模块级别,从其他例子中可以看到类级别,类方法级别和函数级别互不影响。类级别是在类中所有方法前后置,类方法级别是类中所有测试方法前后置,函数级别是所有测试函数前后置。setup和teardown在类中等同于setup_method和teardown_method,在类外等同于setup_function和teardown_function,与unittest中的setup和teardown作用及用法均相同

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表