You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在conftest.py中获取当前运行测试用例的文件名

解决pytest teardown阶段用测试用例文件名命名截图的问题

嗨,这个问题我之前写pytest测试框架的时候也碰到过!用__file__在conftest里拿到的肯定是conftest.py本身,毕竟这段代码是在conftest里执行的嘛。要拿到当前运行的测试用例的文件名,得借助pytest提供的request对象来获取测试上下文信息才行。

具体做法很简单,我给你拆解一下:

  1. 在你的fixture里注入request参数——这个是pytest自动提供的,能让你访问当前测试用例的各种元数据;
  2. 通过request.node.module获取当前测试用例所属的模块,模块的__file__属性就是测试用例文件的完整路径;
  3. 用os.path.basename()提取文件名,要是觉得带.py后缀麻烦,还可以用os.path.splitext()把后缀去掉,让截图名更干净。

给你改好的代码示例:

import os
import pytest
from selenium import webdriver  # 假设你用的是selenium驱动,根据实际情况调整

@pytest.fixture(scope="function")
def driver(request):
    # 这里是driver的初始化逻辑,比如启动浏览器
    driver = webdriver.Chrome()
    yield driver
    
    # Teardown阶段:获取测试用例文件名并生成截图
    # 获取当前测试用例所在的模块
    test_module = request.node.module
    # 提取测试用例的文件名(带.py后缀)
    test_filename = os.path.basename(test_module.__file__)
    # 去掉.py后缀,生成截图文件名
    screenshot_name = os.path.splitext(test_filename)[0] + ".png"
    # 保存截图
    driver.save_screenshot(screenshot_name)
    # 最后别忘了关闭driver
    driver.quit()

这样一来,不管你的测试用例在哪个.py文件里,截图都会以该文件的名字命名,再也不会出现conftest.py的情况啦。

要是之后你想给截图加上测试用例的具体函数名(比如test_login_success.png),还可以用request.node.name获取测试函数名,和文件名组合起来用也很方便~

内容的提问来源于stack exchange,提问作者user1256607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:08:22