不使用JUnit是否可以实现视频录制?当前使用Cucumber框架
问题解答
完全可以实现,无需依赖JUnit组件,直接通过Cucumber提供的@Before钩子结合Testcontainers的VNC录制能力即可完成配置。
实现步骤
- 确认项目已引入Cucumber Java、Testcontainers BrowserWebDriverContainer、VNC录制相关依赖,你要求使用的
cucumber.api.java.Before为Cucumber旧版本注解,若使用Cucumber 7+版本可替换为io.cucumber.java.Before。 - 编写Cucumber钩子类,将容器初始化、启动逻辑放到
@Before注解修饰的方法中,容器声明为静态变量可实现全局复用,避免每个测试场景重复启动容器。
完整代码示例:
import cucumber.api.java.Before; import en.sbtqa.tag.pagefactory.drivers.Capabilities; import org.testcontainers.containers.BrowserWebDriverContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.VncRecordingMode; import org.testcontainers.containers.VncRecordingFormat; import java.io.File; import java.time.Duration; public class TestContainerHook { // 静态声明容器全局复用 public static BrowserWebDriverContainer<?> container; @Before public void initBrowserContainer() { // 避免重复初始化已运行的容器 if (container == null || !container.isRunning()) { container = new BrowserWebDriverContainer<>() .withCapabilities(Capabilities.getFirefoxOptions()) .withRecordingMode(VncRecordingMode.RECORD_ALL, new File("target"), VncRecordingFormat.MP4) .withStartupTimeout(Duration.ofMinutes(2)) .withNetwork(Network.newNetwork()); container.start(); } } // 可选:所有测试结束后销毁容器 // import cucumber.api.java.After; // @After // public void destroyContainer() { // if (container != null && container.isRunning()) { // container.stop(); // } // } }
注意事项
- 录制的MP4视频默认存储到指定的
target目录下,命名规则为{容器ID}-{启动时间}.mp4,可通过withRecordingFileName参数自定义文件名。 - 若只需录制失败用例,将
VncRecordingMode.RECORD_ALL替换为VncRecordingMode.RECORD_FAILING即可,需配合在@After钩子中调用container.afterTest(用例执行结果布尔值)传入执行状态。 - 运行Cucumber时需配置glue参数,确保框架可以扫描到钩子类所在的包,否则钩子不会生效。
内容的提问来源于stack exchange,提问作者Александр Денисов
相关产品推荐
相关产品推荐

