使用 cypress,测量页面加载时间

问题描述 投票:0回答:5

我正在使用 cypress 来测试网站,我需要一种方法来测量加载或执行某些 cypress 命令所需的时间。例如:

//var startTime = SomeStopwatchFunction();
cy.visit("/a website");
cy.get("Some item");
//cy.log(SomeStopwatchFunction - startTime);

我尝试使用

cy.clock()
但返回 0。所以我可能在那里做错了什么。我使用过
performance.now()
,它有点工作,但无论加载时间如何,总是返回相同的值。我使用过
Date.getTime()
但它也返回 0。它与 cypress 执行代码的方式有关,但似乎没有任何作用。

typescript performance integration-testing cypress
5个回答
4
投票

您正在测量 Cypress 队列上异步发生的事情,因此您还需要使用

cy.wrap()
将计时命令插入队列中。

否则它们将在页面加载之前执行并给你一个非常小的差异。

const t0 = performance.now()
cy.visit("/a website");
cy.get("Some item");
cy.wrap(performance.now()).then(t1 => {   // this is now a queued command which will 
                                          // only run after the previous command
  cy.log(`Page load took ${t1 - t0} milliseconds.`);
})


 

3
投票

接受的答案(来自用户9161752)可能会导致奇怪的结果。就我而言,持续时间大约太长了 5 秒。在我看来,

const t0 = performance.now()
beforeEach
中的内容运行之前被调用,因此结果包含了我的情况下登录过程的持续时间。

所以你还必须异步设置开始时间。这对我有用:

let start = 0;
cy.then(() => {
    start = performance.now();
});
cy.visit("/a website");
cy.get("Some item").then(() => {
    cy.log(`duration: ${performance.now() - start} ms`);
});

0
投票

有一个 cypress-timings 给出了每个 cypress 命令的一般时序。安装并将以下内容添加到您的

support/index.js

中非常简单
import { commandTimings } from 'cypress-timings'
commandTimings()

0
投票

就我而言,我需要测量点击后的页面加载时间,所以我编写了以下代码:

cy.get(loginLoginBtn).should('exist').then(() => {
        const t0 = performance.now();

        cy.get(loginLoginBtn)
        .click()
        .location('pathname').should('eq', '/package_selection')
        .wait('@recentProfiles').its('response.statusCode')
        .should('eq', 200)
        .then(() => {
            const t1 = performance.now();
            const packagePageLoadTime = ((t1 - t0) / 1000);
            cy.log(`Page load took ${packagePageLoadTime} seconds.`)
            cy.writeFile(packagePageLoadFile, '[]', {flag: 'w+'});
            cy.readFile(packagePageLoadFile).then((writeTimeToFile) => {
                writeTimeToFile.push({dateOfExecution: executionDate, timeInSeconds: packagePageLoadTime});
                cy.writeFile(packagePageLoadFile, writeTimeToFile);
            });
            expect(packagePageLoadTime).to.be.lessThan(5);
        })
    });

0
投票

计时页面加载的最简单方法是使用提供的事件。

这样您就不必担心测试设置中出现的

before()
挂钩代码或其他“内务”命令。

cy.visit('http://localhost:3000/#/users', {
  onBeforeLoad: (win) => {
    win.t0 = performance.now()
  },
  onLoad: (win) => {
    t1 = performance.now()
    cy.log(`Page load took ${t1 - win.t0} milliseconds.`)
  },
})
© www.soinside.com 2019 - 2024. All rights reserved.