干货:教你如何在JMeter中调用Python代码N种方法!

在性能测试领域,JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。而现在大部分接口都会涉及到验签、签名、加密等操作,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。(特别是针对一些只会Python编程, 不擅长Java的)

在JMeter中调用Python方法有很多,今天给大家先推荐几类:

方法一:利用beanshell+Runtime.getRuntime().exec()方法

Runtime.getRuntime().exec() 方法是用于在 Java 应用程序中执行外部命令。它允许你调用操作系统的命令行工具或其他可执行程序。你可以将要执行的命令作为参数传递给 exec() 方法,并且它会返回一个 Process 对象,通过该对象你可以管理和控制外部进程的执行。需要注意的是,使用 exec() 方法执行外部命令时需要格外小心,以防止潜在的安全漏洞。

如下示例

String command = "cmd /c python D:\\training\\python_work\\common\\auth.py";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);pr.waitFor();BufferedReader b = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
StringBuilder response = new StringBuilder();
while ((line = b.readLine()) != null) {response.append(line);}String response_data = response.toString();System.out.println("获取到的token值:"+response_data);
b.close();
vars.put("token",response.toString()); //把结果赋值给变量 ID ,方便后面调用

获取接口token解密过程是在auth.py中实现的,利用 Runtime.getRuntime().exec()执行python脚本

PS: 也可以利用OS Process Sampler取样器,在OS Process Sampler中,可以直接执行系统命令,这也包括执行Python脚本以及其他乱七八糟的脚本或者文件。

方法二:利用JSR223 Sampler

要在Jmeter中使用Python,可以使用JSR223 Sampler元素来执行Python脚本
操作步骤:
1、在https://www.jython.org/download 下载jython-standaloneXXX.JAR

