我已经很长一段时间没有拿起Checker和Selenium了,所以我不得不在Internet上挖一点东西,寻找在这种情况下聪明的人正在做什么。最终适合我的解决方案汇集了多种技术:Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder(由Pirogov提供)。但是,由于我仍然诚实地进行挖掘,试图找到解决问题的最佳方法,因此我有几种其他更简单的挖掘方法-您可以如何截屏。
由于发现的信息散布在整个Internet上,因此我认为将一个简短的摘要放在一个地方会很好。实际上,这篇文章对初学者来说只是一个小介绍。那些关心相同问题的人-用眼睛看自动测试抛出红色标记时存在或不存在的东西。
让我们看看我们被要求做什么。
如何拍摄屏幕截图
对于我们的问题,可以想到的第一个选择是获取屏幕截图。那些。猜测测试失败的那一刻,并获得一张照片。通常,您可以为每个操作拍摄屏幕截图。或以一定的频率(例如,每半秒钟一次)截屏。
方法1. Selenium
由于许多测试是用Selenium / WebDriver编写的,因此使用其方法将是明智的。例如:
WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
方法2.硒化物
第二种方法是对硒使用包装纸,例如硒化物。该框架简化了驱动程序的工作,除其他外,当发生错误时自动生成屏幕截图。默认情况下,屏幕截图存储在“测试结果/报告”文件夹中。
方法3。java.awt.Robot
下一步是使用一般标准的Java类(从1.3版开始)直接与操作系统一起使用。一个类似代码看起来的小例子:
BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screenshot.png"));
方法4.使用外部程序
查找一个需要屏幕截图并使用其API的程序。当然,有这样一种方法,但是我什至没有朝这个方向进行挖掘。
方法5.使用云技术
如果您根本不想打扰,而且金钱烧伤了您的雇主的大腿,那么您可以切换到在云服务中运行测试。通常,此类服务的基础结构使您可以进行日志记录,为不同操作系统和不同浏览器上的运行情况创建报告。包括通过测试的视频。我没有特别提及服务-以免做广告。一切都用谷歌搜索。
如何获取屏幕视频
有了视频,它会稍微复杂一些。您不能只是拍摄和拍摄视频。需要跳舞一点。
跳舞的主要方式有两种:
- 制作屏幕截图并将其转换为视频(以下称为方法1)
- 立即拍摄视频(以下为方法2和3)
方法1.将图片手动转换为视频(以ffmpeg为例)
要获取视频,您可以每半秒拍摄一次屏幕截图,然后将其组合为一个视频。例如,使用ffmpeg库(https://ffmpeg.org/)
对于具有PNG扩展名的文件位于同一目录中,该命令可能如下所示:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
您可以添加自动化,例如,使脚本在测试结束时运行类似的命令。
方法2。录像机-蒙特屏幕录像机
创建视频的另一种方法是绕过屏幕截图创建步骤,并立即使用录像机。
我遇到的第一个是Monte Screen Recorder,下面是为此记录器使用Java包装器的一个小示例(https://github.com/stephenc/monte-screen-recorder):
GraphicsConfiguration gc = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration();
screenRecorder = new ScreenRecorder(gc,
gc.getBounds(),
new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey, 24, FrameRateKey, Rational.valueOf(15),
QualityKey, 1.0f,
KeyFrameIntervalKey, 15 * 60),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)),
null,
new File(targetFolder));
screenRecorder.start();
该录像机的缺点是您需要在计算机上安装TSC编解码器才能观看视频(https://www.techsmith.com/products.html)。
方法3.记录器-ffmpeg
我遇到的第二个记录器是最著名且使用最广泛的ffmpeg库。我已经给出了将其转换为视频的示例。该库有几个包装器。我最终在github.com/SergeyPirogov/video-recorder-java上安顿下来。
这个库吸引了我,因为这些更新是相当新的-这意味着该项目仍然有效,并且人们希望可以尽快修复这些错误。此外,包装程序是专门为支持我们的问题而编写的,即在测试失败时拍摄视频。最简单的使用方法是Java批注视频(名称=“ second_test”)
例如:
@Test
@Video(name = "second_test")
public void videoShouldHaveNameSecondTest(){
Thread.sleep(1000);
assertTrue(false);
}
最主要的是要记住,默认情况下,包装器使用的是Monte编解码器,而不是ffmpeg。因此,不要忘记在配置文件中覆盖视频格式(您可以在中央Git项目页面上看到如何完成此操作),
不会有任何输出。对于我自己,我选择了VideoRecorder(由Pirogov开发),但没有使用注释,而是直接使用允许您启动和停止视频记录的类。在下一篇文章中,我计划描述这种
方法,不要引用出于研究目的而诚实地窃取了代码的页面:
- www.ontestautomation.com/creating-a-video-capture-of-your-selenium-tests-using-monte-screen-recorder
- habr.com/ru/sandbox/67456
- stackoverflow.com/questions/24961127/如何使用ffmpeg从图像创建视频
- github.com/stephenc/monte-screen-recorder
- habr.com/ru/sandbox/67456
PS:如果突然之间,偶然地,您对可以采取的其他措施有所了解-请在评论中添加链接或文字。谢谢。