dubbo接口压测工具stresstester使用
最近在压测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)--最长的耗时