首页 > 其他分享 >JMeter压力测试总结

JMeter压力测试总结

时间:2022-12-27 20:03:58浏览次数:50  
标签:总结 context private 线程 result 测试 JMeter public


​Apache​​​ ​​JMeter​​​是​​Apache​​​组织开发的基于Java的压力测试工具。用于对软件做压力测试,相比其他HTTP测试工具,JMeter最主要的特点在于扩展性强。JMeter能够自动扫描其lib/ext子目录下.jar文件中的​​插件​​,并且将其装载到内存,让用户通过不同的菜单调用。并且能自动生成压力测试报告。

1. 下载JMeter

​http://jmeter.apache.org/download_jmeter.cgi​

我用的是JMeter 2.9 r1437961 ,JDK 7u40

2.启动JMeter

运行bin/jmeter.bat

3.添加线程组

测试计划->添加->Threads(users)->线程组

JMeter压力测试总结_jar

线程数:要模拟的并发用户量。

Ramp Up Period (in seconds):在多长时间内均匀启动所有的线程。比如Number of Threads设为3000,Ramp Up Period设为300,则jmeter每隔0.1秒启动1个线程。

循环次数:单用户任务重复执行的次数。可以设为永远,这样jmeter就不会自动停止,需要强制终止。

线程组->添加->sampler->Java请求

JMeter压力测试总结_线程组_02

把我们基于Jmeter 的JAVA请求选中,ShootRequest,向鱼群发射炮弹的业务逻辑.

其中界面上的参数为程序中指定的,比如服务器IP端口之类的。

4.实现Java Request

建立JAVA工程,引入库ApacheJMeter_core.jar,ApacheJMeter_java.jar,实现个抽象类,AbstractJmeterClient,所有的请求必须在玩家登陆的前提下,所以登陆逻辑放到了公共的抽象类:

package com.u9.jrobot;
public abstract class AbstractJmeterClient extends AbstractJavaSamplerClient {
private static final Logger logger = LogManager
.getLogger(AbstractJmeterClient.class);
private String tableIp = "172.16.1.37";
private int port = 1470;
private Player player;
private String lobbyIp="172.16.1.34";
private SampleResult result;
protected static int robotId = 0;

// private String path;
// private
// 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
args.addArgument("lobbyIp", lobbyIp);
args.addArgument("tableIp", tableIp);
args.addArgument("port", "" + port);
args.addArgument("startId", "" + robotId);
return args;
}

// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
public void setupTest(JavaSamplerContext context) {
// 加载当前目录下的logback配置文件
result = new SampleResult();
result.sampleStart(); // 事务的起点
tableIp = context.getParameter("tableIp");
port = context.getIntParameter("port");
lobbyIp = context.getParameter("lobbyIp");

if (robotId == 0) {
robotId = context.getIntParameter("startId");
}
String name = "robot" + robotId++;
Map<String, Object> map = HttpManager.getInstance().login(lobbyIp,
name, "qqqqqq");
int retcode = (Integer) map.get("s");
if (retcode == 1) {
//玩家登陆游戏的逻辑
}
// JobManager.getInstance().start();
}

@Override
// 测试执行的循环体,根据线程数和循环次数的不同可执行多次
public SampleResult runTest(JavaSamplerContext arg) {
boolean success = true;
// result.sampleStart(); // 事务的起点
try {
result.setSuccessful(this.runTest(player));
} catch (Exception e) {
success = false;
} finally {
// result.sampleEnd(); // 事务的终点
result.setSuccessful(success); // 设置本次事务成功或失败
}
return result;
}

public abstract boolean runTest(Player player) throws Exception;

// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
public void teardownTest(JavaSamplerContext context) {
result.sampleEnd(); // 事务的终点
robotId = context.getIntParameter("startId");
GameClient gameClient = player.getGameClient();
try {
PlayerManager.getInstance().remove(gameClient.getChannelId());
gameClient.disconnect();
} catch (ServiceException e) {
}
}
}



实现具体的压力测试类:

public class ShootRequest extends AbstractJmeterClient {

private static final Logger logger = LogManager
.getLogger(ShootRequest.class);
private int[] array = { 1, 5, 10, 20, 30, 40, 50, 100 };
private static int token = 0;

@Override
public boolean runTest(Player player) throws Exception {

// KeepAlive_S2C_Msg ret=client.keepAlive(msg.build());
//具体射击逻辑实现
return true;
}
}



用ant打包成jrobot.jar,不要设主类,

jrobot.jar和lib文件放到\apache-jmeter-2.9\lib\ext\下,然后启动,选择相应的压力测试类,设置参数,启动JMeter

5.添加Listener

//TODO

ps:每个玩家都要单独启动个线程,如果3000玩家就要启动3000个线程组,感觉这设计有点郁闷,程序的很多消耗都在切换线程了。是不是我理解或者用错了?

标签:总结,context,private,线程,result,测试,JMeter,public
From: https://blog.51cto.com/u_4176761/5973461

相关文章

  • Tomcat使用总结
    1.下载的点已经更改:TOMCAT官网:​​http://tomcat.apache.org/​​插件官网 ​​http://www.eclipsetotale.com/tomcatPlugin.html​​2.Eclipe下......
  • Prometheus的使用总结
    一、Prometheus是什么?Prometheus是一套开源的系统监控报警框架。它受启发于Google的Brogmon监控系统,由工作在SoundCloud的前google员工在2012年创建,作为社区开源......
  • Morn UI 学习总结
    1.内嵌模式和加载模式内嵌模式和加载模式都是针对UI界面的XML而言的,内嵌模式是将UI视图XML结构内嵌在UI类里面,加载模式是把所有界面XML压缩打包为二进制数据,使用时再加载解......
  • btrace使用总结(完全突破安全限制,引用第三方包)
    由于认识J​​AVA代码热更新​​在先,所以Btrace这一神器似乎失去了一些光芒,但他的优势是无任何侵入性,可以做一些代码热更新没法做的事情,做到两者互补。比如1可以直接运行ja......
  • 阿里云的数据风控试用总结
    使用背景:由于一款游戏经常会被盗号,小号肆虐,会对游戏的正常运营产生很负面的影响,急需找一款风控产品来解决这个问题。那么,这些行为都有哪些特征呢?盗号,基本都是暴力,撞库后异地......
  • Egret Wing使用总结
    1-第三方框架安装 初始化 npminit-f,相应的就会生成package.json然后,再安装所需框架比如:npminstalllog4js卸载npmuninstall模块:删除模块,但不删除模块留在package.......
  • 数据库连接池Druid使用总结
    根据综合性能,可靠性,稳定性,扩展性,易用性等因素替换成最优的​​数据库​​连接池。Druid:druid-1.0.29数据库 Mysql.5.6.17替换目标:替换掉C3P0,用druid来替换替换原因:1、......
  • JIRA系统使用总结
    每天JIRA会备份两次在这个目录/var/atlassian/application-data/jira/exportJIRA系统遇到损坏,可能是索引目录损坏可以重构索引 索引路径/var/atlassian/application-data......
  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
    适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。当许......
  • Nginx使用总结解决:NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
     如何控制CDN文件在浏览器的缓存时间?腾讯云CDN默认支持 源站的Cache-Control设置 。目前暂不支持配置Cache-Control头部,因此无法在CDN节点上配置max-age,但CDN节点会......