首页 > 编程语言 >java+testng+selenium实现测试用例过程的录制,生成GIF。

java+testng+selenium实现测试用例过程的录制,生成GIF。

时间:2024-08-14 17:25:17浏览次数:14  
标签:截图 java 录制 selenium GenerateGif testng 用例 线程 注解

1.功能需求:

  1. 支持灵活配置:因为本身已有用例执行失败的截图功能,所以需要支持针对单条测试用例的配置;
  2. 支持testng框架xml多线程的执行;
  3. 录制内容文件小、支持调整录制每帧间隔、每条用例录制最大时长(避免用例元素未定位到时长时间录制)。

2.灵活配置实现

创建注解,通过在测试用例上方添加生成GIF注解控制每条用例的开关。
在这里插入图片描述

  1. 创建注解,设置默认值为true
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 创建GenerateGif自定义注解
 * 控制测试方法中是否需要录制GIF
 */
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可见
@Target(ElementType.METHOD) // 注解适用于方法
public  @interface GenerateGif {
   
    boolean value() default true; // 默认为 true,表示需要截图
}
  1. 在监听器TestListenerAdapter相关的onTestStart、onTestSuccess、onTestFailure相关方法中通过获取测试用例的注解判断是否执行相关录制。
	@Override
	public void onTestStart(ITestResult tr) {
   
		// 获取测试方法上的 @GenerateGif 注解
		GenerateGif GenerateGif = tr.getMethod().getConstructorOrMethod().getMethod().getAnnotation(GenerateGif.class);
		boolean generateGifStatus = GenerateGif != null && GenerateGif.value(); // 根据注解决定是否捕捉截图
	}

3.多线程及录制时长和每帧间隔实现

在每条用例开始执行前创建一个线程,负责按照播放间隔去截取浏览器屏幕,用例成功、失败时停止线程合成GIF图片并添加到报告当中。用例跳过时停止线程。

  1. 创建相关变量及常量
	//截图存储根目录
	private static final String PATH = System.getProperty("user.dir")+File.separator+"screenshot"+File.separator;
	// 存储所有用例的线程
	private static final Map<String, Thread> threadMap = new ConcurrentHashMap<>();
	// 存储所有用例截图文件
	private static final Map<String, List<File>> imageMap = new HashMap<>();
	// 最大捕捉时间 20 秒
	private static final long MAX_CAPTURE_TIME_MS = 20000;
	// 每帧播放间隔 500毫秒
	private static final int MAX_FARAME_INTERVAL_MS = 500;
  1. 创建启动线程截图方法
	// 启动截图线程
	private void startGenerateGif(WebDriver driver,String testName,String gifPath){
   

		Thread  screenshotThread = new Thread(() -> {
   

			boolean threadStatus = true;
			//延迟线程启动时间,避免执行截图时测试方法已经跳过
			try{
   Thread.sleep(2000);}catch (InterruptedException e){
   }

			long startTime = System.currentTimeMillis(); // 记录开始时间
			// 创建 List<File> 作为 Map 的值
			List<File> fileList = new ArrayList<>();

				while (threadStatus) {
   
					if ( Thread.interrupted() || (System.currentTimeMillis() - startTime >= MAX_CAPTURE_TIME_MS)){
   
						threadStatus = false;
						break;
					}else {
   
						try {
   
							File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); // 捕捉浏览器视口的截图
							File destination = new File(gifPath+ System.currentTimeMillis() + ".png"); // 截图保存的目标文件
							FileUtils.copyFile(screenshot, destination

标签:截图,java,录制,selenium,GenerateGif,testng,用例,线程,注解
From: https://blog.csdn.net/xing_gy/article/details/141192424

相关文章

  • JavaSE基础知识分享(六)
    写在前面前面讲的是面向对象中的多态这部分,下面让我们来看看java中常用类这部分的内容!常用类Object概述:是Java中所有类的父类,包括自己定义的类和数组都继承自Object类。成员方法hashCode()获取对象地址值的int类型形式。getClass()获取对象的类的字节码文件对......
  • java流程控制之选择结构
    if单选择结构:我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表达。语法为:if(布尔表达式){//为true执行语句}if双选择结构:两个判断,if-else。语法为:if(布尔表达式){//为true执行语句}else{//为......
  • java后端详解中
    1.日期时间yyyy表示当天所在的年YYYY代表是weekinwhichyear,表示当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。表示日期和时间的格式:newSimpleDateFormat("yyyy-MM-dd:HH:mm:ss")1)表示月份是大写的M;2)表示分钟则是小写的m;3)24小......
  • JAVA毕业设计|ssm高校宿舍管理系统的设计与开发jsp包含文档代码讲解
    收藏点赞不迷路 关注作者有好处文末获取源码一、系统展示二、万字文档展示 基于ssm高校宿舍管理系统的设计与开发jsp开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven 编号:ssm283一、系统展示二、万字文档展示第......
  • JAVA毕业设计|(免费)ssm实验室管理与排课系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处编号:ssm458ssm实验室管理与排课系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费领源码)1.系统展示2.万字文档展示第5章系统详细设计最后对选题、开题、毕设开......
  • JAVA毕业设计|(免费)基于ssm的星巴克咖啡店管理系统包含文档代码讲解
     收藏点赞不迷路 关注作者有好处编号:ssm449基于ssm的星巴克咖啡店管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费领源码)1.系统展示2.万字文档展示第5章系统详细设计5.1管理员角色功能设计......
  • JAVA毕业设计|(免费)基于SSM的蛋糕甜品店管理系统的设计与开发jsp包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:ssm544基于SSM的蛋糕甜品店管理系统的设计与开发jsp开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费|领源码)1.系统展示2.万字文档展示第5章系统详细设计5.1个人中......
  • JAVA毕业设计|(免费)ssm基于web的经典电影推荐网站的包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:ssm504ssm基于web的经典电影推荐网站的开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计这个环节需要使用前面的设计方案,包括对系统模块......
  • 毕业设计|ssm基于java web的商铺租赁管理系统的jsp|免费|代码讲解
    收藏点赞不迷路 关注作者有好处编号:ssm405ssm基于javaweb的商铺租赁管理系统的jsp开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven文末获取源码(免费领源码)1.系统展示2.万字文档展示第5章系统详细设计这个环节需要使......
  • [Javascript] Create an Actor model in Javascript
    Referto:https://stately.ai/docs/actor-modelWhatdefinesan“actor”?​Actorsareindependent“live”objectsthatcancommunicatewitheachotherviaasynchronousmessagepassing.InXState,werefertothesemessagesas events.Anactorhasitsowni......