实践:使用Node.js构建Postman JSON接口文件转换为JMeter JMX文件的工具

一、工具环境准备(这几个工具需要提前装好)

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 文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值