성능 로그

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도 성능 로깅을 사용합니다.

추적 및 맞춤 로깅

예를 들어 추적을 사용 설정하기 위해 성능 로깅을 맞춤설정해야 하는 경우 ChromeOptions를 통해 perfLoggingPrefs 기능을 사용할 수 있습니다. 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를 사용하여 네트워크 및 페이지 도메인을 개별적으로 사용 설정 또는 중지할 수도 있습니다. 예를 들어 추적 중에 Network 도메인을 명시적으로 사용 설정할 수 있습니다.

...

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 메서드가 있습니다.

트레이스 로그 항목

추적은 버전 1.1부터 게시된 DevTools 프로토콜의 일부가 아니므로 세부정보가 여기에 제공됩니다.

모든 트레이스 이벤트는 브라우저 전반에서 수집되므로 WebView 값이 '브라우저'입니다.

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

  • tracing.dataCollected: params는 사전 형식의 단일 트레이스 이벤트입니다.
  • tracing.bufferUsage: 테스트 중에 DevTools 트레이스 버퍼가 채워졌다는 메시지와 함께 단일 오류 키가 params에 포함됩니다.

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

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