干货:教你如何在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脚本以及其他乱七八糟的脚本或者文件。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】
方法二:利用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结果文件。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!