Как захватить атрибут из случайного индекса JSON в безсерверной артиллерии - PullRequest
0 голосов
/ 29 октября 2019

В Artillery, как я могу захватить атрибут случайного индекса в массиве JSON, возвращенном из GET, чтобы мои последующие POST были равномерно распределены по ресурсам?

https://artillery.io/docs/http-reference/#extracting-and-reusing-parts-of-a-response-request-chaining

Я использую безсерверную артиллерию для запуска нагрузочного теста, который под капотом использует artillery.io.

Многие мои сценарии выглядят так:

      -
        get:
          url: "/resource"
          capture:
            json: "$[0].id"
            as: "resource_id"
      -
        post:
          url: "/resource/{{ resource_id }}/subresource"
          json:
            body: "Example"

Получите список ресурсов, а затем отправьте POST на один из этих ресурсов.

Как видите,Я использую capture для получения идентификатора из ответа JSON. Моя проблема заключается в том, что он всегда получает идентификатор из первого индекса массива.

Это будет означать, что в моем нагрузочном тесте я в конечном итоге просто бью один ресурс, а не ударю их равномерно, что будет более вероятнымсценарий.

Я хотел бы иметь возможность сделать что-то вроде:

capture:
  json: "$[RANDOM].id
  as: "resource_id"

, но мне не удалось найти в определении JSONPath ничего, что позволило бы мне сделать это.

1 Ответ

1 голос
/ 30 октября 2019

Определите функцию setResourceId в пользовательском коде JS и сообщите Artillery, чтобы загружать ваш собственный код, задайте для config.processor путь к файлу JS:

процессор: "./custom-code.js"

   - get:
      url: "/resource"
      capture:
        json: "$"
        as: "resources"
  - function: "setResourceId"
  -  post:
      url: "/resource/{{ resourceId }}/subresource"
      json:
        body: "Example"

файл custom-code.js, содержащий следующую функцию

function setResourceId(context, next) {
    const randomIndex = Math.round(Math.random() * context.vars.resources.length);
    context.vars.resourceId = context.vars.resources[randomIndex].id;
}
...