Soh*_*oni 3 java selenium google-chrome google-chrome-devtools selenium-webdriver
我们有使用 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 ");
}
Run Code Online (Sandbox Code Playgroud)
从您的测试套件中调用此方法,一个在测试开始时一个,一个在测试结束时。两个 usedJSHeapSize 值之间的差异将导致内存泄漏。
我在使用 usedJSHeapSize 之前强制进行垃圾收集,以确保没有收集到垃圾信息。要在窗口上启用 gc 功能,您必须设置该-js-flags=--expose-gc选项。
ChromeOptions options = new ChromeOptions();
options.addArguments("-js-flags=--expose-gc");
WebDriver webDriver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4989 次 |
| 最近记录: |