在 《java中的基准测试框架JMH》中我们使用JMH框架进行Java SDK中的API的压测。
最近我又遇到了需要对第三方接口进行压测的需求,又用到了它。
JHM(Java Microbenchmark Harness)是OpenJDK团队开发的Java微基准测试框架,专门用于精确测量Java代码的性能,精度可以达到纳秒级别。
提供吞吐量、平均时间、采样时间等多种测试模式自动进行预热处理,使JVM达到稳定状态
支持多线程测试,模拟真实并发场景
虽然它本身是针对JDK的,但是配合http框架也可以对远程API进行压测。
项目我放到网上了: https://github.com/davelet/local-load-test
用法是:
            
            
              bash
              
              
            
          
          java -Dapi.baseUrl=http://localhost:8080 \
  -Dapi.endpoint=/api/v1/test \
  -Dapi.method=GET \
  -jar target/benchmarks.jar \
  -t 10 -wi 3 -w 5s -i 5 -r 10s \
  ApiLoadTestBenchmarkAPI配置参数(通过-D指定)
| 参数 | 说明 | 默认值 | 
|---|---|---|
| api.baseUrl | API基础URL | http://localhost:8080 | 
| api.endpoint | API端点路径 | /api/v1/test | 
| api.method | HTTP方法 | GET | 
| api.body | 请求体(JSON) | "" | 
| api.headers | HTTP Headers | "" | 
| api.connectionTimeout | 连接超时(ms) | 5000 | 
| api.socketTimeout | 响应超时(ms) | 10000 | 
JMH性能测试参数(通过命令行选项指定)
| 参数 | 说明 | 默认值 | 示例 | 
|---|---|---|---|
| -t | 并发线程数 | 1 | -t 10 | 
| -wi | 预热迭代次数 | 0 | -wi 3 | 
| -w | 每次预热时长 | 10s | -w 5s | 
| -i | 测试迭代次数 | 1 | -i 5 | 
| -r | 每次测试时长 | 10s | -r 10s | 
| -f | JVM fork次数 | 1 | -f 1 | 
更复杂和详细的说明可以参考 https://github.com/davelet/local-load-test/blob/develop/README.md