性能测试工具 请教个 jmeter 的问题

杨杰 · 2019年07月20日 · 最后由 arrow 回复于 2019年07月22日 · 2373 次阅读

在使用 Jmeter API 开发自动化性能测试平台中遇到个技术问题,jmeter 内核 API 无法运行线程进行参数化的脚本,大家是如何进行解决的?
本地 Jmeter 内核 API java 代码如下:
StandardJMeterEngine standardJMeterEngine=new StandardJMeterEngine();
System.setProperty(JMeter.JMETER_NON_GUI, "true");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\jmeter.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\system.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\user.properties");
JMeterUtils.loadJMeterProperties("D:\software\java\apache-jmeter-5.1\bin\saveservice.properties");
JMeterUtils.setJMeterHome("D:\software\java\apache-jmeter-5.1");
JMeterUtils.initLocale();
JMeterUtils.initLogging();
SaveService.loadProperties();
Properties jmeterProps = JMeterUtils.getJMeterProperties();
jmeterProps.put("thread","10");//这里没产生效果
File file=new File("F:\baidu.jmx");
FileServer.getFileServer().setBase(file);
FileServer.getFileServer().setScriptName(file.getName());
Field baseField = FileServer.getFileServer().getClass().getDeclaredField("base");
baseField.setAccessible(true);//设置允许访问
baseField.set(FileServer.getFileServer(), file.getAbsoluteFile().getParentFile());
HashTree scripts=SaveService.loadTree(file);
Summariser summariser = new Summariser(JMeterUtils.getPropDefault("summariser.name", "summary"));
ResultCollector logger = new ResultCollector(summariser);
logger.setFilename("F:\baidu.jtl");
scripts.add(scripts.getArray()[0],logger);
JMeter.convertSubTree(scripts);
standardJMeterEngine.configure(scripts);
standardJMeterEngine.runTest();
//注:上面的代码运行线程无参数化的脚本时非常正常,运行如下配置的脚本时无法达到预期目标

共收到 5 条回复 时间 点赞

__P() 函数获取的是系统参数,所以应该用下面的方法:

System.setProperty("thread", "10");
arrow 回复

刚刚查了下代码,应该是用下面这个:😂

JMeterUtils.setProperty("thread", "10");

jmeter 一个虚拟用户需要一个线程,这是设计的局限啊,电脑上能有多少线程呢?通常每秒只能发几百个请求。

推荐使用 黑羽压测 , 是使用 Python + gevent 开发的,单进程每秒能发 3000-5000 左右,并发连接可达数万个(可以模拟几万客户端), 而且测试代码可以点击自动产生,好用的多。

大家可以试试, 下面有教程

http://www.python3.vip/doc/tutorial/o/perf/01/

arrow 回复

发帖前用 JMeterUtils.setProperty("thread","10");试过的一样没任何作用。还是谢谢你。
另 jmeter 源码中 JMeterUtils.setProperty("thread","10") 和 JMeterUtils.getJMeterProperties() 得到的是同一个类成员 Properties appProperties 没区别

杨杰 回复

你调试一下这个 org.apache.jmeter.functions.Property2.java:execute 函数(就是__P 的实现),看一下为什么没取到。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册