如何在Playwright Java与TestNG框架中按测试方法名录测试视频并仅保留失败视频
解决方案
1. 调整BaseTest实现视频命名与自动清理
修改BaseTest类,通过TestNG生命周期注解实现视频文件名自定义和成功测试视频的自动删除:
import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; public abstract class BaseTest { protected BrowserContext browserContext; private static final String VIDEOS_DIR = "test-videos"; @BeforeMethod public void setupBrowserContext(ITestResult result) { String testMethodName = result.getMethod().getMethodName(); Path videoDir = Paths.get(VIDEOS_DIR); // 确保视频目录存在,重试场景下先删除旧视频避免覆盖 try { Files.createDirectories(videoDir); Files.deleteIfExists(videoDir.resolve(String.format("%s.mp4", testMethodName))); } catch (Exception e) { e.printStackTrace(); } // 创建带自定义视频文件名的BrowserContext browserContext = browser.newContext(new Browser.NewContextOptions() .setIgnoreHTTPSErrors(true) .setPermissions(Arrays.asList("geolocation")) .setRecordVideoDir(videoDir) .setRecordVideoName(String.format("%s.mp4", testMethodName))); // 调用子类初始化逻辑 initialize(); } // 子类需实现的初始化方法 public abstract void initialize(); @AfterMethod public void cleanupVideo(ITestResult result) { // 关闭BrowserContext确保视频文件写入完成 browserContext.close(); // 测试成功则删除对应视频,仅保留失败测试的视频 if (result.isSuccess()) { Path videoPath = Paths.get(VIDEOS_DIR, String.format("%s.mp4", result.getMethod().getMethodName())); try { Files.deleteIfExists(videoPath); } catch (Exception e) { e.printStackTrace(); } } } }
2. 简化Sample测试类
子类Sample无需手动初始化browserContext,直接复用BaseTest的逻辑即可:
public class Sample extends BaseTest { private LoginPage loginPage; @Override public void initialize() { loginPage = createInstance(LoginPage.class); // 移除原有的browserContext赋值逻辑,BaseTest已完成初始化 } @Test(testName = "sampleTestName", retryAnalyzer = RerunFailedTestCases.class) public void sampleTestName() { loginPage.performLogin(); loginPage.validateLogInSuccessful(); } }
关键逻辑说明
- 视频文件名自定义:通过
@BeforeMethod获取当前测试方法名,用setRecordVideoName指定视频文件名为测试方法名.mp4,确保每个测试的视频独立命名。 - 自动清理成功测试视频:在
@AfterMethod中判断测试结果,成功则删除对应视频文件,仅保留失败测试的视频用于问题排查。 - 重试场景兼容:在
@BeforeMethod中先删除同名旧视频,避免重试时文件覆盖,最终仅保留最后一次重试的视频(若测试最终失败)。
内容的提问来源于stack exchange,提问作者Rajeev Dixit
相关产品推荐
相关产品推荐

