2 回答
TA贡献1820条经验 获得超3个赞
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);
TA贡献1797条经验 获得超6个赞
由于 drool 是开源的,您可以在https://github.com/samccone/drool/blob/master/lib/index.js看到它们的实现,并在 Java 中执行类似的操作:
ChromeOptions options = new ChromeOptions();
// Enable performance logging
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
// Enable timeline tracing
Map<String, Object> chromeOptions = new HashMap<>();
Map<String, String> perfLoggingPrefs = new HashMap<>();
perfLoggingPrefs.put(
"traceCategories", "v8,blink.console,disabled-by-default-devtools.timeline");
chromeOptions.put("perfLoggingPrefs", perfLoggingPrefs);
options.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
WebDriver driver = new ChromeDriver(options);
...
LogEntries performanceLogsBefore = driver.manage().logs().get("performance");
...
LogEntries performanceLogsAfter = driver.manage().logs().get("performance");
然后过滤“V8.GCScavenger”、“V8.GCIncrementalMarking”、“MajorGC”和“MinorGC”条目的性能日志。
添加回答
举报
