#cypress
Вопрос:
Например, у меня есть следующие запросы запросов, и каждый запрос возвращает уникальный параметр идентификатора, который будет использоваться позже в другом запросе. Я использовал cypress для этого, но он перехватывает только первый запрос, а не другой для 4 запросов.
Как заставить его перехватывать все запросы и обрабатывать каждый из них отдельно?
describe(Cypress.env('label') 'TestSuite', function() {
beforeEach(function() {
cy.login_api(Cypress.env('username'), Cypress.env('password'))
})
it('General data queries', function(){
cy.visit(/)
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call1')
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call2')
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call3')
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call4')
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call5')
cy.wait('@call1').then(res => {
expect(res.response.statusCode).to.eq(200)
const valuesV3 = res.response.body.values
cy.setCookie('forceversion', '4')
cy.intercept({method : 'GET',path : '/galileo/data/*'}).as('call11')
cy.wait('@call11').then(res => {
expect(res.response.statusCode).to.eq(200)
const valuesV4 = res.response.body.values
alert(vluesV4)
for (var i = 0; i<Object.keys(valuesV3).length;i ) {
let x = Object.values(valuesV3[i])
let y = Object.values(valuesV4[i])
function compare(arr1, arr2) {
return arr1.every(item => arr2.includes(item))
}
if(compare(x,y)==true){
assert(true)
}
else {
assert(false)
})
}
}
})
})
})
})
Комментарии:
1. Пожалуйста, добавьте свой код Cypress.
2. Почему бы просто не добавить дополнительные 4 команды ожидания для их обработки?
3. @pavelsaman Я добавил код
4. @Zaista я добавляю четыре ожидания, но когда я собираюсь получить ответ, я всегда получаю ответ на первый запрос
Ответ №1:
Используйте одну intercept
команду, вызывайте visit
после intercept
и не вставляйте следующие wait
команды. Попробуй вот так:
it('General data queries', function() {
cy.intercept({method : 'GET',path : '/API/query/*'}).as('call')
cy.visit('/')
cy.wait('@call').then((interception) => {
cy.log(interception) // first api call
})
cy.wait('@call').then((interception) => {
cy.log(interception) // second api call
})
cy.wait('@call').then((interception) => {
cy.log(interception) // third api call
})
})
Ссылка: https://docs.cypress.io/guides/guides/network-requests#Waiting
Комментарии:
1. Спасибо за ваш ответ, но что делать, если количество запросов время от времени меняется. Я имею в виду, что это может быть 3 запроса, а может быть 2 запроса. Что я могу сделать в этом случае ?
2. Поскольку у вас есть неопределенный тест, с которым немного сложно легко справиться. Если вы действительно не можете заставить свое приложение запускать ожидаемое количество ответов (что должно быть вашим решением), вы можете перехватывать ошибки, вызванные этими дополнительными
wait
командами, и явно игнорировать их, используя следующие примеры: github.com/cypress-io/cypress-example-recipes/tree/master/…3. Было бы очень необычно, если бы приложение вызывало свой API разное количество раз в разных стартапах.