Гатлинг: Как извлечь один объект из массива? - PullRequest
0 голосов
/ 10 февраля 2020

Я новичок в Гатлинге и Scala. При отправке запроса Get тело ответа - Array, и мне нужно извлечь только один объект из Array и опубликовать его в Gatling. Может кто-нибудь объяснить мне, как это сделать?

Вот мой пример кода:

private val getUsers = exec(
      http("Get users")
        .get("/users")
        .check(status.is(200))
        .check(bodyString.saveAs("Users")))

Результат, который я получаю:

[{"id":"1","hairColor":"BROWN","age":24,"language":"English","birthDate":"1995-02-10"},
{"id":"2","hairColor":"YELLOW","age":30,"language":"Australian","birthDate":"1889-10-05"},
{"id":"3","hairColor":"BLACK","age":15,"language":"American","birthDate":"..."},
{"id":"4","hairColor":"RED","age":50,"language":"Russian","birthDate":"..."}]

Как получить какой только один пользователь из этого массива и опубликовать весь объект пользователя?

Ответы [ 3 ]

1 голос
/ 11 февраля 2020

если вы переключитесь на проверку jsonPath, вы можете поместить все пользовательские объекты в вектор, который имеет хорошую поддержку в Gatling EL

, поэтому вместо

.check(bodyString.saveAs("Users"))

вы можете используйте

.check(jsonPath("$..[?(@.id)]").findAll.saveAs("Users")))

, затем, когда вы приходите делать последующие вызовы, вы можете делать такие вещи, как

, выберите 1-го пользователя с помощью

.body(StringBody("${Body(1).jsonStringify()}"))

, выберите случайного пользователя с помощью

.body(StringBody("${Body.random().jsonStringify()}"))

Этот подход также позволит вам использовать .forEach для взаимодействия со всеми записями

0 голосов
/ 11 февраля 2020

Я нашел ответ сам. Если я хочу сохранить какой-либо один объект из массива, я могу сделать это ->

private val getUsers = exec(
  http("Get users")
    .get("/users")
    .check(status.is(200))
    .check(jsonPath("$[0]").find.saveAs("user")))

Конечно, я должен указать, какое значение я хочу сохранить, но в моем примере я сохраняю первое значение. И позже вы можете использовать это значение для других запросов.

0 голосов
/ 11 февраля 2020

Вы можете легко получить, но вам нужно определить, какой ключ

Его пример, где я использовал 'id' ключом

$.[*].[?(@.id == '1')]


$.[*] <= получить все элементы массива </p>

.[?(@.id == '1')] <= получить элемент, идентификатор которого равен '1' (вы можете использовать любое значение). </p>

Или любой ключ $.[*].[?(@.hairColor == 'BROWN')]


Затем просто добавьте .check(jsonPath("$.[*].[?(@.id == '1')]").saveAs("myUser")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...