Нагрузочное тестирование K6 - Как сделать последовательный идентификатор для всего тестового прогона

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

Ex:

request 1 : <id>400</id> VU :1
request 2 : <id>401</id> VU :1

request 1 : <id>402</id> VU :2

request 3 : <id>403</id> VU :1
request 4 : <id>404</id> VU :1

request 2 : <id>405</id> VU :2
request 3 : <id>406</id> VU :2

Есть ли способ объявить переменную, которая является общей для всего теста? Setup и Init предназначены для каждого VU и не могут совместно использовать данные в соответствии с документацией.


person J.Sperandio    schedule 07.08.2020    source источник


Ответы (1)


Это нелегко сделать, потому что каждый VU работает на отдельной виртуальной машине JavaScript, и память между ними не распределяется. Подробнее см. в документации по жизненному циклу тестирования. Это делается для того, чтобы тестовые прогоны можно было распределить между инстансами k6, поэтому для синхронизации данных между ними потребуется внешнее решение.

Один из подходов, который вы можете использовать, состоит в том, чтобы отслеживать и увеличивать идентификатор в веб-службе, к которой ваш скрипт k6 может запросить получение следующего идентификатора. Redis может хорошо послужить для этой цели, смотрите этот связанный ответ для идей. Но обратите внимание, что любое такое решение повлияет на показатели вашего теста в конце теста и на производительность самого теста, поэтому оно не идеально, но я не вижу лучшего подхода.

person imiric    schedule 07.08.2020