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

如何在Postman中不区分大小写检查updatedBy.name字段的升序排序?

问题:验证接口数据按updatedBy.name不区分大小写升序排序的正确性

需求场景

需要验证接口返回的5000+条数据是否按updatedBy.name字段不区分大小写升序排序,但现有测试逻辑遇到大写字母或null值时会失败。

响应体示例

{
    "data": [
        {
            "id": 1117,
            "acceptance": {
                "externalId": "33232"
            },
            "statusIdFrom": {
                "id": 1,
                "name": "Create"
            },
            "statusIdTo": {
                "id": 1,
                "name": "Create"
            },
            "createdAt": "2021-11-26T06:20:08.717Z",
            "updatedBy": {
                "id": 15,
                "name": "fabric",
                "fullname": "fabric",
                "departmentId": 1
            }
        },
        {
            "id": 1118,
            "acceptance": {
                "externalId": "33234"
            },
            "statusIdFrom": {
                "id": 1,
                "name": "Create"
            },
            "statusIdTo": {
                "id": 1,
                "name": "Create"
            },
            "createdAt": "2021-11-26T07:57:34.108Z",
            "updatedBy": {
                "id": 15,
                "name": "production",
                "fullname": "production",
                "departmentId": 1
            }
        },
        {
            "id": 1119,
            "acceptance": {
                "externalId": "33236"
            },
            "statusIdFrom": {
                "id": 1,
                "name": "Create"
            },
            "statusIdTo": {
                "id": 11,
                "name": "Delete"
            },
            "createdAt": "2021-11-26T07:57:35.238Z",
            "updatedBy": {
                "id": 15,
                "name": "warehouse",
                "fullname": "warehouse",
                "departmentId": 1
            }
        }
    ],
    "quantity": 5449
}

现有测试代码的问题

方案1(Lodash默认排序)

以下代码仅在名称全小写时有效,遇到大写字母会失败——因为Lodash默认排序是区分大小写的(大写字母ASCII值小于小写,会排在前面):

let resp = pm.response.json();
console.log(resp.data);

var _ = require('lodash');
let expectedSortedOrder = _.orderBy(resp.data, ['updatedBy.name'],['asc']);
console.log(expectedSortedOrder);
    

pm.test('sort column', () => {
    pm.expect(resp.data).to.eql(expectedSortedOrder);
});

方案2(手动校验)

以下代码遇到updatedBy或name为null时会直接崩溃,因为没有处理空值的情况:

pm.test("sort column", () => {
    const response = pm.response.json();

    // Extract all ids in an array
    const art = response.data.map(item => item.updatedBy.name);
    
    // Check that all are ascending
    function isAscending(a) {
        return a.every((x, i) => {
            return i === 0 || x >= a[i-1];
        });
    }
    pm.expect(isAscending(art)).to.be.true;
});

可行解决方法

方法1:改进Lodash排序,兼容空值和不区分大小写

通过自定义迭代器处理空值,并将名称统一转小写后排序:

let resp = pm.response.json();
var _ = require('lodash');

// 自定义排序规则:处理空值,转小写后排序,空值默认排在最前
let expectedSortedOrder = _.orderBy(resp.data, [item => {
    // 可选:若要将空值排在最后,可把''换成'zzzzz'这类大值
    return item?.updatedBy?.name?.toLowerCase() || '';
}], ['asc']);

pm.test('数据按updatedBy.name不区分大小写升序排序', () => {
    pm.expect(resp.data).to.eql(expectedSortedOrder);
});

方法2:手动校验排序逻辑,兼容空值和大小写

遍历数据逐个比较,明确处理空值场景,同时做不区分大小写的比较:

pm.test("数据按updatedBy.name不区分大小写升序排序", () => {
    const response = pm.response.json();
    const data = response.data;

    const isSortedAscending = data.every((currentItem, index) => {
        if (index === 0) return true; // 第一项无需比较
        
        const prevName = data[index-1]?.updatedBy?.name;
        const currentName = currentItem?.updatedBy?.name;

        // 空值处理规则:null/undefined排在最前面
        if (prevName == null && currentName == null) return true;
        if (prevName == null) return true;
        if (currentName == null) return false;

        // 不区分大小写比较
        return prevName.toLowerCase() <= currentName.toLowerCase();
    });

    pm.expect(isSortedAscending).to.be.true;
});

说明

  • 两种方法都解决了区分大小写排序失败和空值崩溃的问题
  • 可根据需求调整空值的排序位置(比如把空值排在最后,只需修改对应逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:54:55