You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Postman/Node.js中POST上传文件前随机重命名方法问询

解决方案:Postman/Newman上传文件自动重命名并兼容团队运行

我来帮你搞定这个文件重命名+团队共享集合的问题,之前做自动化测试时正好踩过类似的坑,分享下实操步骤:

1. 编写前置请求脚本(Prerequest Script)

在你的集合请求的prerequest脚本里添加以下代码,它会自动复制原文件并重命名为带时间戳的新文件,同时把新路径存为环境变量:

// 导入Node.js文件处理模块
const fs = require('fs');
const path = require('path');

// 从环境变量获取原文件路径(方便团队成员自定义)
const originalFilePath = pm.environment.get('originalFilePath');
if (!originalFilePath) {
    pm.expect.fail('请先在环境变量中设置originalFilePath,指向你的test.docx文件路径');
}

// 生成带时间戳的新文件名
const fileBaseName = path.basename(originalFilePath, path.extname(originalFilePath));
const fileExt = path.extname(originalFilePath);
const newFileName = `${fileBaseName}_${Date.now()}${fileExt}`;

// 生成临时文件路径(和原文件同目录)
const tempDir = path.dirname(originalFilePath);
const tempFilePath = path.join(tempDir, newFileName);

// 复制原文件到临时路径
fs.copyFileSync(originalFilePath, tempFilePath);

// 将临时路径存入环境变量,供后续请求使用
pm.environment.set('tempFilePath', tempFilePath);

2. 修改集合JSON中的文件引用

把你提供的JSON里request.body.formdata中的document项,替换成引用环境变量的版本,这样请求会自动使用脚本生成的重命名文件:

{
  "key": "document",
  "value": "{{tempFilePath}}",
  "description": "",
  "type": "file",
  "src": "{{tempFilePath}}"
}

3. 添加测试后清理脚本(可选但推荐)

test脚本末尾加上清理代码,避免本地积累大量临时文件:

// 测试完成后删除临时文件
const tempFilePath = pm.environment.get('tempFilePath');
if (tempFilePath && fs.existsSync(tempFilePath)) {
    fs.unlinkSync(tempFilePath);
    pm.environment.unset('tempFilePath');
}

4. 团队共享的兼容性设置

为了让同事能直接运行集合,建议做以下优化:

  • 使用相对路径:把测试文件(test.docx)放在集合文件同目录的files文件夹下,比如./files/test.docx,然后让同事在环境变量中把originalFilePath设为这个相对路径。
  • Newman运行提示:同事运行时可以用命令:
    newman run your-collection.json -e your-environment.json
    
    如果用相对路径,确保Newman运行时的工作目录是集合文件所在目录。

修改后的完整请求片段(关键部分)

这里是你提供的JSON中修改后的核心部分:

"request": {
  "auth": {
    "type": "bearer",
    "bearer": [ { "key": "token", "value": "", "type": "string" } ]
  },
  "method": "POST",
  "header": [
    { "key": "Authorization", "value": "{{token}}" },
    { "key": "Content-Type", "value": "application/x-www-form-urlencoded" }
  ],
  "body": {
    "mode": "formdata",
    "formdata": [
      {
        "key": "document",
        "value": "{{tempFilePath}}",
        "description": "",
        "type": "file",
        "src": "{{tempFilePath}}"
      },
      // 其他formdata项保持不变...
    ]
  },
  // 其他request配置保持不变...
}

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

火山引擎 最新活动