前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest文档65-内置 request 读取项目的根目录 rootdir

pytest文档65-内置 request 读取项目的根目录 rootdir

作者头像
上海-悠悠
发布2020-12-03 11:06:02
9520
发布2020-12-03 11:06:02
举报
文章被收录于专栏:从零开始学自动化测试

前言

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

config 配置文件

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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.1
rootdir: D:\wangyiyun\webauto
plugins: allure-pytest-2.8.6
collected 5 items

case\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 目录,运行单个用例

代码语言:javascript
复制
D:\wangyiyun\webauto>cd case

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.1
rootdir: D:\wangyiyun\webauto\case
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:\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 配置文件放到项目的跟目录。 如果里面没有内容,放个空的也行

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

代码语言:javascript
复制
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.1
rootdir: D:\wangyiyun\webauto, 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 也可以当配置文件

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • config 配置文件
  • rootdir 读取
  • pytest.ini
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档