zoukankan      html  css  js  c++  java
  • pytest fixtures装饰器的使用

    一、pytest中可以使用@pytest.fixture 装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中。可以使用这种方式来完成测试之前的初始化,也可以返回数据给测试函数。

    将fixture作为函数参数

    通常使用setup和teardown来进行资源的初始化,如果有这样一个场景,测试用例1需要依赖登入功能,测试用例2不需要依赖登入功能,测试用例3需要登入功能,这种场景setup,teardown无法实现,也可以使用pytest fixture功能,在这个方法前面加个@pytest.fixture装饰器,加了这个装饰器的方法可以以参数的形式传到方法里,这个方法就会先执行这个登入方法,再去执行自身的用例步骤,如果没有传入这个登入方法就不执行登入操作,直接执行已有的步骤

    #!/usr/bin/env python
    # _*_coding: utf-8 _*_
    import pytest
    
    
    @pytest.fixture()
    def login():
        print("这时一个登入的方法")
        return ('tome', '123')
    
    
    @pytest.fixture()
    def operate():
        print("这是登入后的操作")
    
    
    def test_case1(login, operate):
        print(login)
        print("test_case1,需要登入")
    
    
    def test_case2():
        print("test_case2,不需要登入")
    
    
    def test_case3(login):
        print(login)
        print("test_case3,需要登入")

    在上面的代码中,测试用例test_case1 和test_case3 分别增加了login 方法名作为参数,pytest会发现并调用@pytest.fixture标记的login功能,运行测试结果如下:

    Testing started at 10:17 ...
    C:Pythonpython.exe "C:Program FilesJetBrainsPyCharm Community Edition 2019.1helperspycharm\_jb_pytest_runner.py" --path C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture.py
    Launching pytest with arguments C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture.py in C:UserswanwenPycharmProjectsvigoxuexi20210123
    ============================= test session starts =============================
    platform win32 -- Python 3.8.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
    rootdir: C:UserswanwenPycharmProjectsvigoxuexi20210123
    plugins: html-2.1.1, metadata-1.11.0, ordering-0.6collected 3 items
    
    test_fixture.py 这时一个登入的方法
    这是登入后的操作
    .('tome', '123')
    test_case1,需要登入
    .test_case2,不需要登入
    这时一个登入的方法
    .('tome', '123')
    test_case3,需要登入
                                                          [100%]
    
    ============================== 3 passed in 0.04s ==============================
    
    Process finished with exit code 0

    从上面结果可以看出,test_case1 和test_case3 运行之前执行了login方法,test_case2没有执行这个方法。

  • 相关阅读:
    如何使用NuGet package .nupkg文件?
    利用Z.Expressions.Eval表达式求值
    表达式实现填写“阶段标记”属性
    NX导入DWG失败
    简单工厂模式(Simple Factory Pattern)
    电脑装系统蓝屏未解决
    idea intellij 配置总结
    poiexcel 笔记
    Springboot
    Springboot--maven命令子模块单独打包
  • 原文地址:https://www.cnblogs.com/vigo01/p/14333751.html
Copyright © 2011-2022 走看看