求助:在无浏览器环境下压缩Cypress报告文件夹并上传至Xray
Node.js 无浏览器环境压缩文件夹方案(适配JIRA Xray报告上传)
直接用archiver这个Node.js库就能解决,它专门用于服务器/无浏览器环境下生成zip、tar等压缩包,支持文件夹递归压缩,步骤如下:
1. 安装依赖
在项目目录执行:
npm install archiver --save-dev
2. 编写压缩脚本
在项目根目录新建compress-report.js,填入以下代码(根据你的实际报告文件夹路径调整):
const fs = require('fs'); const archiver = require('archiver'); // 配置路径:替换成你的cucumber-html报告文件夹路径,压缩包输出路径 const sourceDir = './cucumber-html-report'; // 你的报告文件夹 const outputPath = './cucumber-html-report.zip'; // 压缩后保存的文件,和报告同目录 // 创建输出流 const output = fs.createWriteStream(outputPath); const archive = archiver('zip', { zlib: { level: 9 } // 压缩等级,9为最高压缩率 }); // 监听压缩完成事件 output.on('close', () => { console.log(`压缩完成,总大小:${archive.pointer()} bytes`); // 这里可直接调用你的JIRA上传接口,上传outputPath对应的文件 }); // 监听错误事件 archive.on('error', (err) => { throw err; }); // 关联输出流,添加要压缩的文件夹,启动压缩 archive.pipe(output); // false表示不保留外层文件夹名称,直接将文件夹内内容放入zip;若要保留结构,改成文件夹名如'cucumber-html-report' archive.directory(sourceDir, false); archive.finalize();
3. 运行脚本
在项目目录执行:
node compress-report.js
关键注意点
- 确保
sourceDir路径正确,建议用绝对路径避免相对路径问题 - 如果需要在压缩包内保留原文件夹结构,把
archive.directory(sourceDir, false)的第二个参数改为目标文件夹名称 - 压缩完成的回调
output.on('close')是调用上传接口的最佳时机,确保压缩文件已完全生成
内容的提问来源于stack exchange,提问作者Sheetal Akhud
相关产品推荐
相关产品推荐

