JMeter與大模型融合應用之構建AI智能體:評審性能測試腳本

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; 簡單易用…