在 Cypress 中记录 API 响应时间的方法

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

我试图在 Cypress 中记录 API 响应时间,但找不到任何解决方案。使用什么,

cy.intercept()
还是
cy.request()

我试图使用这样的建议:

cy.intercept('POST', '**/create-insurance-view-model', (req) => {
                    const start = Date.now()
                    req.continue(res => {
                      res.responseTime = Date.now() - start;
                    })
                  }).as('apiViewModel')

cy.wait('@apiViewModel').then(intercept => {
                    cy.log(`Time to get the license plate data was: ${intercept.response.responseTime} seconds`)
                })

我在日志中变得未定义。

api time cypress response cypress-intercept
2个回答
5
投票

有两种情况

  • 有一个网页调用API,您想测试响应时间。此场景使用

    cy.intercept()

  • 您有一个想要直接测试的 API(不是从网页调用)。此场景使用

    cy.request()
    启动每个 API 调用。

示例:

it('tests API response via web page', () => {

  cy.intercept('api/resource/3', (req) => {
    const start = Date.now()
    req.continue(res => {
      res.headers.responseTime = Date.now() - start;
    })
  }).as('apiCall')

  cy.visit('/')

  cy.wait('@apiCall').then(intercept => {
    cy.log(intercept.response.headers.responseTime)
  })
it('tests API response by direct call', () => {

  const start = Date.now()

  cy.request('api/resource/3')
    .then(response) => {
      const responseTime = Date.now() - start;
      cy.log(responseTime)
    })

-1
投票

好的,所以我就这样解决了,感谢 Paolo 的帮助。添加自定义命令。

let responseTime

Cypress.Commands.add('inteceptasd', (method, request, apiVariable) => {
    cy.intercept(method, request, (req) => {
        const start = Date.now()
        req.reply(() => {
            responseTime = (Date.now() - start) / 1000
        })
    }).as(apiVariable)
})

Cypress.Commands.add('waitasd', (apiVariable, timeVariable, describe) => {
    cy.wait(apiVariable).then(() => {
        timeVariable = responseTime
        cy.log(timeVariable)
        cy.on('test:after:run', (test) => addContext({ test }, `Time to get the endpoint data ${apiVariable} was: ${timeVariable}s - ${describe}`))
    })
})

然后我在测试中使用它是这样的

cy.interceptForResponseTime('GET', '**/get-vehicle-identification*', 'apiVehicleByVin')
cy.get('cebia-price-loader > div > .btn').contains(domData.btnLoadPrice).should('exist').click()
cy.waitWithResponseTime('@apiVehicleByVin', 'timeVehicleByVin', 'description for this api time check')
© www.soinside.com 2019 - 2024. All rights reserved.