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

使用Axios+NightwatchJS测试URL时无法输出失败URL的问题

解决NightwatchJS+Axios测试URL状态码时失败不显示对应URL的问题

我使用NightwatchJS结合Axios包,测试大量URL是否返回正确的状态码,初始代码如下:

var axios = require('axios');

module.exports = {
    '@tags': ['siteMapTesting'],
    'Sitemap test for Parkers pages': async (browser) => {
        var result = await alasql.promise('select URL from xlsx("./testUrls.xlsx",{sheetid:"QA-245-xmlSiteMap"})');
        var xcelData = result.map(item => {
            return item.URL;
        });
        async function siteMapUrlsTestArr(item) {
            var response = await axios.get(browser.launch_url + item);
            console.log('Sitemap test URL =', (browser.launch_url + item + '  status code = ' + response.status));
            browser.verify.equal(response.status, 200);
        }
        for (let index = 0; index < 1000; index++) {
            var xmlTestUrl = xcelData[Math.floor(Math.random()*xcelData.length)];
            await siteMapUrlsTestArr(xmlTestUrl);
        }
    },
    'Closing the browser': function (browser)  {
        browser.browserEnd();
    },
};

当URL返回200时代码运行正常,但测试失败时,错误信息仅提示状态码错误,无法得知具体是哪个URL出问题:

Site Map/ QA 245 Xml Site Map] Sitemap test for Parkers pages (556ms)
AxiosError: Request failed with status code 404
at BrotliDecompress.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)


TEST FAILURE: 1 error during execution; 0 assertions failed, 1 passed (4.029s)

✖ siteMap/QA-245-xmlSiteMap – Sitemap test for Parkers pages (556ms)

AxiosError: Request failed with status code 404
at BrotliDecompress.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

SKIPPED:

  • Closing the browser

我曾尝试修改代码手动抛出错误,但仍无法在错误中显示对应URL:

var alasql = require('alasql');
var axios = require('axios');

module.exports = {
    '@tags': ['siteMapTesting'],
    'Sitemap test for Parkers pages': async (browser) => {
        var result = await alasql.promise('select URL from xlsx("./testUrls.xlsx",{sheetid:"QA-245-xmlSiteMap"})');
        var xcelData = result.map(item => {
            return item.URL;
        });
        async function siteMapUrlsTestArr(item) {
            var response = await axios.get(browser.launch_url + item);
            if (response.status !== 200) {
                throw new Error('Sitemap fail URL =', (browser.launch_url + item + '  status code = ' + response.status));
            }
        }
        for (let index = 0; index < 5; index++) {
            var xmlTestUrl = xcelData[Math.floor(Math.random()*xcelData.length)];
            await siteMapUrlsTestArr(xmlTestUrl);
        }
    },
    'Closing the browser': function (browser)  {
        browser.browserEnd();
    },
};

解决方案

通过捕获Axios请求的错误并自定义错误信息,同时保留断言的失败标记,修改后的代码如下:

var alasql = require('alasql');
var axios = require('axios');

module.exports = {
    '@tags': ['siteMapTesting'],
    'Sitemap test for Parkers pages': async (browser) => {
        var result = await alasql.promise('select URL from xlsx("./testUrls.xlsx",{sheetid:"QA-245-xmlSiteMap"})');
        var xcelData = result.map(item => item.URL);
        
        async function siteMapUrlsTestArr(item) {
            const fullUrl = browser.launch_url + item;
            try {
                const response = await axios.get(fullUrl);
                console.log(`Sitemap test URL = ${fullUrl}  status code = ${response.status}`);
                // 执行断言,自定义失败提示信息
                browser.verify.equal(response.status, 200, `URL ${fullUrl} 返回状态码${response.status},预期200`);
            } catch (error) {
                // 打印失败详情到控制台
                let errorMsg = `URL ${fullUrl} 测试失败: `;
                if (error.response) {
                    // Axios请求成功但返回非2xx状态码
                    errorMsg += `状态码${error.response.status}`;
                    console.log(`Sitemap fail URL = ${fullUrl}  status code = ${error.response.status}`);
                } else {
                    // 请求发起失败或断言失败
                    errorMsg += error.message;
                }
                // 抛出带URL的错误,让Nightwatch标记测试失败
                throw new Error(errorMsg);
            }
        }

        for (let index = 0; index < 1000; index++) {
            const xmlTestUrl = xcelData[Math.floor(Math.random()*xcelData.length)];
            await siteMapUrlsTestArr(xmlTestUrl);
        }
    },
    'Closing the browser': function (browser)  {
        browser.browserEnd();
    },
};

关键修改说明

  1. 用try/catch包裹整个请求和断言逻辑:捕获Axios的请求错误(如404、500)和Nightwatch断言的失败错误
  2. 在错误信息中注入完整URL:无论是哪种错误,都能在错误日志中看到具体的问题URL
  3. 自定义断言提示信息:browser.verify.equal的第三个参数直接添加URL相关提示,断言失败时直观显示问题URL
  4. 保留控制台打印:失败时仍会在控制台输出URL和状态码,方便快速排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:23:15