我试图在 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,您想测试响应时间。此场景使用
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)
})
好的,所以我就这样解决了,感谢 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')