使用 .check 获取 JSON 响应中的元素

问题描述 投票:0回答:1

我的加特林测试代码(Java)如下:

package computerdatabase;

import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;

import java.time.Duration;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;
import static io.gatling.javaapi.http.HttpDsl.status;

public class ProductSimulation extends Simulation {

HttpProtocolBuilder httpProtocol = http.baseUrl("https://dummyjson.com")
        .header("Content-Type", "application/json")
        .header("Accept-Encoding", "gzip")
        .check(status().is(200));

ScenarioBuilder scn = scenario("GetProducts")
        .exec(http("products").get("/products").body(StringBody("{}"))
                .check((jsonPath("$.*").saveAs("response"))))
        .exec(session -> {
            System.out.println(session.getString("response"));
            return session;
        });

{
    setUp(scn.injectOpen(constantUsersPerSec(1).during(Duration.ofSeconds(1)))).protocols(httpProtocol);
}
}

现在我获得了整个响应正文,但我只想要第一个“标题”,如“Essence Mascara Lash Princess”中给出的 json 响应正文(它的第一部分)

[{"id":1,"title":"Essence Mascara Lash Princess","description":".....

如何将“标题”保存到变量中并像对整个 json 响应那样打印它?

json gatling
1个回答
0
投票

好吧,有两种方法。

第一个 - 您可以“直接”定义以提取第一个元素:

.check(jsonPath("$[0].title").saveAs("title")))

第二种方式 - 您可以保存所有元素,然后通过 Gattle EL 使用所需的元素:

.check(jsonPath("$..title").findAll.saveAs("titles")))

"${titles(1)}"
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.