news 2026/6/12 4:55:08

如何在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/12 3:31:44

Python 爬虫实战:Scrapy 框架快速搭建分布式爬虫

前言 在大数据时代,单节点爬虫面对海量数据采集需求时,往往受限于单机的网络带宽、CPU 算力和 IP 资源,采集效率难以满足业务要求。Scrapy 作为一款成熟的 Python 爬虫框架,本身具备轻量级、高扩展性的特点,结合分布式…

作者头像 李华
网站建设 2026/6/11 18:25:13

Python 爬虫实战:爬虫代理 IP 池搭建与自动切换

摘要 本文聚焦爬虫代理 IP 池的核心搭建与自动切换技术,针对反爬机制中 IP 封禁的核心痛点,系统讲解代理 IP 池的架构设计、数据源对接、有效性检测、自动切换及动态维护全流程。实战验证基于IP 检测测试页(可直接点击验证 IP 有效性&#x…

作者头像 李华
网站建设 2026/6/10 21:48:43

JAVA面相对象编程—抽象类、接口

#JAVA笔记#抽象类定义抽象类与普通类基本类似,唯一的区别在于使用abstract关键字修饰,且类中有未实现(没有方法体)的抽象方法(abstract修饰)。抽象方法必须位于抽象类中,抽象方法只能访问抽象成…

作者头像 李华
网站建设 2026/6/12 11:16:07

2026最新网络安全小白自学之路,别到处拜师了!!

较为完整的学习路线: 这个路线是我和一些已入职大佬来规划整理,也加上了小提示,我也希望你们能看看上面我的心得,都会有所帮助。 第一阶段,初入门学网络基础tip:这部分没有什么逻辑可以说的,半个…

作者头像 李华
网站建设 2026/6/8 4:51:19

加入2025护网,日薪最低1500,能力越强薪资越高!

加入2025护网,日薪最低1500,能力越强薪资越高! 什么是护网行动 ** ** 1.护网行动 护网,也称网络保护,是指网络安全人员对企业或组织的网络进行检查、维护和保护,以防止网络受到黑客攻击、病毒、木马或其…

作者头像 李华
网站建设 2026/6/12 7:33:40

Selenium切换窗口、框架和弹出框window、ifame、alert

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、切换窗口#获取打开的多个窗口句柄 windows driver.window_handles #切换到当前最新打开的窗口 driver.switch_to.window(windows[-1]) #最大化浏览器 driv…

作者头像 李华