2、放到jmeter 的lib文件夹下,重启Jmeter。
3、添加JSR223 Sampler (路径:Thread Group >Sampler>JSR223 Sampler

4、根据压测需求,编写python脚本即可。

示例:

"""该脚本用于加密登录信息"""
import hashlib
import sys
import time
import jsondef password_srt(pubkey,  password):time_str = str(time.time())sign_str = str(pubkey) + time_str + str(password)sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()res = {'sign': sign, 'pubkey': pubkey, 'password': password}res = json.dumps(res)return resresult = password_srt(123456789,987654321)
log.info(result)
vars.put("secrity",result) # 设置到变量,为后续取样器使用。

方法三:利用pymeter库

pymeter库允许你在Python中实现类似JMeter GUI操作性能测试一样的效果。

项目地址:

https://github.com/eldaduzman/pymeter

依赖条件:

安装:

pip install pymeter

使用示例:

"""unittest module"""
from unittest import TestCase, mainfrom pymeter.api.config import TestPlan, ThreadGroupWithRampUpAndHold
from pymeter.api.postprocessors import JsonExtractor
from pymeter.api.reporters import HtmlReporter
from pymeter.api.samplers import DummySampler, HttpSampler
from pymeter.api.timers import UniformRandomTimerclass TestTestPlanClass(TestCase):def test_1(self):json_extractor = JsonExtractor("variable", "args.var")timer = UniformRandomTimer(1000, 2000)http_sampler = HttpSampler("Echo","https://postman-echo.com/get?var=${__Random(0,10)}",timer,json_extractor,)dummy_sampler = DummySampler("dummy ${variable}", "hi dummy")tg = ThreadGroupWithRampUpAndHold(10, 1, 60, http_sampler, dummy_sampler, name="Some Name")html_reporter = HtmlReporter()tp = TestPlan(tg, html_reporter)stats = tp.run()print(f"duration= {stats.duration_milliseconds}",f"mean= {stats.sample_time_mean_milliseconds}",f"min= {stats.sample_time_min_milliseconds}",f"median= {stats.sample_time_median_milliseconds}",f"90p= {stats.sample_time_90_percentile_milliseconds}",f"95p= {stats.sample_time_95_percentile_milliseconds}",f"99p= {stats.sample_time_99_percentile_milliseconds}",f"max= {stats.sample_time_max_milliseconds}",sep="\t",)self.assertLess(stats.sample_time_99_percentile_milliseconds, 2000)if __name__ == "__main__":main()

执行后,自动生成output目录,并生成index.hmtl报告和.jtl结果文件。

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

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

相关文章

【QT入门】 QTabWidget各种常见用法详解

往期回顾: 【QT入门】 Qt代码创建布局之分裂器布局详解-CSDN博客 【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解 一般来说,学一个新的控…

深兰科技陈海波:生成式AI,新一轮知识生产力革命

3月26日,AIoT创新技术赋能工业数字化高峰论坛在上海市宝山区临港南大数智中心隆重举行。活动吸引了诸多行业内的专家学者、企业家及金融投资机构、政府园区、用户等多位业界精英出席,共同探讨该领域面临的挑战与机遇,分享最新的科研成果和技术…

Python环境下基于原型网络的滚动轴承故障诊断方法

近年来,基于深度学习的故障诊断方法成为研究热点,它依靠海量的数据完成故障诊断模型的训练。然而,在实际的工业过程中,往往无法提供充足的故障数据样本给深度学习模型,在一定程度上限制了其性能。以旋转机械为例&#…

Rollup 与其它工具的集成

Rollup 与其它工具的集成 与其他 NPM 包场景实例应用插件安装命令更新src/main.js 文件结果 解决方案插件安装命令添加到配置文件中结果 rollup/plugin-commonjs 对等依赖项作用配置文件 Babel作用安装命令配置文件 与其他 NPM 包 场景 项目可能会依赖于从 NPM 安装到 node_m…

Chrome 插件 storage API 解析

Chrome.storage API 解析 使用 chrome.storage API 存储、检索和跟踪用户数据的更改 一、各模块中的 chrome.storage 内容 1. Service worker 中 runtime 内容 2. Action 中 runtime 内容 3. Content 中 runtime 内容 二、权限(Permissions) 如果需使…

自己编译SQLite或将SQLite移植到新的操作系统(六)

返回:SQLite—系列文章目录 上一篇:SQLite中的动态内存分配(五) 下一篇:SQLite—系列文章目录 1.0 引言 对于大多数应用程序,推荐的构建方法 SQLite是使用合并代码 文件 sqlite3.c 及其相应的头文件 sqlite3.…

机器学习预测气候变化对产量的影响

通过机器学习预测作物产量 今天分享一篇文献解读,将围绕论文《结合机器学习和环境变量约束气候变化下作物产量变化预测的不确定性》展开,该研究通过将动态线性模型(DLM)和随机森林机器学习模型(RF)分别与9个全球网格作物模型(GGCM)集成来整合和克服这两种建模框架的…

C++队列queue用法详解

一、queue的介绍 1. 队列是一种容器适配器,专门用于在 FIFO 上下文 ( 先进先出 ) 中操作,其中从容器一端插入元素,另一端 提取元素。 2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类, qu…

大型驱动水冷负载电阻、缓冲器、滤波器和快速放电电阻

EAK业界首创双面水冷负载电阻器,独特的设计,用户更方便的串联并联使用,强大的水流带走更多因充放电带来的热量。AlN高可靠性氮化铝基板保证了热膨胀不会影响电阻的工作。 液冷电阻器使用水或离子水作为冷却剂。通过添加乙二醇,可以…

题目:小明的背包1(蓝桥OJ 1174)

问题描述&#xff1a; 解题思路&#xff1a; 01背包模板题 题解&#xff1a; // 未优化的01背包 // #include <bits/stdc.h> // using namespace std; // using ll long long; // const int N 1e2 9, M 1e3 9; // int a[N][M]; // ll dp[N][M];// int main() // {…

详解智慧路灯杆网关的集中供电能力

智慧路灯杆网关是智慧杆物联网系统中不可或缺的设备。智慧杆网关不仅可以作为杆载设备与云平台、设备与设备之间的桥梁&#xff0c;促进数据的无缝传输&#xff0c;而且还能提供高效的能源管理和供电功能。 BMG8200系列交流型智慧路灯杆网关就集成了强大的供电能力&#xff0c;…

商品房预售合同备案流程是什么?怎么办理??

商品房预售合同备案后即视为正式合同&#xff0c;具有一般合同的效力。 而在签订商品房时&#xff0c;合同双方应仔细查看预售的相应条款&#xff0c;以便更好地保护自己的合法权益。 购房合同备案流程 &#xff08;一&#xff09;自2006年起&#xff0c;所有销售合同均采用网上…