java - 使用 Selenium 和 Chrome 开发工具实现浏览器内存泄漏自动化
问题描述
我们有使用 selenium-chrome-driver 用 Java 编写的现有 Web 测试用例。现在我们要在执行这些测试后检查浏览器内存泄漏。
手动,我使用 Chrome 开发工具 - 内存选项卡来完成。进行堆转储,在我开始测试之前,执行测试,然后再次进行堆转储。比较这两个提供堆增量的堆转储。
我找不到 selenium-chrome-dev-tools API,我可以使用它启动 Chrome Dev Tool 内存分析器(可能还有其他一些工具),运行我的 WebDriver 测试(实例化 Chrome 浏览器实例,操作 DOM 元素等)。 ),然后停止分析器,然后检查分析器的结果以查看是否有任何内存泄漏。
这个概念是否可行,或者我可以出去吃午饭了吗?为什么/为什么不?
另一方面,我遇到了https://github.com/samccone/drool使用它,我可以获得此信息,但问题是我将不得不用 javascript 重写所有现有的 java selenium 测试,除非有我可以将口水与现有的硒测试集成吗?
请建议。
注意: Chrome Dev Tools API 和 Selenium WebDriver下已经提出了类似的问题,但我还没有看到太多有用的答案,所以再次发布更多详细信息。
解决方案
Selenium 支持org.openqa.selenium.JavascriptExecutor。window.performance.memory.usedJSHeapSize
我们可以在测试过程中的任何阶段获得 的值。下面是代码。
public static void reportMemoryUsage(WebDriver webDriver, String message) {
((JavascriptExecutor) webDriver).executeScript("window.gc()");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
LOGGER.error(e.getLocalizedMessage());
}
Double usedJSHeapSize = (Double) ((JavascriptExecutor) webDriver)
.executeScript("return window.performance.memory.usedJSHeapSize/1024/1024");
LOGGER.info("Memory Usage at " + message + " - " + usedJSHeapSize + " MB ");
}
从您的测试套件中调用此方法,一个在测试开始时调用,一个在测试结束时调用。两个 usedJSHeapSize 值之间的差异会导致内存泄漏。
我在使用 usedJSHeapSize 之前强制进行垃圾收集,以确保没有收集到垃圾信息。要在窗口上启用 gc 功能,您必须设置该-js-flags=--expose-gc
选项。
ChromeOptions options = new ChromeOptions();
options.addArguments("-js-flags=--expose-gc");
WebDriver webDriver = new ChromeDriver(options);
推荐阅读
- git - 在作业配置中的 Jenkins 管道上使用相同的凭据
- powerbi - 度量中的 DAX 过滤器
- firebase - firestore 安全规则 - 如何打印出规则值?
- sql - 为什么将 64 添加到类型转换转换的末尾?
- python - 堆叠卷积和 LSTM 层的问题
- firebase - Firestore 上传并调整图片大小并获取压缩图片下载 url
- fft - Sympy 傅里叶变换
- email - 如何将退订信息用于交易和营销电子邮件?
- javascript - 如何重复/循环上传多张图片的预览?
- dart - 如何在 VS Code 中调试以命令行属性开头的 Dart 控制台应用程序?