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

杨杰 · July 20, 2019 · Last by arrow replied at July 22, 2019 · 505 hits

在使用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/

杨杰 #4 · July 22, 2019 作者
arrow 回复

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

杨杰 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up