Puppeter 및 Chrome 개발 도구의 성능 스케줄을 사용하여 UX 성능 테스트 자동화

15746 단어 testingperformance
많은 도구들이 우리가 사이트 페이지의 부하 성능 지표를 평가하는 데 도움을 줄 수 있다.Lighthouse, PingdomWebPageTest 등(많은 공구가 엔진 덮개 아래에서 사용Lighthouse.페이지를 불러온 후, 사이트의 사용자의 상호작용 성능을 측정하는 도구를 찾기가 매우 어렵다.도구가 부족한 것은 모든 사이트가 자신만의 독특한 수요와 사용자의 상호작용을 가지고 있기 때문일 수 있다.그래서 개발자(당신!),개인 사이트의 요구에 따라 맞춤형 페이지 불러오기, 사용자 중심의 성능 테스트를 해야 합니다.
나는 줄곧 테스트 프레임워크를 구축하려고 시도해 왔다. 이 프레임워크는 내 사이트의 일부 사용자들의 상호작용의 지속 시간을 자동으로 측정할 수 있다.나는 이 글이 자신의 사이트에서 같은 일을 고려하는 사람들에게 출발점을 제공할 수 있기를 바란다.

테스트


테스트 중점의 가능성 영역을 우선적으로 고려하다.
수욕 센터에서 노선을 바꾸다
  • 로그인 페이지에서 사용자가 액세스할 수 있는 다음 페이지로 이동
  • 상호 작용 우선
  • 로그인
  • 카트 보기
  • 탐색 메뉴 열기
  • 좋아하는 것 또는 좋아하는 것 추가
  • 검색 결과 획득
  • 베이스라인 정의


    이 글The Psychology of Web Performance과 발췌문Usability Engineering을 읽은 후 웹과 응용 프로그램의 성능을 최적화할 때'3 important limits을 기억해야 한다.
  • 사용자는 응답이 0.01초에 나타나는 것을 느꼈다.
  • 사용자 체험 무중단 데이터, 응답 시간 1초.
  • 응답 시간이 10초를 넘으면 사용자의 주의력이 끊기고 좌절감이 높아진다.
  • 테스트의 성공이나 실패를 확인하기 위해 기선을 정의할 때, 이러한 제한을 기억하십시오.

    우리는 어떤 공구를 사용할 것입니까?


    Puppeteer - 헤드 없는 브라우저 노드입니다.js 도서관.
  • 웹 페이지 조회
  • Chrome 개발자 도구 프로토콜
  • 과의 통신 지원
  • 사용자처럼 우리 페이지와 상호작용
  • Chrome Developer Tools Performance Timeline - Chrome 웹 브라우저에 포함
  • 페이지 로드 또는 사용자 상호 작용 중 브라우저에서 발생한 이벤트를 기록할 수 있음
  • 프로세스


    노드와 Puppeter가 이미 설치되어 있다고 가정하면 노드의 시작점을 살펴보겠습니다.js 스크립트는 Addy Osmani의 this blog post에서 가져옵니다.
    const puppeteer = require('puppeteer');
    
    (async () => {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        const navigationPromise = page.waitForNavigation();
        await page.goto('https://pptr.dev/#?product=Puppeteer&version=v2.1.1&show=outline');
        await page.setViewport({ width: 1440, height: 714 });
        await navigationPromise;
        const selector = 'body > sidebar-component > sidebar-item:nth-child(3) > .pptr-sidebar-item';
        await page.waitForSelector(selector);
        await page.tracing.start({ path: 'trace.json', screenshots: true });
        await page.click(selector);
        await page.tracing.stop();
    
        await browser.close();
    })();
    
    네가 위에서 본 것은 기본적인 생각이다.
  • 새 브라우저 시작 실례
  • URL로 이동
  • 추적 시작Chrome Dev Tools Protocol 성능 타임라인 도구와 상호작용)
  • 페이지에서 요소를 선택하고 클릭
  • 추적 중지
  • 브라우저 닫기
  • 생성된 추적 파일 (trace.json) 의 출력은 아래와 유사하지만 더 많은 항목이 있습니다.
    // trace.json
    {
        "traceEvents": [
            {
                "args": { "data": { "type": "click" } },
                "cat": "devtools.timeline",
                "dur": 7761,
                "name": "EventDispatch",
                "ph": "X",
                "pid": 61589,
                "tdur": 7706,
                "tid": 775,
                "ts": 161565081204,
                "tts": 119022
            },
            {
                "args": {
                    "cat": "devtools.timeline,rail",
                    "dur": 18,
                    "name": "Paint",
                    "ph": "X",
                    "pid": 61589,
                    "tdur": 18,
                    "tid": 775,
                    "ts": 161565160795,
                    "tts": 196604
                }
            }
        ]
    }
    
    다음은 추적 파일의 documentation 및 키 값 쌍이 대표하는 내용입니다.
    추적 파일은 traceEvents 그룹을 포함합니다.각 이벤트 객체에는
    ts = time start;
    dur = duration;
    
    ts: The tracing clock timestamp of the event. The timestamps are provided at microsecond granularity.  
    There is an extra parameter dur to specify the tracing clock duration of complete events in microseconds.   
    All other parameters are the same as in duration events. The ts parameter indicate the time of the start of the complete event.  
    Unlike duration events, the timestamps of complete events can be in any order.  
    An optional parameter tdur specifies the thread clock duration of complete events in microseconds.
    
    사용자의 상호작용에 걸리는 시간을 정확하게 측정하기 위해서 우리는 추적 파일을 분석하고 브라우저의 렌더링 이벤트를 식별해야 한다.Paul IrishThis article는 브라우저의 렌더링 프로세스를 "픽셀 파이프"로 설명합니다.
  • 사용자 상호 작용 이벤트(일반적으로 JavaScript 또는 CSS 애니메이션)
  • 디자인
  • 레이아웃 맵
  • 페인트
  • 복합재료
  • 우리는 인형사가 생성한 추적 파일에서 이 사건들을 모두 찾을 수 있다.픽셀 파이프 이벤트 순서를 따르는 경우 사용자 상호 작용에서 시작되는 렌더링 프로세스의 총 지속 시간을 확인할 수 있어야 합니다.최종 복합 이벤트의 시작 시간 및 최종 복합 이벤트의 지속 시간 합에서 사용자 상호 작용 이벤트의 시작 시간을 뺀 값입니다(예제에서 클릭 이벤트).
    const totalDuration = finalCompositeStartTime + finalCompositeDuration - clickStartTime;
    
    너의 계산 결과는 아마 어떤 것일 것이다.

    추적 이벤트 파일을 Chrome Developer Tools Performance Timeline 도구에 업로드하면 이벤트를 그래픽으로 볼 수 있습니다.

    이력 추적의 끝을 확대하여 복합 레이어 이벤트를 찾습니다.

    정교하다


    사용자를 더욱 진실하게 모의하기 위해 다른 수정도 할 수 있습니다.주의해야 할 것은 성능이 낮은 네트워크와 CPU에서 사용자를 시뮬레이션하는 것이다. Puppeter는 성능 타임라인 추적 기간에 네트워크와 CPU 절약을 설정할 수 있다.
    // Connect to Chrome DevTools
    const client = await page.target().createCDPSession();
    
    //Set Network Throttling property
    await client.send('Network.emulateNetworkConditions', {
        offline: false,
        downloadThroughput: (200 * 1024) / 8,
        uploadThroughput: (200 * 1024) / 8,
        latency: 20,
    });
    
    // Set  CPU Throttling property
    await client.send('Emulation.setCPUThrottlingRate', { rate: 4 });
    
    Michal Janaszekthis blog post의 코드 세그먼트입니다.
    이게 다야!이 도구와 브라우저 렌더링 과정의 지식을 이용하여 우리는 기선을 만들고 사용자의 상호작용을 실행하며 결과를 분석하고 시간을 계산할 수 있다.이제 성능 테스트를 CI/CD 파이프라인에 통합할 수 있는 출발점이 생겼습니다.
    본 시리즈의 두 번째 부분에서 우리는 본고의 방법을 따르는 예시 항목을 볼 것이다.

    좋은 웹페이지 즐겨찾기