Cypress中如何向JSON文件的数组追加新对象
实现方法
不要用「直接往文件末尾拼接字符串」的方式操作,会破坏JSON的数组结构,导致文件无法正常解析。正确的通用逻辑不管用什么编程语言都一致,共3步:
- 读取
demoJ.json的全量内容,把JSON格式的字符串解析为程序可操作的数组对象 - 将测试生成的新用户凭证对象,追加到解析后的数组中
- 把更新后的数组重新序列化为带缩进的合法JSON字符串,全量覆盖写入原文件
下面给两种测试场景最常用的语言实现,都是用语言内置模块,不需要额外安装第三方依赖:
Node.js 实现(适合前端/接口自动化测试场景)
const fs = require('fs/promises'); const path = require('path'); // 替换为你本地demoJ.json的实际存放路径 const USER_STORE_PATH = path.join(__dirname, 'demoJ.json'); async function addTestUser(newUserInfo) { // 读取解析现有用户数据 const rawContent = await fs.readFile(USER_STORE_PATH, 'utf-8'); const userArr = JSON.parse(rawContent); // 追加新用户 userArr.push(newUserInfo); // 格式化写回,2空格缩进和现有文件格式保持一致 await fs.writeFile(USER_STORE_PATH, JSON.stringify(userArr, null, 2), 'utf-8'); } // 测试场景调用示例 const newTestUser = { name: "autoTest147", email: "autoTest147@mail.com", pass: "test_pass_123456" }; addTestUser(newTestUser).catch(err => { console.error('写入测试用户失败:', err); });
Python 实现(适合后端/自动化测试场景)
import json import os # 替换为你本地demoJ.json的实际存放路径 USER_STORE_PATH = os.path.join(os.path.dirname(__file__), "demoJ.json") def add_test_user(new_user_info: dict): # 读取解析现有用户数据 with open(USER_STORE_PATH, "r", encoding="utf-8") as f: user_arr = json.load(f) # 追加新用户 user_arr.append(new_user_info) # 格式化写回,避免中文乱码,保持2空格缩进 with open(USER_STORE_PATH, "w", encoding="utf-8") as f: json.dump(user_arr, f, ensure_ascii=False, indent=2) # 测试场景调用示例 if __name__ == "__main__": new_test_user = { "name": "autoTest147", "email": "autoTest147@mail.com", "pass": "test_pass_123456" } add_test_user(new_test_user)
注意事项:
- 如果你的测试用例是并发执行的,需要给文件读写操作加互斥锁,避免多进程同时写入导致文件内容损坏
- 写入前可以给新用户对象加字段校验,避免漏写name/email/pass字段导致后续测试读取异常
- 不要随意修改JSON序列化的缩进配置,否则文件会变成无换行的单行压缩格式,不方便手动排查问题
内容的提问来源于stack exchange,提问作者olezya
相关产品推荐
相关产品推荐

