
在api测试自动化中,经常需要从复杂的json响应中提取特定数据。postman提供了强大的脚本能力,允许用户通过javascript处理响应数据。本节将指导您如何遍历一个json数组,并根据数组中元素的特定属性(例如布尔值)来决定是否将其某个字段存储为postman全局变量。
假设您从一个API端点获取到以下JSON响应,其中包含一个users数组,每个用户对象都有一个id和一个isRetail布尔属性。您的目标是遍历这个users数组:如果isRetail为true,则将其id存储到名为UserId的全局变量中;如果isRetail为false,则将其id存储到名为orgUserId的全局变量中。
{
    "status": 200,
    "data": {
        "users": [
            {
                "id": 95,                
                "isRetail": true
            },
            {
                "id": 118,               
                "isRetail": false
            }
        ],
        "pagination": {
            "pageNumber": 1,
            "pageSize": 25,
            "totalCount": 2,
            "totalPages": 1,
            "isFirst": true,
            "isLast": true,
            "totalCountOnPage": 2
        }
    }
}在实现上述逻辑时,初学者可能会遇到一些常见的脚本错误,导致代码无法正常运行,例如 TypeError: Cannot read properties of undefined (reading 'isRetail')。这通常是由于循环边界条件不正确或数据类型比较不准确造成的。
以下是修正后的Postman测试脚本,它解决了这些常见问题:
// 解析API响应为JSON对象
const responseJson = pm.response.json();
// 确保响应中存在data.users数组
if (responseJson && responseJson.data && Array.isArray(responseJson.data.users)) {
    const usersArray = responseJson.data.users;
    const usersLength = usersArray.length;
    // 遍历users数组
    for (let i = 0; i < usersLength; i++) {
        const currentUser = usersArray[i]; // 获取当前用户对象
        // 确保当前用户对象和isRetail属性存在
        if (currentUser && typeof currentUser.isRetail === 'boolean') {
            const isRetailUser = currentUser.isRetail;
            // 根据isRetail的布尔值设置全局变量
            if (isRetailUser === true) {
                pm.globals.set("UserId", currentUser.id);
                console.log(`设置全局变量 UserId 为: ${currentUser.id}`);
            } else if (isRetailUser === false) {
                pm.globals.set("orgUserId", currentUser.id);
                console.log(`设置全局变量 orgUserId 为: ${currentUser.id}`);
            }
        } else {
            console.warn(`跳过无效的用户对象或isRetail属性在索引 ${i} 处缺失.`);
        }
    }
} else {
    console.error("API响应中缺少预期的 'data.users' 数组或其格式不正确.");
}循环边界条件修正:for (let i = 0; i < usersLength; i++)
数据类型精确比较:if (isRetailUser === true) 和 else if (isRetailUser === false)
 
                        Easily find JSON paths within JSON objects using our intuitive Json Path Finder
 30
30
                             
                    变量声明规范:使用 const 和 let
健壮性增强:空值和类型检查
通过遵循这些指导原则和最佳实践,您可以在Postman中编写出高效、准确且健壮的脚本,以自动化您的API测试流程。
以上就是Postman脚本:迭代JSON响应并根据条件动态设置全局变量的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                 
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                             
                                
                                 收藏
收藏
                                                                            Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号