news 2026/6/23 19:14:50

如何在JMeter中调用Python代码N种方法?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在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+jython

要在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 json def 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 res result = 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, main from 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 UniformRandomTimer class 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结果文件。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:17:58

【鸿蒙三方库编译】lycium_plusplus(lycium++)高效完成鸿蒙C/C++编译

lycium_plusplus介绍 项目地址 lycium 是基于openharmony cpp 编译框架lycium的增强 主要包含以下几个目标: 针对目标产物,构建依赖关系树,一键构建对于三方库的HPKBUILD,提供多版本构建能力,代码仓脱离本仓独立发…

作者头像 李华
网站建设 2026/6/23 11:09:28

2025年度GEO服务商权威甄选指南:技术深度与商业价值的双重考量

当一家高端智能家居品牌在三个月内将AI搜索推荐率从行业寂寂无名提升至头部阵营时,其市场总监只说了八个字:“这不是优化,是重构。”随着AIGC从技术演示走向规模化应用,一个品牌的“数字存在”正被彻底改写。权威咨询机构Gartner在…

作者头像 李华
网站建设 2026/6/23 7:46:09

收藏备用!Java程序员转AI大模型:从技术沉淀到AI爆发的进阶之路

AI大模型的规模化应用,正在重构技术人才的价值坐标系。对于深耕Java技术栈的程序员而言,这绝非“被替代”的危机,而是一场基于技术沉淀的“顺势突围”。你在企业级开发中锤炼的架构思维、工程化能力,将成为大模型从技术原型走向产…

作者头像 李华
网站建设 2026/6/23 20:58:37

Python 爬虫实战:Session 会话维持爬取需登录内容

摘要 本文聚焦 Python 爬虫中 Session 会话维持技术,针对需登录访问的网站数据爬取场景,深入解析 Session 的核心工作原理、会话维持机制及实战应用方案。实战验证基于GitHub 个人仓库页(需登录访问的私密资源场景),读…

作者头像 李华
网站建设 2026/6/23 21:27:16

基于移相全桥变换器的电池充电仿真模型,采用电压电流双闭环PI控制。 电池先经历CC模式而后进入...

基于移相全桥变换器的电池充电仿真模型,采用电压电流双闭环PI控制。 电池先经历CC模式而后进入CV模式。 运行环境为matlab/simulink在电池充电的世界里,移相全桥变换器(PSFB)因其高效率和高功率密度而备受青睐。今天,我…

作者头像 李华
网站建设 2026/6/23 21:32:07

基于COMSOL模拟的水力压裂技术研究:固体力学与达西定理的应用

comsol模拟水力压裂,固体力学达西定理。在工程领域,水力压裂技术是一种常用的增强油气开采效率的方法。通过模拟这一过程,我们可以更好地理解裂缝的扩展和流体的流动。今天,我们就来聊聊如何使用COMSOL Multiphysics来模拟水力压裂…

作者头像 李华