Jmeter如何通过迭代从csv文件构造相同大小的有效载荷

Jmeter how to construct payload with same size from csv file by iteration

我有一个包含 10 个用户 ID 的 csv 文件,要求为 csv 中的每 5 个用户构建一个有效负载。下面是我的代码:

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())

我的第一个问题是为什么第一个有效载荷(第一次迭代)中有 6 个项目,而我期望的是 5 个。第二个有效载荷(第二次迭代)中有 5 个项目符合预期。每个有效负载都应该包含相同数量的项目。
我的第二个问题是如何让第二个有效载荷从第一个有效载荷停止的地方开始解析。第二个有效负载应该包含 csv 中的下 5 个用户?每个有效载荷之间不应有任何重叠项。
以下是有效载荷:
第一个有效负载:

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"
        }
    ]
}

第二个有效负载:

POST data:
{
    "data": [
        {
            "userId": "fakeUser3k0000003",
            "groupId": "2"
        },
        {
            "userId": "fakeUser3k0000004",
            "groupId": "2"
        },
        {
            "userId": "fakeUser3k0000005",
            "groupId": "3"
        },
        {
            "userId": "fakeUser3k0000006",
            "groupId": "4"
        },
        {
            "userId": "fakeUser3k0000007",
            "groupId": "5"
        }
    ]
}
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. 为了在第一个有效负载中获得 5 个项目,您需要将偏移量定义为 4,因为 __jm__Thread Group__idx 变量值在第一次迭代期间为 0,您可以使用Debug Sampler and View Results Tree listener combination
  2. 为了从位置 4 开始第二次迭代,您需要在构建第一个有效负载后将 offset 值存储到 JMeter Variable 中,并在第二次迭代期间读取它。