JMeter与大模型融合应用之构建AI智能体:评审性能测试脚本

一、引言

随着DevOps和持续测试的普及,性能测试已成为软件开发生命周期中不可或缺的环节。Apache JMeter作为最流行的开源性能测试工具之一,被广泛应用于各种性能测试场景。然而,编写高质量的JMeter测试脚本需要丰富的经验和专业知识。本文将探讨如何利用AI技术构建智能体,自动评审JMeter性能测试脚本,提高测试脚本的质量和可靠性。

二、JMeter脚本评审的挑战

2.1 人工评审的局限性

传统上,JMeter脚本评审主要依赖人工完成,这种方式存在以下问题:
● 评审效率低下,难以适应敏捷开发节奏
● 评审结果受评审者经验影响较大
● 难以保证评审标准的一致性
● 容易遗漏潜在的性能测试陷阱

2.2 常见脚本问题类型

● 配置错误:线程组设置不当、超时配置不合理等
● 逻辑缺陷:控制器使用错误、变量作用域问题等
● 性能反模式:缺少思考时间、未使用连接池等
● 可维护性问题:硬编码值、缺乏模块化等

三、AI智能体架构设计

3.1 系统架构

在这里插入图片描述

3.2 核心组件

  1. 脚本解析:将JMX文件进行解析,解释完成以后跟提供的prompt进行结合生成最终待评审结果内容。
  2. 格式校验:针对JMX文件考虑到各种特殊字符的存在,在生成JSON格式的时候会存在各种问题,所以需要对格式进行统一校验,符合JSON格式。
  3. DeepSeek:作为MOE的其中之一角色:性能测试专家,针对编写的性能测试脚本进行评审,给出亮点和缺点。
  4. 结果反馈:针对评审的结果进行反馈供用户进行修改。

四、关键技术实现

4.1 格式校验

package org.apache.jmeter.sptp.util;import org.json.JSONObject;public class JsonEscapeUtil {public static String escapeForJson(String input) {if (input == null) {return null;}try {return JSONObject.quote(input);} catch (Exception e) {return customEscape(input);}}private static String customEscape(String input) {StringBuilder sb = new StringBuilder();for (int i = 0; i < input.length(); i++) {char c = input.charAt(i);switch (c) {case '"':sb.append("\\\"");break;case '\\':sb.append("\\\\");break;case '/':sb.append("\\/");break;case '\b':sb.append("\\b");break;case '\f':sb.append("\\f");break;case '\n':sb.append("\\n");break;case '\r':sb.append("\\r");break;case '\t':sb.append("\\t");break;default:if (c <= '\u001F') {sb.append(String.format("\\u%04x", (int) c));} else {sb.append(c);}}}return sb.toString();}
}

4.2 DeepSeek模型调用

