#groovy #jmeter #jsr223
#groovy #jmeter #jsr223
Вопрос:
У меня был csv-файл, содержащий 10 идентификаторов пользователей, и требовалось создать полезную нагрузку для каждых 5 пользователей в csv. Ниже приведен мой код:
def start = (vars.get('__jm__Thread Group__idx') as int)
def offset = 5
def payload = [:]
def data = []
def file = 'C:/path/dataset.csv'
start.upto(offset, { index ->
def lineFromCsv = new File(file).readLines().get(index)
data.add(['userId': lineFromCsv.split(',')[0], 'groupId': lineFromCsv.split(',')[1]])
})
payload.put('data', data)
log.info("%%%The Payload is%%%:" payload)
vars.put('payload', new groovy.json.JsonBuilder(payload).toPrettyString())
Мой 1-й вопрос: почему в первой полезной нагрузке (1-я итерация) было 6 элементов, тогда как я ожидал 5. И во 2-й полезной нагрузке (2-я итерация) было 5 элементов, как и ожидалось. Предполагалось, что в каждой полезной нагрузке должно быть одинаковое количество элементов.
Мой 2-й вопрос заключается в том, как мне заставить 2-ю полезную нагрузку начать разбор с того места, где остановилась 1-я полезная нагрузка. Предполагалось, что 2-я полезная нагрузка будет содержать следующие 5 пользователей в csv? Между каждой полезной нагрузкой не должно быть никаких элементов перекрытия.
Ниже приведена полезная нагрузка:
1-я полезная нагрузка:
POST data:
{
"data": [
{
"userId": "fakeUser3k0000002",
"groupId": "1"
},
{
"userId": "fakeUser3k0000003",
"groupId": "2"
},
{
"userId": "fakeUser3k0000004",
"groupId": "2"
},
{
"userId": "fakeUser3k0000005",
"groupId": "3"
},
{
"userId": "fakeUser3k0000006",
"groupId": "4"
},
{
"userId": "fakeUser3k0000007",
"groupId": "5"
}
]
}
2-я полезная нагрузка:
POST data:
{
"data": [
{
"userId": "fakeUser3k0000003",
"groupId": "2"
},
{
"userId": "fakeUser3k0000004",
"groupId": "2"
},
{
"userId": "fakeUser3k0000005",
"groupId": "3"
},
{
"userId": "fakeUser3k0000006",
"groupId": "4"
},
{
"userId": "fakeUser3k0000007",
"groupId": "5"
}
]
}
Ответ №1:
def start = (vars.get('__jm__Thread Group__idx') as int)
def offset = 5
я думаю Thread Group
, это ваше имя цикла jmeter.
вы должны построить цикл следующим образом
(start*offset).step((start 1)*offset,1){ index->
println it
}
итак, для start=5
вас будет индекс от 25 до 29
Комментарии:
1.
start.upto((start * offset).step((start 1) * offset, 1), { index -> def lineFromCsv = new File(file).readLines().get(index) data.add(['userId': lineFromCsv.split(',')[0], 'groupId': lineFromCsv.split(',')[1]]) })
Я получил это исключение: javax.script.ScriptException: groovy.lang.missingmethod Исключение: нет подписи метода: java.lang. Integer.step() применим для типов аргументов: (целое число, целое число) значения: [5, 1]2. используйте выражение, как я указал в ответе. нет upto.
Ответ №2:
- Чтобы получить 5 элементов в первой полезной нагрузке, вам необходимо определить смещение в
4
качестве__jm__Thread Group__idx
значения переменной0
во время первой итерации, вы можете проверить это с помощью отладочного сэмплера и просмотра комбинации прослушивателя дерева результатов - Чтобы начать 2-ю итерацию с позиции
4
, вам нужно сохранитьoffset
значение в переменной JMeter после построения первой полезной нагрузки и прочитать его во время 2-й итерации.