我似乎无法在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.txt
和file2.txt
上测试某些执行情况。无论我尝试嵌套的内容有多深,我都需要它能够工作进行测试。)我对设置特定的临时测试目录并删除它们并不感兴趣,等等。我只需要被测试文件的路径即可。
我尝试过类似的事情:
>>> print os.path.abspath(__file__)
但这只是产生:UNEXPECTED EXCEPTION: NameError("name '__file__' is not defined",)
我什至没有访问py.test中的一些内部函数/对象
(我还要补充一点,我需要它才能在Python 2.7和Python 3.x中工作)
答案 0 :(得分:1)
Pytest为当前正在运行的测试设置PYTEST_CURRENT_TEST env var。它不仅具有当前文件信息,还具有当前收集的测试ID的信息(例如测试名称,参数等)。
import os
def test_current():
print(os.getenv('PYTEST_CURRENT_TEST'))
如果要查看打印的文本,必须使用-s
标志进行pytest运行。
在测试会话期间pytest会将PYTEST_CURRENT_TEST设置为当前测试节点ID和当前阶段,可以进行设置,调用和拆卸。