Gatling 将收集的变量从一个 ChainBuilder 传递到另一个来自不同类的 ChainBuilder

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

我正在尝试将从测试中收集的值传递给另一个测试,但看起来 gatling 会话对象保留在类中并且不允许其他类使用它。

我的代码是这样的:

测试课1

public class BooksStore{

public static ScenarioBuilder getScenario() {

ChainBuilder getBooks =
            exec(http("Get Books IDs")
                    .get(path/to/books/ids)
                    .check(jsonPath("$.idList[1]").saveAs("firstBookId")));

return scenario("Get all books ids").exec(getBooks);
}

测试班2

public class Client{

public static ScenarioBuilder getScenario() {

ChainBuilder readBook =
            exec(http("Get Book by ID")
                    .get(path/to/book/${firstBookId}));
             
return scenario("Get book by id").exec(readBook);
}

模拟课

public class MySimulation extends Simulation {

HttpProtocolBuilder httpProtocol =
        http
                .baseUrl("https://bookylova.com")
                .acceptHeader(AllAcceptHeaders)
                .header(Authorization, getGetAccessToken());

{
    setUp(
            BooksStore.getScenario().injectOpen(
            rampUsers(10)
            .during(Duration.ofSeconds(10)))
            .andThen(
            Client.getScenario().injectOpen(
            rampUsers(10)
            .during(Duration.ofSeconds(10)))
            )).protocols(httpProtocol);
  }
}

我可以运行另一个链接到 getBooks 的 exec 函数并将值保存在会话中,但是在 readBook 中调用它不起作用。还尝试将类外的变量存储在另一个类中然后读取它,但没有用。

java performance-testing gatling
1个回答
0
投票

事情不是这样的。

场景是虚拟用户的旅程。 不同的场景意味着不同的虚拟用户。 使用

check
将数据保存在执行请求的虚拟用户的 Session 中。所以这个数据对于其他虚拟用户是不可用的,如果他们属于其他场景就更不用说了

这不是你应该如何使用 Gatling。你应该有 1 个场景,虚拟用户首先得到一本书然后阅读它。

我真的建议你通过加特林教程免费在线培训

© www.soinside.com 2019 - 2024. All rights reserved.