我似乎无法获取 pytest 中正在测试的当前文件的文件路径。
\n\n例如,考虑如下目录结构:
\n\ndevops_scripts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 devops_utilities\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 backupMonthly.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 generateAnsibleINI.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_backup.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 monitoring\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 analyizeCatalinaLog.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fetchCatalinaLogs.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 getaccountcredit.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pi_provisioning\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 piImageMake.sh\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 piImageRead.sh\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 piImageSquashSd.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 script_utilities\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 execute.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 path_handling.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sql_handling.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sourcedirfortests\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1.txt\n \xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2.txt\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test_ansible.txt\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_execute.txt\nRun Code Online (Sandbox Code Playgroud)\n\n如果我pytest从顶层运行,它将下降到测试test_execute.txt。当test_execute.txt正在测试时如何获取它的文件路径?(我可以rootdir通过os.path.abspath(\'.\')但这不是我需要的)
(我需要能够设置这些路径,以便测试 和 上的一些执行内容file1.txt。file2.txt无论我尝试测试的各种内容嵌套得有多深,我也需要它才能工作。)我对设置特定的内容不太感兴趣临时测试目录并将其删除等。我只需要正在测试的文件的路径。
我尝试过类似的事情:
\n\n>>> print os.path.abspath(__file__)\nRun Code Online (Sandbox Code Playgroud)\n\n但这只会产生:UNEXPECTED EXCEPTION: NameError("name \'__file__\' is not defined",)
我什至不访问 py.test 中的一些内部函数/对象
\n\n(我应该补充一点,我需要它在 Python 2.7 和 Python 3.x 中工作)
\nSil*_*Guy 11
Pytest 为当前运行的测试设置 PYTEST_CURRENT_TEST env var。它不仅具有当前文件信息,还具有当前收集的测试 ID 的信息(如测试名称、参数等)。
import os
def test_current():
print(os.getenv('PYTEST_CURRENT_TEST'))
Run Code Online (Sandbox Code Playgroud)
-s如果您想查看打印的文本,则必须使用pytest run 标志。
来自参考文档:
在测试会话期间,pytest会将PYTEST_CURRENT_TEST设置为当前测试nodeid和当前阶段,可以设置、调用和拆卸。
与接受的答案相反,不要使用环境PYTEST_CURRENT_TEST变量。文档明确表示“不应依赖它\xe2\x80\x99 ”,在这种情况下,它甚至不是OP所要求的,即“当前正在测试的文件的文件路径”。
给定以下目录结构:
\ngraph/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_graph.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 functions.py\nRun Code Online (Sandbox Code Playgroud)\n文件中PYTEST_CURRENT_TEST函数的值是:test_bfstest_graph.py
\'graph/test/test_graph.py::test_bfs (call)\'\nRun Code Online (Sandbox Code Playgroud)\n而request.path具有 值graph/test/test_graph.py。这正是OP所要求的。
更多关于request: FixtureRequest 这里。