性能日志

ChromeDriver 支持性能日志记录功能,您可以从中获取 “时间轴”“广告网络”和“网页” 跟踪记录数据

启用性能日志

性能日志记录默认处于停用状态。因此,在创建新会话时 您必须将其启用

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

启用后,性能日志会收集时间轴、网络和网页 事件。如需同时启用跟踪功能或自定义性能日志记录,请保留 阅读。

查看带有默认选项的性能日志记录完整示例(图片来源:Michael Klepiov)。

Angular Benchpress 也会使用性能日志记录。

跟踪和自定义日志记录

如果您需要自定义性能日志记录(例如,若要启用跟踪), 可以使用 perfLoggingPrefs 功能 (通过 ChromeOptions)。您可通过指定一个或多个 Chrome 来启用跟踪 跟踪记录类别详细了解 Chrome 跟踪

启用跟踪功能后,系统会隐式停用时间轴网域。你仍然 您需要启用具有 loggingPrefs 功能的性能日志。

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

您还可以使用 perfLoggingPrefs 启用或停用网络和网页 网域。例如,您可以明确启用广告联盟网域 跟踪期间:

...

Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);

...

如果启用了跟踪功能,ChromeDriver 会在 Chrome 启动浏览器级跟踪记录后, 启动后,会继续进行跟踪,直到 Chrome 关闭。跟踪 Chrome 会在内存中缓冲跟踪事件,直到跟踪停止。

一旦跟踪缓冲区已满,系统就不会再记录跟踪事件。为避免 完整的缓冲区(因而也会丢失跟踪数据),ChromeDriver 会定期停止 收集缓冲的事件,并在特定时间重新开始跟踪 得分。

收集轨迹事件会增加测试开销,因此仅限 ChromeDriver 在测试期间的适当时间点收集跟踪事件。目前,跟踪 只有在网页导航事件发生时,以及 ChromeDriver log(例如性能日志)。总有一种可能 缓冲区仍然占满,因此 ChromeDriver 会监控缓冲区使用情况, 支持的 Chrome 版本(r263512 及更高版本)。如果缓冲区已填充,ChromeDriver 会 记录警告并在性能日志中添加一个条目。

收集日志条目

在测试中,您可以获取性能日志条目。阅读 WebDriver 日志记录文档

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
  System.out.println(entry.toString());
}

每个条目都是采用以下结构的 JSON 字符串:

{
  "webview": <originating WebView ID>,
  "message": { "method": "...", "params": { ... }} // DevTools message.
}

方法值是 DevTools 事件的方法。 例如,对于所有事件,时间轴事件都具有一个 Timeline.eventRecorded 方法 协议版本 1.1 以内(当时的最新 )。

跟踪日志条目

从 1.1 版开始,跟踪功能不再是已发布的开发者工具协议的一部分,因此 请查看此处提供的链接

所有跟踪事件的 WebView 值均为“browser”因为这些事件 收集更多数据

有两种可能的跟踪事件方法:

  • tracing.dataCollected:参数是字典形式的单个跟踪事件。
  • tracing.bufferUsage:此参数包含一个错误键,并显示一条消息,指明开发者工具跟踪缓冲区在测试期间已填充。

下面是一个跟踪事件示例:

{
    "webview":"browser",
    "message":{
        "method":"Tracing.dataCollected",
        "params":{
            "args":{"layerTreeId":1},
            "cat":"cc,devtools",
            "name":"DrawFrame",
            "ph":"i",
            "pid":11405,
            "s":"t",
            "tid":11405,
            "ts":3846117219.0,
            "tts":1134680
        }
    }
}