一、工具环境准备(这几个工具需要提前装好)
1.postman: https://www.postman.com/downloads/
2.jmeter:https://jmeter.apache.org/download_jmeter.cgi
3.JDK:我下载的是jdk-16,下载地址:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
4.maven:构建工具 https://maven.apache.org/download.cgi
5.git:https://git-scm.com/downloads
二、把代码下载到本地,找个自己新建的目录
1、把代码下载到本地
$ git clone https://github.com/Loadium/postman2jmx.git
2、构建项目(需要下载并配置好maven)
$ cd postman2jmx
$ mvn package
2.1 mac电脑可以使用安装maven
brew install maven
2.2mac电脑如果没有安装brew,可以使用以下命令快速安装
/bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”
3、构建项目之后,进入到 target/Postman2Jmx 的目录下,转换的运行文件就是 Postman2Jmx.jar
cd target/Postman2Jmx
4、导出 postman json 的文件,要选择 Collection v2.1
5、输入转换格式的命令,java -jar Postman2Jmx.jar +导出的postmen文件名 +导出的jmeter文件名
java -jar Postman2Jmx.jar 11_collection.json my_file.jmx
6、导出的文件在 postman2jmx\target\Postman2Jmx 目录下,使用jmeter打开就可以了。
Ps:https://blog.csdn.net/m0_50287279/article/details/139304837
三、实现工具可视化
前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSON to JMX Converter</title>
</head>
<body>
<h1>Upload JSON to Convert to JMX</h1>
<!-- 上传表单 -->
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" id="jsonFile" name="jsonFile" accept=".json" required>
<button type="submit">Upload and Convert</button>
</form>
<!-- 下载链接 -->
<a id="downloadLink" style="display:none;">Download JMX</a>
<script>
document.getElementById('uploadForm').addEventListener('submit', async (e) => {
e.preventDefault(); // 阻止默认的表单提交行为
const formData = new FormData(); // 创建FormData对象
const fileInput = document.getElementById('jsonFile'); // 获取文件输入元素
formData.append('jsonFile', fileInput.files[0]); // 将文件添加到FormData对象
// 使用fetch API发送POST请求,将文件上传到服务器
const response = await fetch('/upload', {
method: 'POST',
body: formData
});
if (response.ok) {
const blob = await response.blob(); // 获取响应的二进制数据
const url = window.URL.createObjectURL(blob); // 创建URL对象
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = url; // 设置下载链接的href属性
const originalFileName = fileInput.files[0].name.replace('.json', '.jmx'); // 获取上传文件的原始名称并替换扩展名
downloadLink.download = originalFileName; // 设置下载文件的名称
downloadLink.style.display = 'block'; // 显示下载链接
downloadLink.innerText = 'Download Converted JMX'; // 设置下载链接的文本
} else {
alert('Failed to convert JSON to JMX'); // 上传失败时显示错误信息
}
});
</script>
</body>
</html>
后端代码 (Node.js + Express)
const express = require('express');
const fileUpload = require('express-fileupload');
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');
const yaml = require('js-yaml');
const app = express();
const port = 3000;
const statsFilePath = path.join(__dirname, 'stats.yml');
// 初始化统计数据
let stats = { uploadCount: 0, downloadCount: 0 };
// 尝试加载已有的统计数据
try {
stats = yaml.load(fs.readFileSync(statsFilePath, 'utf8')) || stats;
} catch (err) {
console.error('Error loading stats file:', err);
}
// 使用express-fileupload中间件处理文件上传
app.use(fileUpload());
app.post('/upload', (req, res) => {
if (!req.files || !req.files.jsonFile) {
return res.status(400).send('No file uploaded'); // 如果没有上传文件,则返回错误
}
const jsonFile = req.files.jsonFile; // 获取上传的文件对象
const uploadDir = path.join(__dirname, 'uploads'); // 上传目录路径
const jsonFilePath = path.join(uploadDir, jsonFile.name); // 上传的JSON文件路径
const jmxFileName = jsonFile.name.replace('.json', '.jmx'); // 生成的JMX文件名称
const jmxFilePath = path.join(uploadDir, jmxFileName); // 生成的JMX文件路径
// 确保上传目录存在
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir);
}
// 保存上传的JSON文件到服务器
jsonFile.mv(jsonFilePath, (err) => {
if (err) {
return res.status(500).send(err); // 如果文件保存失败,返回错误
}
// 更新上传计数
stats.uploadCount++;
// 执行Java命令进行文件转换
const command = `java -jar Postman2Jmx.jar ${jsonFilePath} ${jmxFilePath}`;
exec(command, (err, stdout, stderr) => {
if (err) {
console.error(stderr); // 打印错误信息
return res.status(500).send('Error converting JSON to JMX'); // 如果转换失败,返回错误
}
// 将转换后的JMX文件发送到客户端
res.download(jmxFilePath, jmxFileName, (err) => {
if (err) {
return res.status(500).send(err); // 如果下载失败,返回错误
}
// 更新下载计数
stats.downloadCount++;
// 下载完成后删除上传的JSON文件和转换后的JMX文件
fs.unlink(jsonFilePath, (err) => {
if (err) console.error(err); // 打印删除文件时的错误信息
});
fs.unlink(jmxFilePath, (err) => {
if (err) console.error(err); // 打印删除文件时的错误信息
});
// 持久化统计数据到 YAML 文件
persistStats();
});
});
});
});
// 提供统计数据的端点
app.get('/stats', (req, res) => {
res.json(stats);
});
// 持久化统计数据到 YAML 文件
function persistStats() {
try {
fs.writeFileSync(statsFilePath, yaml.dump(stats), 'utf8');
} catch (err) {
console.error('Error writing stats file:', err);
}
}
// 启动服务器
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
文件结构
project-root/
│
├── uploads/ # 临时存储上传文件的目录
├── app.js # Node.js服务器脚本
└── index.html # 前端HTML文件
运行项目
安装依赖
:
npm install express express-fileupload
创建目录结构
:
mkdir uploads
确保
Postman2Jmx.jar 文件位于项目根目录。
运行服务器
:
node app.js
打开浏览器访问
: http://localhost:3000,上传 .json 文件并下载转换后的 .jmx 文件。
通过这些详细的注释和调整,上传的 .json 文件将会被转换为同名的 .jmx 文件,并覆盖任何同名的现有文件。在前端页面中,用户可以下载最新生成的 .jmx 文件。