성능 로그

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 Klepikov)를 확인하세요.

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 로그 (예: 성능 로그)가 요청될 때만 수집됩니다. 버퍼가 여전히 채워질 가능성은 항상 있으므로 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 이벤트의 메서드입니다. 예를 들어 타임라인 이벤트에는 버전 1.1 (작성 당시의 최신 버전)까지의 모든 프로토콜 버전에 Timeline.eventRecorded 메서드가 있습니다.

trace 로그 항목

추적은 버전 1.1부터 게시된 DevTools 프로토콜에 포함되지 않으므로 여기에서 자세한 내용을 확인할 수 있습니다.

이벤트가 브라우저 전체에서 수집되므로 모든 트레이스 이벤트의 WebView 값은 'browser'입니다.

가능한 트레이스 이벤트 메서드에는 두 가지가 있습니다.

  • tracing.dataCollected: 매개변수는 사전 형태의 단일 추적 이벤트입니다.
  • tracing.bufferUsage: 매개변수에는 단일 오류 키와 테스트 중에 DevTools 추적 버퍼가 채워졌음을 나타내는 메시지가 포함됩니다.

다음은 트레이스 이벤트의 예입니다.

{
    "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
        }
    }
}