首页 > 解决方案 > pytest 获取当前测试文件的文件路径

问题描述

我似乎无法在 pytest 中获取当前正在测试的文件的文件路径。

例如考虑以下目录结构:

devops_scripts
├── devops_utilities
│   ├── backupMonthly.py
│   ├── generateAnsibleINI.py
│   └── tests
│       └── test_backup.txt
├── monitoring
│   ├── analyizeCatalinaLog.py
│   ├── fetchCatalinaLogs.py
│   └── getaccountcredit.py
├── pi_provisioning
│   ├── piImageMake.sh
│   ├── piImageRead.sh
│   └── piImageSquashSd.py
└── script_utilities
    ├── README.md
    ├── __init__.py
    ├── execute.py
    ├── path_handling.py
    ├── sql_handling.py
    └── tests
        ├── sourcedirfortests
        │   ├── file1.txt
        │   └── file2.txt
        ├── test_ansible.txt
        └── test_execute.txt

如果我pytest从顶层运行,它将下降到 testing test_execute.txt。什么时候test_execute.txt在测试我如何获得它的文件路径?(我可以rootdir通过os.path.abspath('.'),但这不是我需要的)

(我需要能够设置这些路径以便在 和 上测试一些执行的东西file1.txtfile2.txt我也需要它来工作,无论我试图测试的各种东西嵌套得多么深。)我对设置特定的东西不太感兴趣临时测试目录并将它们删除等。我只需要正在测试的文件的路径。

我试过这样的事情:

>>> print os.path.abspath(__file__)

但这只会产生:UNEXPECTED EXCEPTION: NameError("name '__file__' is not defined",)

我什至无法访问 py.test 中的一些内部函数/对象

(我应该补充一点,我需要它才能在 Python 2.7 和 Python 3.x 中工作)

标签: pythonpytest

解决方案


Pytest 为当前正在运行的测试设置 PYTEST_CURRENT_TEST env var。它不仅具有当前文件信息,还具有当前收集的测试 id 的信息(如测试名称、参数等)。

import os
def test_current():
    print(os.getenv('PYTEST_CURRENT_TEST'))

-s如果要查看打印的文本,则必须使用flag 进行 pytest 运行。

来自参考文档

在测试会话期间,pytest 会将 PYTEST_CURRENT_TEST 设置为当前测试 nodeid 和当前阶段,可以设置、调用和拆卸。


推荐阅读