博客
关于我
pytest文档65-内置 request 读取项目的根目录 rootdir
阅读量:465 次
发布时间:2019-03-06

本文共 3757 字,大约阅读时间需要 12 分钟。

前言

写自动化测试项目的时候,经常要用到配置文件,比如读取数据库相关的配置,希望单独放到 config 配置文件,方便维护。

pytest 的内置 fixture 可以获取到配置相关的信息,request.config.rootdir 用于获取项目的跟目录。

config 配置文件

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

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

import pytestimport osimport 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:\wangyiyun\webauto>pytest -s================================================= test session starts =================================================platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1rootdir: D:\wangyiyun\webautoplugins: allure-pytest-2.8.6collected 5 itemscase\test_1.py dbinfo file path :D:\wangyiyun\webauto\config\dbenv.yml{'host': '47.104.x.x', 'port': 3306, 'user': 'root', 'passwd': 123456, 'db': 'test'}test xxx.case\test_x1.py test 111111.test 22222222.test 3333333.test 444444444.=================

这时候可以看到读取到的配置文件地址:D:\wangyiyun\webauto\config\dbenv.yml

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

D:\wangyiyun\webauto>cd caseD:\wangyiyun\webauto\case>pytest test_1.py================================================= test session starts =================================================platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1rootdir: D:\wangyiyun\webauto\caseplugins: allure-pytest-2.8.6collected 1 itemtest_1.py E                                                                                                      [100%]======================================================= ERRORS ========================================================______________________________________________ ERROR at setup of test_x _______________________________________________request = 
> @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:\wangyiyun\webauto\case\config\dbenv.yml=============================================== 1 error in 0.08 seconds ===============================================

这个时候就会出现报错:No such file or directory: 'D:\wangyiyun\webauto\case\config\dbenv.yml'

因为此时的项目跟目录就变成了 rootdir: D:\wangyiyun\webauto\case
接下来我们需要解决的问题时,不管在哪个目录运行,它的项目跟目录应该都是我们的工程目录 D:\wangyiyun\webauto

pytest.ini

pytest 运行用例的时候项目的 rootdir 当没有 pytest.ini 配置文件的时候会根据 conftest.py 找到它的跟目录。

由于前面没有用到pytest.ini 配置文件,导致不同目录运行用例的 rootdir 不一样。

当项目下存在 pytest.ini 配置文件的时候,会认为 pytest.ini 所在的目录是 rootdir 目录, 所以我们一般会把 pytest.ini 配置文件放到项目的跟目录。

如果里面没有内容,放个空的也行

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

D:\wangyiyun\webauto\case>pytest test_1.py======================== test session starts ==============platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0, pluggy-0.13.1rootdir: D:\wangyiyun\webauto, inifile: pytest.iniplugins: allure-pytest-2.8.6collected 1 itemtest_1.py .                                            [100%]========================1 passed in 0.03 seconds =============

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

你可能感兴趣的文章
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>