You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress实现测试结束时才报错:站点地图URL批量校验

批量检测站点地图URL失效链接并统一报告失败

用例

每次代码发布后,自动测试网站所有站点地图URL(超1000个),检查是否存在失效链接。

问题

当前测试中,即使URL返回非200状态码,测试仍会无错误完成。需要收集所有请求结果,在两次cy.request()执行完成后统一检查结果,仅在测试结束时标记失败,确保找出所有失效链接且不中途停止测试。

现有代码

describe('Validate sitemaps files', () => {
let urls = []
let results = []
const failed = []

before(function () {
    cy.fixture('sitemaps.json').then((data) => {
        for (var index in data) {
            cy.log(data[index].url)
            cy.request({
                url: Cypress.config().baseUrl + data[index].url,
                failOnStatusCode: false,
                headers: {
                    "Content-Type": "text/xml; charset=utf-8",
                    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
                },
            }).as("parentSitemapPath").then((responseParent) => {
                urls = Cypress.$(responseParent.body)
                    .find("loc")
                    .toArray()
                    .map((el) => el.innerText)
                cy.log(JSON.stringify(responseParent.status))
                if (response.status !== 200) {
                    ????

                 }
            })
        }  
    })
})

it("Should succesfully load each url in the sitemap", () => {
    urls.forEach((url) => {
        cy.request({
            method: 'HEAD',
            url: url,
            failOnStatusCode: false,
        }).as("childSitemapPath").then(response => {
            if (response.status !== 200) {
                    ????

            }
        })
    })
})
})

已尝试但未解决的方案

  • 查找过Cypress失败后继续执行测试的相关方案
  • 查找过测试站点地图链接时遇到429限流状态码的解决方案

解决方案

1. 修复父级站点地图请求的错误收集

首先修正代码中的变量名错误,改用cy.wrap().each()遍历确保异步请求顺序执行,同时收集父级站点地图的失效链接:

before(function () {
    cy.fixture('sitemaps.json').then((data) => {
        cy.wrap(data).each((item) => {
            cy.log(item.url)
            const fullUrl = Cypress.config().baseUrl + item.url
            cy.request({
                url: fullUrl,
                failOnStatusCode: false,
                headers: {
                    "Content-Type": "text/xml; charset=utf-8",
                    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
                },
            }).then((responseParent) => {
                // 收集父级站点地图的失效链接
                if (responseParent.status !== 200) {
                    failed.push({
                        url: fullUrl,
                        status: responseParent.status,
                        type: '父级站点地图'
                    })
                }
                // 提取子URL并合并(避免覆盖原有urls数组)
                const childUrls = Cypress.$(responseParent.body)
                    .find("loc")
                    .toArray()
                    .map((el) => el.innerText)
                urls = [...urls, ...childUrls]
            })
        })
    })
})

2. 收集子URL失效链接并统一断言

在测试用例中同样用cy.wrap().each()遍历URL,收集所有失效链接后统一验证,最后标记测试失败:

it("Should successfully load each url in the sitemap", () => {
    cy.wrap(urls).each((url) => {
        cy.request({
            method: 'HEAD',
            url: url,
            failOnStatusCode: false,
        }).then(response => {
            if (response.status !== 200) {
                failed.push({
                    url: url,
                    status: response.status,
                    type: '站点地图子链接'
                })
            }
        })
    }).then(() => {
        // 所有请求完成后统一检查结果
        if (failed.length > 0) {
            // 打印所有失效链接详情到日志
            cy.log('发现失效链接:')
            failed.forEach(item => {
                cy.log(`${item.type} - ${item.url}:状态码${item.status}`)
            })
            // 抛出错误标记测试失败
            throw new Error(`共发现${failed.length}个失效链接,详情见日志`)
        }
    })
})

3. 额外优化:解决429限流问题

如果遇到429状态码,可通过以下方式优化:

  • 在cy.request后添加cy.wait(100)(根据实际情况调整延迟时长)
  • 在cypress.config.js中配置请求拦截器,自动重试429请求

内容的提问来源于stack exchange,提问作者user3095223

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:55:11