package org.apache.jmeter.sptp.business;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.jmeter.sptp.util.JsonEscapeUtil;import static org.apache.jmeter.sptp.SPTPInfo.baseUrl;
import static org.apache.jmeter.sptp.SPTPInfo.model;
import static org.apache.jmeter.sptp.util.JsonEscapeUtil.escapeForJson;public class Qwen {private final Logger log = LoggerFactory.getLogger(this.getClass());public String QwenAI(String prompt){String content = "你是一位性能测试专家,擅长编写利用JMeter进行性能测试脚本编写以及评审其他人编写的性能测试脚本,请针对给出的性能测试脚本进行评审,并且按照亮点和缺点进行罗列,并且计算亮点和缺点的个数,针对缺点,请给出详细的改进措施供测试人员进行修改,罗列的要求如【】所示,样例如下:亮点:1.利用BeanShell进行变成 2.使用逻辑控制器对事务进行逻辑控制 缺点:1.输入的参数没有进行参数化,例如id为adcd,改进建议:id使用csv文件参数化 2.部分路径写的是绝对路径,没有变成相对路径,例如C:/2/text.txt,改进建议:使用相对路径 总体亮点:2个,缺点2个 输出总体亮点和缺点以后输出结束,不需要再输出任何内容,不需要单独输出额外的改进措施,改进措施已经在缺点后面的改进建议中描述,具体脚本内容如下";String result = "";String testString = content + prompt;
//        log.info(content + prompt);String escapedJson = escapeForJson(testString);
//        log.info(escapedJson);String requestBody = "{\n" +"    \"model\": \" " + model + "\",\n" +"    \"messages\": [\n" +"        {\n" +"            \"role\": \"user\",\n" +"            \"content\": " + escapedJson + " \n" +"        }\n" +"    ]\n" +"}";
//        log.info(requestBody);HttpResponse execute = HttpRequest.post(baseUrl).header("Accept", "application/json").body(requestBody).execute();String body = execute.body();JSONObject jsonObject = JSONObject.parseObject(body);String choices = jsonObject.getString("choices");JSONArray choicesArray = JSONObject.parseArray(choices);String o = choicesArray.getString(0);JSONObject json = JSONObject.parseObject(o);String message = json.getString("message");JSONObject jsonMessage = JSONObject.parseObject(message);result = jsonMessage.getString("content");return result;}}

4.3 结果反馈展示

package org.apache.jmeter.sptp.gui;import org.apache.jmeter.sptp.business.Qwen;
import org.apache.jmeter.sptp.util.GetJMXInfo;
import org.apache.jmeter.util.JMeterUtils;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;import static org.apache.jmeter.JMeter.fileJMXPath;public class ChatWindow extends JFrame {private JTextArea chatArea;private JButton sendButton;private JButton clearButton;public ChatWindow() {super("AI脚本评审智能体");setIconImage(JMeterUtils.getImage("AI.png").getImage());setLayout(new BorderLayout());setSize(500, 400);setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// 创建聊天区域chatArea = new JTextArea();chatArea.setEditable(false);chatArea.setLineWrap(true); // 设置自动换行chatArea.setWrapStyleWord(true); // 设置单词级别的换行JScrollPane scrollPane = new JScrollPane(chatArea);add(scrollPane, BorderLayout.CENTER);// 创建发送按钮sendButton = new JButton("发送内容");sendButton.addActionListener(new SendActionListener());// 创建清空按钮clearButton = new JButton("清空内容");clearButton.addActionListener(new ClearActionListener());// 创建按钮面板JPanel buttonPanel = new JPanel();buttonPanel.add(sendButton);buttonPanel.add(clearButton);// 创建输入面板JPanel inputPanel = new JPanel();inputPanel.add(buttonPanel);add(inputPanel, BorderLayout.SOUTH);// 设置窗口居中显示setLocationRelativeTo(null);setVisible(true);}private class SendActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String filePath = fileJMXPath;String jmxContent = GetJMXInfo.readContent(filePath);new SwingWorker<String, Void>() {@Overrideprotected String doInBackground() throws Exception {setTitle("AI脚本评审智能体正在思考中...");setIconImage(JMeterUtils.getImage("thinking.png").getImage());Qwen qwen = new Qwen();return qwen.QwenAI(jmxContent);}@Overrideprotected void done() {try {String result = get();chatArea.append("大模型:" + result + "\n");setTitle("AI脚本评审智能体");setIconImage(JMeterUtils.getImage("AI.png").getImage());} catch (Exception ex) {ex.printStackTrace();}}}.execute();setTitle("AI脚本评审智能体");setIconImage(JMeterUtils.getImage("AI.png").getImage());}}private class ClearActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {chatArea.setText("");}}
}

五、效果展示
效果展示如下:
在这里插入图片描述

五、结论

通过构建AI智能体来自动评审JMeter性能测试脚本,可以显著提高脚本质量,降低人为错误,并确保性能测试的可靠性。这种结合规则引擎和机器学习的方法,不仅适用于JMeter,也可推广到其他测试工具和场景。随着AI技术的不断发展,智能评审将成为性能测试工程中的标准实践,为软件质量保障提供强有力的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93617.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93617.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93617.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s 和 Docker的区别

一、各自诞生背景——为什么需要两个东西Docker&#xff08;2013&#xff0c;Docker Inc.&#xff09; • 目的&#xff1a;解决“我的代码在你机器跑不起来”的经典环境问题。 • 做法&#xff1a;用 Linux 内核的 cgroup/namespace 做轻量隔离&#xff0c;把“应用 依赖”打…

10.0 UML的介绍以及VisualStudio中查看类图

本文介绍UML图的含义、以及如何在VisualStudio中查看类图。 一、UML图介绍 UML(Unified Modeling Language,统一建模语言)是一种标准化的建模语言,用于可视化、规范、构建和记录软件系统的各个方面的图表工具。 UML图分为结构图和行为图两大类: 结构图‌…

【Virtual Globe 渲染技术笔记】6 着色

着色&#xff08;Shading&#xff09; 曲面细分只是地球渲染的第一步。接下来是着色——通过模拟光线与材质的相互作用&#xff0c;计算每个像素的最终颜色。本节先回顾基础的光照与纹理映射&#xff0c;再讲解虚拟地球特有的经纬网格和夜景灯光效果。6.1 光照&#xff08;Ligh…

OpenCV Python——图像拼接(一)(图像拼接原理、基础知识、单应性矩阵 + 图像变换 + 拼接)

1 图像拼接基础知识1.1 特征匹配 原理及代码示例1.2 单应性矩阵 原理及代码示例2 图像拼接&#xff08;一&#xff09;&#xff08;直接拼接&#xff09;3 图像拼接&#xff08;二&#xff09;&#xff08;单应性矩阵 图像变换 拼接&#xff09;3.1 单应性矩阵函数3.2 拼接函…

Git 中切换到指定 tag

在 Git 中切换到指定 tag&#xff08;比如 v1.22.1&#xff09;的正确做法如下&#xff1a;1️⃣ 查看已有的 taggit tag会列出所有可用的版本&#xff0c;比如&#xff1a;v1.21.0 v1.22.0 v1.22.1 v1.23.02️⃣ 切换到指定 taggit checkout tags/v1.22.1 -b v1.22.1解释&…

rust 从入门到精通之变量和常量

变量和常量 随着软件系统安全的重要性与日俱增, rust这门集聚高并发, 安全, 适配云环境的编程语言在市场上得到了越来越高的认可和关注。但其复杂的机制使其难以学习。且其很多特性对于其他语言是全新的&#xff0c;这加剧了学习的困难程度。教程主要针对rust基础进行讲解, 虽然…

2508C++,支持rdma通信的高性能rpc库

原文 [重磅]支持rdma通信的高性能的rpc库–yalantinglibs.coro_rpc yalantinglibs的coro_rpc是基于C20的协程的高性能的rpc库,提供了简洁易用的接口,让用户几行代码就可实现rpc通信,现在coro_rpc除了支持tcp通信之外还支持了rdma通信(ibverbs). 通过简单示例来感受一下rdma通…

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

一、为什么选 FastAPI React&#xff1f; 性能&#xff1a;FastAPI 基于 Starlette Uvicorn&#xff0c;QPS 与 Node/Go 同级&#xff0c;实测 3 倍于 Flask&#xff1b;React 虚拟 DOM 代码分割&#xff0c;首屏 < 1.2 s。效率&#xff1a;FastAPI 内置 Swagger/OpenAPI…

嵌入式硬件篇---电平转换电路

电平转换电路是电子电路中用来实现不同电压信号之间转换的关键电路&#xff0c;比如把 3.3V 的信号转换成 5V&#xff0c;或者把 5V 转换成 1.8V&#xff0c;确保不同电压的芯片、模块能正常通信。下面用通俗易懂的方式介绍几种常见的电平转换电路&#xff1a;一、电阻分压电路…

SAP ABAP IS SUPPLIED

效果 此谓词表达式用于检查过程的某个形式参数“para”是否已赋值或被请求使用。如果在调用时实际参数被赋值给了该形式参数&#xff0c;则该表达式为真。 这种关系表达式仅能在函数模块和方法中使用。而对于“para”而言&#xff0c;所有可选的形参都可以进行指定。 加上“NOT…

视频内容提取与AI总结:提升学习效率的实用方法

文章目录1、前言2、方法介绍2.1 B站视频处理方案2.2 通用视频处理方案2.3 AI内容总结3、实际效果4、使用建议5、技术发展趋势6、总结&#x1f343; 作者介绍&#xff1a;25届双非本科网络工程专业&#xff0c;阿里云专家博主&#xff0c;专注于 AI 原理、AI 应用开发、AI 产品设…

JVM 面试精选 20 题

目录1. 什么是 JVM、JDK 和 JRE&#xff1f;它们之间的关系是什么&#xff1f;2. Java 内存区域&#xff08;运行时数据区&#xff09;有哪些&#xff1f;3. 说说你对 JVM 垃圾回收机制的理解。4. 常用的垃圾回收算法有哪些&#xff1f;5. 什么是 Minor GC、Major GC 和 Full G…

CMIP6 气候模式核心特性解析

在全球气候变化研究中&#xff0c;CMIP6&#xff08;第六次耦合模式比较计划&#xff09;的气候模式是关键工具。以下从研发背景与核心能力角度&#xff0c;解析五类主流模式的技术特点与适用场景。 一、主流模式技术特性 1. CanESM5/CanESM5-1&#xff08;加拿大环境与气候变…

【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)

文章目录 一、题目介绍 1.1 题目描述 1.2 示例 二、算法设计思路 2.1 核心问题分析 2.2 斐波那契数列关系 三、流程图 解法1:递归法(自顶向下) 解法2:动态规划(自底向上) 解法3:记忆化搜索(递归优化) 解法4: 优化DP流程(推荐) 四、解法实现 五、复杂度分析对比 六、…

《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》

WebSocket作为客户端与服务器双向通信的核心载体,支撑着从在线协作、金融行情到即时通讯等各类高实时性场景。然而,网络环境的动态变化—从用户设备的Wi-Fi与蜂窝网络切换,到公共网络的临时拥塞,再到服务器的短暂重启—都可能导致WebSocket连接中断,进而引发数据传输停滞、…

医疗洁净间的“隐形助手”:富唯智能复合机器人如何重塑手术器械供应链

当手术刀片在无影灯下传递时&#xff0c;0.01mm的抓取偏差可能意味着感染风险——而富唯智能复合机器人以0.02mm的重复定位精度与99.999%无菌操作的硬实力&#xff0c;正成为高端医疗产线中替代人力的关键技术支点。一、医疗上下料的三大痛点&#xff1a;精度、洁净与连续性1.毫…

《设计模式》工厂方法模式

1.工厂方法模式&#xff08;Factory Method&#xff09;定义 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 1.1 UML图&#xff1a; 主要有4个对象&#xff1a; 抽象工厂&#xff08;Abstract Creator&#xf…

冒泡排序——简单理解和使用

阅前声明&#xff1a;如果想直接了解冒泡排序的简化思想&#xff0c;请跳至文章尾部在介绍之前&#xff0c;我们先看一个用到该功能的实战训练&#xff08;本人也是从中开始认识到冒泡排序这个函数定义&#xff09;对于小白来说&#xff0c;我的思路如下&#xff1a;1.题目中涉…

AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎

今年以来&#xff0c;人工智能 (AI) 正在进入从算力投入到云服务消耗再到商业化收入&#xff0c;最终回到算力再投入的良性循环&#xff0c;而 AI 应用的起量正是推动这一飞轮效应的关键。7 月 31 日&#xff0c;国务院常务会议审议通过了《关于深入实施 “人工智能 ” 行动的意…

Pytest测试框架基础及进阶

Pytest测试框架基础# Pytest测试框架介绍# Pytest是Python一款三方测试框架&#xff0c;用于编写和运行单元测试、集成测试和功能测试。Pytest测试框架具有简单、灵活、易于扩展等特点&#xff0c;被广泛应用于Python项目的测试工作中。 Pytest主要特点&#xff1a; 简单易用…