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 也可以当配置文件

  • 相关阅读:
    NVelocity用法
    LINQ to SQL语句(1)之Where
    CSS content内容生成技术以及应用
    LINQ to SQL语句(4)之Join
    LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg
    本页的SQL例句全部懂了,你的数据库开发所需知识就够用了
    oracle 导入导出命令
    MTracer中文破解版下载 MTracer2.1
    在Powerdesigner或者ER/Studio中使用宏把Attribute复制到Definition
    利用DDTek不安装客户端访问数据库
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14070270.html
Copyright © 2011-2022 走看看