zoukankan      html  css  js  c++  java
  • 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"])

      运行结果:

  • 相关阅读:
    经典算法之冒泡排序(Bubble Sort)-Python实现
    经典算法之快速排序(Quick Sort)-Python实现
    2020年SRE的随心感悟
    django: 像正常运行django的项目运行单个文件
    整理一下javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX的具体含义
    requestAnimationFram 的优势及使用场景
    js 隐式数据转换带来的BUG
    为什么我不建议在js中使用链接变量分配
    关于JS函数传参的数据修改
    实现一个查看浏览器内核及版本号的功能函数
  • 原文地址:https://www.cnblogs.com/guo2733/p/10521619.html
Copyright © 2011-2022 走看看