之前讲过的《JHM》是一个java的基准测试框架,一般用于测试jdk里的API。如果要测试http接口,可以使用Gatling。
你可能用过JMeter,也是可以的
原生的Gatling是基于代码测试的,没有UI。你需要创建一个maven项目,或者下载官方的例子:https://github.com/gatling/gatling-js-demo/archive/refs/heads/main.zip 。
官方文档参考:https://docs.gatling.io/reference/install/oss/
配置
打开这个例子项目,找到类 ComputerDatabaseSimulation
进行修改。
比如我想测试 http://localhost:8080/unified-list-service/dpa/landing
这个地址。配置如下:
import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;import static io.gatling.javaapi.core.CoreDsl.atOnceUsers;
import static io.gatling.javaapi.core.CoreDsl.constantUsersPerSec;
import static io.gatling.javaapi.core.CoreDsl.scenario;
import static io.gatling.javaapi.http.HttpDsl.http;public class ComputerDatabaseSimulation extends Simulation {HttpProtocolBuilder httpProtocol =http.baseUrl("http://localhost:8080/unified-list-service/dpa").acceptHeader("*/*");ScenarioBuilder myScenario = scenario("My Scenario").exec(http("Request pure").get("/landing"));{setUp(myScenario.injectOpen(constantUsersPerSec(300).during(10))).protocols(httpProtocol);}
}
这个配置的意思是每秒生成300个请求,连续生成10秒,共计3000个请求。
如果想直接生成这3000个请求,可以使用
setUp(myScenario.injectOpen(atOnceUsers(3000))).protocols(httpProtocol);
setUp可以接受多个场景,比如
setUp(myScenario1.injectOpen(constantUsersPerSec(300).during(10)), myScenario2.injectOpen(atOnceUsers(300))).protocols(httpProtocol);
每个场景也可以执行多种请求,比如:
ScenarioBuilder myScenario1 = scenario("My Scenario").exec(http("Request pure").get("/landing"), http("Request swid").get("/landing?swid={d80a2714}")).exec(http("Request 1").get("/landing?date={today}"));
运行
执行命令mvn gatling:test