• pytest_前置后置_共享机制


    DDT 数据驱动测试  思想
    
    应用场景:场景流程是一样的,只有数据不一样。 --- 参数化
    
    python测试框架当中应用数据驱动:
    
    unittest: ddt库
    pytest:  自带的。
    
    
    在测试用例的前面加上:
    @pytest.mark.parametrize("参数名",列表数据)
    参数名:用来接收每一项数据,并作为测试用例的参数。
    列表数据:多组测试数据。
    
    @pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
    
    示例:
       @pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])
       def test_add(a,b,c):
            res = a + b
            assert res == c
    
    
    
    测试用例的: 前置操作(准备工作 - 准备环境/数据/资源...)、
              后置操作(清理工作 -关闭环境/清理数据/释放资源...)
    
         前置工作 - setup
         执行测试用例(中间执行多少用例呢?)
         后置工作 - teardown
    
         在每条测试用例执行之前,打印:一条测试用例开始执行
         执行测试用例
         在每条测试用例执行之后,打印:一条测试用例执行结束
    
         在一个测试类下的第一条用例执行之前,打印:测试类下的用例开始执行
         执行测试类下的用例
         在一个测试类下的最后一条用例执行之前,打印:测试类下的用例执行结束
    
         定义fixture
         1、函数表示,函数名称自定义。
         2、函数前面,要用@pytest.fixture来声明它是一个fixture
         3、包含前置准备工作的代码、后置清理工作的代码。前置代码和后置代码之间用yield隔开
            yield之前的代码为:前置工作
            yield之后的代码为:后置工作
         4、作用域:function(测试函数-默认)、class(测试类)、module(测试模块)、session(测试会话)
                  scope参数来设置
    
    
         调用fixture
         在测试类/测试用例的名字上:
         @pytest.mark.usefixtures("定义的fixture函数名")
         支持在测试类/测试用例上调用多个fixture
    
    
    
         共享机制:
         定义的fixture,不同的.py里的测试用例,都可以调用。
         公共的地方:conftest.py(存放fixtures)
         不需要测试用例.py文件去引入,pytest会自动找的。
    
         (fixtures可以放在类里面、 .py里面、  conftest.py)
         用例当中如果调用了fixture,
         那么,首先找自己所在的文件有没有
         如果有,优先用自己的。
         如果没有,则会去找同级目录下的conftest.py里有没有
         如果同级没有,则会去上找一级目录下的conftest.py里有没有
         ...
         一直到rootdir
    
    
         "继承"  fixture使用其它的fixture
         @pytest.fixture(scope="class")
         def class_fix():
            # 前置准备工作的代码
            print("-----测试类下的用例开始执行------")
            yield
            # 后置清理工作的代码
            print("-----测试类下的用例执行结束------")
    
    
        @pytest.fixture
        def hello(class_fix):
            # 前置准备工作的代码
            print("打开浏览器,打开淘宝,登陆成功")
            yield
            # 后置清理工作的代码
            print("退出帐号,关闭浏览器")
    
        执行顺序:
        class_fix的前置
        hello的前置
        hello的后置
        class_fix的后置
    
        fixture1(fixture2) --fixture2的scope不能低于fixture1
    同级
  • 相关阅读:
    bzoj 1076
    CF1000G
    CF979E
    bzoj 3129
    CF451E
    CF939F
    CF1065D
    CF1015F
    Enum与最佳単例设计
    悲观锁 vs 乐观锁 vs Redis
  • 原文地址:https://www.cnblogs.com/zhang-ping1205/p/14448455.html
Copyright © 2020-2023  润新知