Pytest学习笔记之传统前后置处理

发表于:2022-2-25 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:全栈测试开发日记    来源:CSDN

  引言
  unittest是有三个处理前后置的函数:
  setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule(),而pytest相对比unittest多了2个,函数级和方法级。
  逻辑优先级:
  ·模块级(setup_module/teardown_module)开始于模块始末,全局的
  · 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  · 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
  · 方法级(setup_method/teardown_method)开始于方法始末(在类中)
  · 类里面的(setup/teardown)运行在调用方法的前后

  实例
  import pytest
   
   
  # setup_function&teardown_function 不在类中使用
  def setup_function():
      print("这是函数级setup>>>>>每条用例执行前执行")
  def teardown_function():
      print("这是函数级teardown>>>>>每条用例执行后执行")
   
  # setup_module&teardown_module 全局
  def setup_module():
      print("这是模块级setup>>>>>所有用例执行前执行")
  def teardown_module():
      print("这是模块级teardown>>>>>所有用例执行后执行")
   
  # 测试用例
  def test_001():
      print("用例001")
  def test_002():
      print("用例002")
   
  # 测试类
  class Test_Api:
      def setup(self):
          print("这是方法setup>>>>>每条用例执行前执行")
      def teardown(self):
          print("这是方法teardown>>>>>每条用例执行后执行")
   
      def setup_class(cls):
          print("这是类方法setup_class>>>>>所有用例执行前执行")
      def teardown_class(self):
          print("这是类方法teardown_class>>>>>所有用例执行后执行")
   
      def setup_method(self):
          print("这是setup_method方法>>>>>每个用例开始前执行")
   
      def teardown_method(self):
          print("这是teardown_method方法>>>>>每个用例结束后执行")
   
      def test_003(self):
          print("用例003")
   
      def test_004(self):
          print("用例004")
   
  if __name__ == '__main__':
      pytest.main('-s','test2.py')

  运行结果:
  test2.py::test_001 
  这是模块级setup>>>>>所有用例执行前执行
  这是函数级setup>>>>>每条用例执行前执行
  PASSED                                                [ 25%]用例001
  这是函数级teardown>>>>>每条用例执行后执行
   
  test2.py::test_002 这是函数级setup>>>>>每条用例执行前执行
  PASSED                                                [ 50%]用例002
  这是函数级teardown>>>>>每条用例执行后执行
   
  test2.py::Test_Api::test_003 
  test2.py::Test_Api::test_004 
   
  ============================== 4 passed in 0.05s ==============================
   
  Process finished with exit code 0
  这是类方法setup_class>>>>>所有用例执行前执行
  这是setup_method方法>>>>>每个用例开始前执行
  这是方法setup>>>>>每条用例执行前执行
  PASSED                                      [ 75%]用例003
  这是方法teardown>>>>>每条用例执行后执行
  这是teardown_method方法>>>>>每个用例结束后执行
  这是setup_method方法>>>>>每个用例开始前执行
  这是方法setup>>>>>每条用例执行前执行
  PASSED                                      [100%]用例004
  这是方法teardown>>>>>每条用例执行后执行
  这是teardown_method方法>>>>>每个用例结束后执行
  这是类方法teardown_class>>>>>所有用例执行后执行
  这是模块级teardown>>>>>所有用例执行后执行

  从结果上看,逻辑优先级:
  对于类外:模块级是最大的,全局的,针对.py模块的,你可以认为(setup_module/teardown_module)是global,针对整个py文件,你可以将测试数据初始化和清理数据放到这里。
  对于类中:setup_class>setup_method>setup
  对于整个py文件(模块):首先setup_module/teardown_module永远是最先执行的,然后识别函数和类的位置,按从上到下来执行,也是python程序执行规则。
  可以试试,将类和外面的函数换一下位置:
  执行结果:
  执行顺序:

  总结
  pytest的前后置处理函数实例已经讲完,这是传统的处理方法,如果像一些场景,比如说登录,在测试业务接口的时候,我们有些接口是不需要登录,但是有些是需要登录,前置条件是登录,如果说用这种传统的函数处理,肯定不适应了,于是有大神开发的了一个fixtrue函数,它其实是setup/teardown的升级版,设计思想是由它而来。

     本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号