jMeter: загрузить несколько строк из файла CSV в тело HTTP - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь создать HTTP-запрос к службе, которая принимает список элементов, например:

{
    "user": "john", 
    "table": "goods",
    "articles": [ 
        {"id": "003", "quantity": 1},
        {"id": "004", "quantity": 1},
        {"id": "023", "quantity": 2},
        {"id": "011", "quantity": 3},
        {"id": "063", "quantity": 1},
        {"id": "006", "quantity": 7}
    ]
}

Моя цель - загрузить ВСЕ статьи из CSV-файл, сделанный следующим образом:

enter image description here

Я хотел бы получить что-то вроде:

{
    "user": "john", 
    "table": "goods",
    "articles": [ 
        {"id": "${id}", "quantity": ${qte}}
    ]
}

Кто-нибудь может мне помочь?



ОБНОВЛЕНИЕ:

Дмитрий Т решил мою проблему, спасибо! Я также спросил его, как добавить объект JSON (словарь) к моему телу, пока он отвечал, я нашел решение, которым я поделюсь здесь, если кому-то это понадобится. Если вы хотите добавить:

"user": {"id": 1, "name": "John"}

к вашему телу, вам просто нужно сделать это:

def user = [:]

//populate user
user.put('id', 1)
user.put('name', 'John')

//add user entity to body content
content.put("user", user)

Веселитесь!

1 Ответ

1 голос
/ 03 марта 2020

Вы не сможете получить что-то подобное, как описано выше, единственный способ динамически построить тело запроса JSON - это создать его программным способом, используя JSR223 PreProcessor

  1. Добавьте препроцессор JSR223 в качестве дочернего элемента запроса, тело которого вы хотите параметризовать
  2. Поместите следующий код в область «Сценарий»:

    def content = [:]
    content.put('user', 'john')
    content.put('table', 'goods')
    def articles = []
    new File('test.csv').readLines().each { line ->
        def article = [:]
        article.put('id', line.split(',')[0])
        article.put('quantity', line.split(',')[1])
        articles.add(article)
    }
    content.put('articles', articles)
    sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(content).toPrettyString(), '')
    sampler.setPostBodyRaw(true)
    
  3. Вот и все, когда вы запускаете тест, препроцессор генерирует тело запроса из файла CSV и добавляет его в сэмплер HTTP Request на лету.

Справочные материалы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...