pytest获取当前测试文件的文件路径

时间:2019-04-30 03:02:04

标签: python 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,它将下降到测试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中工作)

1 个答案:

答案 0 :(得分:1)

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

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

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

来自Reference Doc

  

在测试会话期间pytest会将PYTEST_CURRENT_TEST设置为当前测试节点ID和当前阶段,可以进行设置,调用和拆卸。