Чтобы расширить ответ @na -, я предлагаю внешний обходной путь, используя Redis и Webdis для управления идентификаторами.
Это на самом деле довольно просто, если вы этого не сделаете не забудьте запустить дополнительный процесс, и он не должен сильно влиять на производительность:
Запустите контейнер Webdis / Redis: docker run --rm -it -p 127.0.0.1:7379:7379 nicolas/webdis
script.js
:
import http from 'k6/http';
const url = "http://127.0.0.1:7379/"
export function setup() {
const ids = [1, 2, 3];
for (let id of ids) {
http.post(url, `LPUSH/ids/${id}`);
}
}
export default function () {
const id = Math.floor(Math.random() * 10);
http.post(url, `LPUSH/ids/${id}`);
}
export function teardown() {
let res = http.get(`${url}LRANGE/ids/0/-1`);
let ids = JSON.parse(res.body)['LRANGE'];
for (let id of ids) {
console.log(id);
}
// cleanup
http.post(url, 'DEL/ids');
}
Выполнить 5 итераций с:
k6 run -i 5 script.js
Пример вывода:
INFO[0000] 7
INFO[0000] 2
INFO[0000] 2
INFO[0000] 6
INFO[0000] 5
INFO[0000] 3
INFO[0000] 2
INFO[0000] 1
Недостаток этого решения заключается в том, что оно искажает общие результаты теста из-за дополнительные HTTP-запросы, не относящиеся к самому тесту. Там может быть способ исключить их с помощью тегов, в противном случае это будет хороший запрос функции. :)
Использование клиента Redis Node.js во избежание HTTP-запросов может быть альтернативой, но эти библиотеки, как правило, не «просматриваются», поэтому они, скорее всего, не будут работать в k6.