• pytest的fixture和conftest


    解决问题:用例1需要先登录,用例2不需要登录,用例3需要先登录。很显然这就无法用setup和teardown来实现了,这个时候就可以自定义测试用例的预置条件,比setup灵活很多。

    1、fixture的使用,以及 scope = function 和 scope = module 的区别

    #coding=utf-8
    import pytest
    
    @pytest.fixture(scope="function")   # 不带参数 默认scope = function 针对函数有效
    def login():
        print("登录成功")
    
    
    def test1(login):
        print('操作1')
        print("-----------------------------------------------")
    
    def test12():
        print('操作2')
        print("-----------------------------------------------")
    
    
    def test3(login):
        print('操作3')
    print("-----------------------------------------------") if __name__ == '__main__': pytest.main()

    运行结果:

    # coding=utf-8
    import pytest
    
    @pytest.fixture(scope="module")
    def login():
        print("登录成功")
    
    
    def test1(login):
        print('操作1')
        print("-----------------------------------------------")
    
    def test12():
        print('操作2')
        print("-----------------------------------------------")
    
    
    def test3(login):
        print('操作3')
    
        print("-----------------------------------------------")
    
    
    if __name__ == '__main__':
        pytest.main(['-s', "text.fix2.py"])

    运行的结果:

    区别:scope= module 它只会在第一个用例前执行一次,后面再调用不执行了。

    2、conftest.py的配置

    解决问题:上面一个案例是在同一个.py文件中,多个用例调用一个登陆功能,如果有多个.py的文件都需要调用这个登陆功能的话,那就不能把登陆写到用例里面去了,需要单独写在配置文件里面

    conftest.py配置需要注意以下点:

    • conftest.py配置脚本名称是固定的,不能改名称
    • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
    • 不需要import导入 conftest.py,pytest用例会自动查找
      __init__.py
      
      conftest.py
          # coding:utf-8
          import pytest
      
          @pytest.fixture()
          def login():
              print("登录成功")
      
      test_fix1.py
      
      # coding=utf-8
      import pytest
      
      
      def test4(login):
          print('操作1')
          print("-----------------------------------------------")
      
      def test5():
          print('操作2')
          print("-----------------------------------------------")
      
      
      if __name__ == '__main__':
          pytest.main(['-s',"text.fix1.py"])   #-s参数是为了显示用例的打印信息。 -q参数只显示结果,不显示过程
      
      
      
      text_fix2.py
      
      # coding=utf-8
      import pytest
      
      
      def test1(login):
          print('操作1')
          print("-----------------------------------------------")
      
      def test12():
          print('操作2')
          print("-----------------------------------------------")
      
      
      def test3(login):
          print('操作3')
      
          print("-----------------------------------------------")
      
      
      if __name__ == '__main__':
          pytest.main(['-s', "text.fix2.py"])

      运行结果:

  • 相关阅读:
    arm-linux-3.4.2移植for2440
    编译内核是出现:arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments
    poj3050 Hopscotch
    poj3187 Backward Digit Sums
    poj2718 Smallest Difference
    hihocoder offer收割编程练习赛10 C 区间价值
    poj1862 Stripies
    poj3262 Protecting the Flowers
    poj2229 Sumsets
    poj2385 Apple Catching
  • 原文地址:https://www.cnblogs.com/guo2733/p/10521619.html
Copyright © 2020-2023  润新知