如何在Cypress中动态断言数组元素?价格递增场景接口返回校验问题
Cypress 动态校验递增报价实现方案
改造核心思路
- 先通过前置请求/本地变量存储上一次报价的历史值作为校验基准
- 正确接收接口响应后,先校验通用返回字段正确性,再做递增的动态断言
- 如果需要校验返回的历史报价数组整体合规,可以遍历数组校验元素依次递增
你提供的待断言内容截图:
修正后可运行的完整代码
// 可以在外部定义变量存储上一次的报价,也可以替换为查询接口拉取历史最新报价 let lastBid = 0 // 前置拉取历史最新报价的逻辑,可按需调整 cy.request('GET', '你的历史报价查询接口地址').then(res => { lastBid = res.body.bidHistory.slice(-1)[0].amount }) describe('POST method', () => { it('suggest a price', () => { // 本次提交的报价,按业务规则设置递增值即可 const currentBid = lastBid + 100 cy.request({ method: 'POST', url:"xxxxxx", headers:{ "Authorization":"LOOL", "content-type": "application/json" }, body: { "id": "d42f516a867590633dd8a82cb2563437", "bid": currentBid, "auctionPlatformId": "xxx", "auctionPlatformUserId": 0 }, failOnStatusCode: false }).then(res => { // 基础字段正确性校验 expect(res.status).to.eq(200) expect(res.body).to.have.property("id", "d42f516a867590633dd8a82cb2563437") // 动态校验本次报价大于上一次报价 expect(res.body).to.have.property("amount").to.gt(lastBid) expect(res.body).to.have.property("auctionPlatformId", "xxx") expect(res.body).to.have.property("auctionPlatformUserId", 0) // 如果接口返回完整历史报价数组,遍历校验所有报价依次递增 if(res.body.bidHistory) { res.body.bidHistory.reduce((prev, curr) => { expect(curr.amount).to.gte(prev.amount, `报价${curr.amount}必须大于等于上一次报价${prev.amount}`) return curr }) } }) }) })
注意事项
- 断言方法
gt代表大于,gte代表大于等于,可根据业务规则自行替换 - 多轮连续提交报价的场景,可以把提交逻辑封装为公共函数,每次执行完更新
lastBid的值即可 - 已修正原脚本中重复断言
auctionPlatformId的笔误
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

