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
从顶层运行,它将下降到 testing 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 中工作)
解决方案
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 和当前阶段,可以设置、调用和拆卸。
推荐阅读
- php - Capture Screenshot API PageSpeed Insight 的问题
- c++ - 如何打印 .txt 单词列表中的单词?
- java - 返回响应之前调用的类方法
- java - Mesibo 消息列表标题显示数字但我想要用户名
- google-chrome-extension - Chrome 扩展程序:无法解压缩扩展程序
- json - 在PowerShell中解析json的麻烦
- reactjs - Redux 存储正在更新,但组件未重新渲染
- ansible - with_nested 不能按预期在数组中循环
- google-sheets - 谷歌表格公式有时不适用于合并单元格
- ios - watchOS only App – Info.plist 中的隐私使用说明