성능 로그

ChromeDriver는 성능 로깅을 지원하여 '타임라인', '네트워크', '페이지' 도메인을 비롯해 트레이스 데이터 (지정된 trace 카테고리의 경우)

성능 로그 사용 설정

성능 로깅은 기본적으로 사용 설정되어 있지 않습니다. 따라서 새 세션을 만들 때 사용 설정해야 합니다

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);

사용 설정하면 성능 로그가 타임라인, 네트워크, 페이지를 수집합니다. 이벤트를 수신합니다. 추적을 사용 설정하거나 성능 로깅을 맞춤설정하려면 있습니다.

기본 옵션을 사용한 성능 로깅의 전체 예 보기 (자료 제공: 마이클 클레피코프)

Angular Benchpress도 성능 로깅을 사용합니다.

추적 및 커스텀 로깅

성능 로깅을 맞춤설정해야 하는 경우, 예를 들어 추적을 사용 설정하려면 다음을 실행합니다. perfLoggingPrefs 기능을 사용하여 (ChromeOptions를 통해) 추적을 하나 이상의 Chrome을 지정하여 사용 설정할 수 있습니다. trace 카테고리 다음에 대해 자세히 알아보기: 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);

...

추적이 사용 설정되면 Chrome에서 Chrome Driver가 브라우저 전체 트레이스를 시작합니다. 실행되고 Chrome이 종료될 때까지 추적을 계속합니다. trace가 Chrome은 트레이스가 중지될 때까지 메모리에 트레이스 이벤트를 버퍼링합니다.

트레이스 버퍼가 가득 차면 트레이스 이벤트가 더 이상 기록되지 않습니다. 피해야 할 사항 버퍼가 가득 차면 (따라서 트레이스 데이터가 손실됨) ChromeDriver가 주기적으로 버퍼링된 이벤트를 수집하고 특정 시점에 추적을 다시 시작합니다. 득점할 수 있습니다.

트레이스 이벤트를 수집하면 테스트에 오버헤드가 추가될 수 있으므로 ChromeDriver만 테스트 중 적절한 시점에 트레이스 이벤트를 수집합니다. 현재 trace는 이벤트는 페이지 탐색 이벤트 및 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 이벤트의 메서드입니다. 예를 들어 타임라인 이벤트에는 모든 Timeline.eventRecorded 메서드가 있습니다. 버전 1.1 (당시 최신 버전)까지의 작성한 것입니다.

Trace 로그 항목

추적은 버전 1.1부터 게시된 DevTools 프로토콜의 일부가 아니므로 여기에서 확인할 수 있습니다

모든 trace 이벤트의 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
        }
    }
}