zoukankan      html  css  js  c++  java
  • pytest文档65-内置 request 读取项目的根目录 rootdir

    前言

    写自动化测试项目的时候,经常要用到配置文件,比如读取数据库相关的配置,希望单独放到 config 配置文件,方便维护。
    pytest 的内置 fixture 可以获取到配置相关的信息,request.config.rootdir 用于获取项目的跟目录。

    config 配置文件

    再项目下新建一个 config 文件,相关配置信息用 yaml 文件维护数据

    在conftest.py 下写读取配置文件的 fixture, 这里我设置为 autouse=True 主要是为了查看打印读取到的目录

    import pytest
    import os
    import yaml
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    @pytest.fixture(scope="session", autouse=True)
    def dbinfo(request):
        dbfile = os.path.join(request.config.rootdir,
                            "config",
                            "dbenv.yml")
        print("dbinfo file path :%s" % dbfile)
        with open(dbfile) as f:
            dbenv_config = yaml.load(f.read(), Loader=yaml.SafeLoader)
        print(dbenv_config)
        return dbenv_config
    

    rootdir 读取

    打开 cmd 命令行,在项目的跟目录运行用例

    pytest -s

    D:wangyiyunwebauto>pytest -s
    ================================================= test session starts =================================================
    platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1
    rootdir: D:wangyiyunwebauto
    plugins: allure-pytest-2.8.6
    collected 5 items
    
    case	est_1.py dbinfo file path :D:wangyiyunwebautoconfigdbenv.yml
    {'host': '47.104.x.x', 'port': 3306, 'user': 'root', 'passwd': 123456, 'db': 'test'}
    test xxx
    .
    case	est_x1.py test 111111
    .test 22222222
    .test 3333333
    .test 444444444
    .
    
    =================
    

    这时候可以看到读取到的配置文件地址:D:wangyiyunwebautoconfigdbenv.yml

    在项目根目录运行用例是标准的运行姿势,但是有些小伙伴会 cd 到 case 目录,运行单个用例

    D:wangyiyunwebauto>cd case
    
    D:wangyiyunwebautocase>pytest test_1.py
    ================================================= test session starts =================================================
    platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1
    rootdir: D:wangyiyunwebautocase
    plugins: allure-pytest-2.8.6
    collected 1 item
    
    test_1.py E                                                                                                      [100%]
    
    ======================================================= ERRORS ========================================================
    ______________________________________________ ERROR at setup of test_x _______________________________________________
    
    request = <SubRequest 'dbinfo' for <Function test_x>>
    
        @pytest.fixture(scope="session", autouse=True)
        def dbinfo(request):
            dbfile = os.path.join(request.config.rootdir,
                                "config",
                                "dbenv.yml")
            print("dbinfo file path :%s" % dbfile)
    >       with open(dbfile) as f:
    E       FileNotFoundError: [Errno 2] No such file or directory: 'D:\wangyiyun\webauto\case\config\dbenv.yml'
    
    ..conftest.py:14: FileNotFoundError
    ------------------------------------------------ Captured stdout setup ------------------------------------------------
    dbinfo file path :D:wangyiyunwebautocaseconfigdbenv.yml
    =============================================== 1 error in 0.08 seconds ===============================================
    

    这个时候就会出现报错:No such file or directory: 'D:wangyiyunwebautocaseconfigdbenv.yml'
    因为此时的项目跟目录就变成了 rootdir: D:wangyiyunwebautocase
    接下来我们需要解决的问题时,不管在哪个目录运行,它的项目跟目录应该都是我们的工程目录 D:wangyiyunwebauto

    pytest.ini

    pytest 运行用例的时候项目的 rootdir 当没有 pytest.ini 配置文件的时候会根据 conftest.py 找到它的跟目录。
    由于前面没有用到pytest.ini 配置文件,导致不同目录运行用例的 rootdir 不一样。

    当项目下存在 pytest.ini 配置文件的时候,会认为 pytest.ini 所在的目录是 rootdir 目录, 所以我们一般会把 pytest.ini 配置文件放到项目的跟目录。
    如果里面没有内容,放个空的也行

    这时候不管在哪个目录运行用例都不会有问题了

    D:wangyiyunwebautocase>pytest test_1.py
    ======================== test session starts ==============
    platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1
    rootdir: D:wangyiyunwebauto, inifile: pytest.ini
    plugins: allure-pytest-2.8.6
    collected 1 item
    
    test_1.py .                                            [100%]
    
    ========================1 passed in 0.03 seconds =============
    

    pytest的配置文件除了 pytest.ini,还有 tox.ini 和 setup.cfg 也可以当配置文件

  • 相关阅读:
    Java 实现 蓝桥杯 生兔子问题
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    深入探究VC —— 资源编译器rc.exe(3)
    深入探究VC —— 编译器cl.exe(2)
    深入探究VC —— 编译器cl.exe(1)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14070270.html
Copyright © 2011-2022 走看看