zoukankan      html  css  js  c++  java
  • pytest跟我练03-->fixtrue基础之scope参数

    前言

          学习知识要善于举例,举例,再举例。—— 蓝寅
          好啦,鸡汤结束,开始分享!!
    

    一、scope参数是什么?

    • scope参数是fixture方法中的其中一个参数;
    • scope参数用来设置fixture的应用范围,设置后,会根据设置的范围去触发执行;
    • scope参数有4个可选值:function(默认)、class、module、package/session

    function:每个方法(函数)都会执行一次;
    class:每个类都会执行一次。类中有多个方法调用,只在第一个方法调用时执行;
    module:一个 .py 文件执行一次。一个.py 文件可能包含多个类和方法;
    package/session:多个文件调用一次,可以跨 .py 文件。注意使用时单独写package或session

    二、scope参数出处(会的忽略该步)

    • 2.1 编写如下图代码,并按照操作:
    ![](https://img2020.cnblogs.com/blog/380431/202003/380431-20200316215325495-538117319.jpg)
    + 2.2 跳转到fixture方法的位置时,就可以看到scope参数了,它有默认值function,英文好的朋友可以继续看下面的注释
    ![](https://img2020.cnblogs.com/blog/380431/202003/380431-20200316215618244-779488914.png)
    # 三、scope参数简单使用
    • 3.1 scope="function" 举例
    import pytest
    
    @pytest.fixture(scope='function') # function级别每个函数都会执行一次
    def setUp():
        print('
    setUp')
        yield
        print('
    tearDown')
    
    def testcase01(setUp):
        print('exectue testcase01')
        assert 1
    def testcase02(setUp):
        print('exectue testcase02')
        assert 1
    
    if __name__=='__main__':
        pytest.main(["-s"])
    

    以上代码执行结果:

    /usr/local/bin/python3.8 /Users/lanyin/PycharmProjects/newdream/pytest_demo/test_demo_03.py
    ============================= test session starts ==============================
    platform darwin -- Python 3.8.2, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
    rootdir: /Users/liuqingjun/PycharmProjects/newdream/pytest_demo
    plugins: ordering-0.6, html-2.1.0, allure-pytest-2.8.11, metadata-1.8.0
    collected 2 items
    
    test_demo_03.py 
    setUp
    exectue testcase01
    .
    tearDown
    
    setUp
    exectue testcase02
    .
    tearDown
    
    ============================== 2 passed in 0.02s ===============================
    
    • 3.2 scope="module" 举例
    import pytest
    
    @pytest.fixture(scope='module') # module级别每个模块都会执行一次
    def setUp():
        print('
    setUp')
        yield
        print('
    tearDown')
    
    def testcase01(setUp):
        print('exectue testcase01')
        assert 1
    def testcase02(setUp):
        print('exectue testcase02')
        assert 1
    
    if __name__=='__main__':
        pytest.main(["-s"])
    

    以上代码执行结果:

    /usr/local/bin/python3.8 /Users/lanyin/PycharmProjects/newdream/pytest_demo/test_demo_03.py
    ============================= test session starts ==============================
    platform darwin -- Python 3.8.2, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
    rootdir: /Users/liuqingjun/PycharmProjects/newdream/pytest_demo
    plugins: ordering-0.6, html-2.1.0, allure-pytest-2.8.11, metadata-1.8.0
    collected 2 items
    
    test_demo_03.py 
    setUp
    exectue testcase01
    .exectue testcase02
    .
    tearDown
    
    ============================== 2 passed in 0.02s ===============================
    

    上述两个实例小结:

    • scope="function" 在每个函数开始执行测试方法之前执行一次,每个测试方法部执行完之后再执行一次 (共2次输出setUp、tearDown)
    • scope="module" 只会在模块开始执行测试方法之前执行一次,测试方法全部执行完之后执行一次(共1次输出setUp、tearDown)
    • "class"和"package/session"与上述用法原理一样,不再重复举例,伤大家眼睛
  • 相关阅读:
    mysql/oracle 小技巧自动插入当前时间
    Java StringUtil 用法示例
    timestamp与String的相互转换
    gzip/gunzip用法
    maven常用指令
    微基站、宏基站区别
    CRAN方案
    让gvim中支持utf8编辑
    java正则表达式的几个小例子
    Sql Server数据库汉字按字母、笔划、拼音首字母、排序
  • 原文地址:https://www.cnblogs.com/dream66/p/12507161.html
Copyright © 2011-2022 走看看