最近在压测dubbo接口,发现写一个消费者jar去调用dubbo接口,然后用jmeter压测,每次都重新启动jar,每启动一次jar就相当于与需要压测的接口系统新建一个长连接,耗时都用在这了,后来发现一个淘宝的工具stresstester,反编译看了下源码,现在将使用方法记录下。
maven引用如下:
<dependency>
<groupId>com.taobao</groupId>
<artifactId>stresstester</artifactId>
<version>1.0</version>
</dependency>
不过这个现在已经拉不下来了,提供一个jar包下载地址:点击打开链接
替换到maven本地私服com/taobao目录下即可
使用方法很简单,直接main函数即可:
public class QueryRealtimeServerTest {
public static void main(String[] args) {
//加载dubbo配置文件
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"dubbo.xml"});
//获取server
QueryRealtimeServer queryRealtimeServer = (QueryRealtimeServer) context.getBean("queryRealtimeServer");
/**
* StressTestUtils.test(int concurrencyLevel, int totalRequests, StressTask stressTask, int warmUpTime);
* concurrencyLevel 总并发次数
* totalRequests 总请求次数, 单个线程请求次数= totalRequests/concurrencyLevel
* stressTask 并发主体
* warmUpTime 初始绿灯测试stressTask次数
*/
StressResult stressResult = StressTestUtils.test(30, 30, new StressTask() {
@Override
public Object doTask() throws Exception {
//dubbo请求
StockRealtimeQuoteReq stockRealtimeQuoteReq = new StockRealtimeQuoteReq();
Set<String> stockCodes = new HashSet<>();
stockCodes.add("000001");
stockCodes.add("000002");
stockRealtimeQuoteReq.setStockCodes(stockCodes);
CommonRequest<StockRealtimeQuoteReq> commonRequest = new CommonRequest<>();
commonRequest.setRequestParam(stockRealtimeQuoteReq);
queryRealtimeServer.getRealtimeQuote(commonRequest);
return null;
}
}, 0);
//数据格式化
String str = StressTestUtils.format(stressResult);
System.out.println(str);
}
}
dubbo的消费模式这里就不说了,主要用这个方法去压测:
StressTestUtils.test(int concurrencyLevel, int totalRequests, StressTask stressTask, int warmUpTime);
concurrencyLevel 总并发次数
totalRequests 总请求次数, 单个线程请求次数= totalRequests/concurrencyLevel
stressTask 并发主体
warmUpTime 初始绿灯测试stressTask次数
这个方法返回一个结果集StressResult类
这个工具提供一个结果格式化方法 StressTestUtils.format(stressResult)
如果有特殊需求也可以通过获取StressResult类自定义生成报表之类,运行结果如下:
Concurrency Level: 30--并发数
Time taken for tests: 1206.2787 ms--测试耗时
Complete Requests: 30--完成测试次数
Failed Requests: 0--失败次数
Requests per second: 25.295425--QPS
Time per request: 1185.9851 ms--平均耗时
Time per request: 39.53284 ms (across all concurrent requests)--平均耗时,忽略并发影响
Shortest request: 1142.5342 ms--最短耗时
Percentage of the requests served within a certain time (ms)
50% 1191.0828--50% 的耗时在0.005703毫秒以下
66% 1201.3679
75% 1202.0448
80% 1202.2448
90% 1204.9126
95% 1204.9615
98% 1206.2787
99% 1206.2787
100% 1206.2787 (longest request)--最长的耗时