之前讲过的《JHM》是一个java的基准测试框架,一般用于测试jdk里的API。如果要测试http接口,可以使用Gatling。
你可能用过JMeter,也是可以的
原生的Gatling是基于代码测试的,没有UI。你需要创建一个maven项目,或者下载官方的例子:https://github.com/gatling/gatling-js-demo/archive/refs/heads/main.zip 。
配置
打开这个例子项目,找到类 ComputerDatabaseSimulation
进行修改。
比如我想测试 http://localhost:8080/unified-list-service/dpa/landing
这个地址。配置如下:
java
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个请求,可以使用
java
setUp(myScenario.injectOpen(atOnceUsers(3000))).protocols(httpProtocol);
setUp可以接受多个场景,比如
java
setUp(
myScenario1.injectOpen(constantUsersPerSec(300).during(10)),
myScenario2.injectOpen(atOnceUsers(300))
).protocols(httpProtocol);
每个场景也可以执行多种请求,比如:
java
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