如何在conftest.py中获取当前运行测试用例的文件名
解决pytest teardown阶段用测试用例文件名命名截图的问题
嗨,这个问题我之前写pytest测试框架的时候也碰到过!用__file__在conftest里拿到的肯定是conftest.py本身,毕竟这段代码是在conftest里执行的嘛。要拿到当前运行的测试用例的文件名,得借助pytest提供的request对象来获取测试上下文信息才行。
具体做法很简单,我给你拆解一下:
- 在你的fixture里注入
request参数——这个是pytest自动提供的,能让你访问当前测试用例的各种元数据; - 通过
request.node.module获取当前测试用例所属的模块,模块的__file__属性就是测试用例文件的完整路径; - 用
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
相关产品推荐
相关产品推荐

