Jmeter JSR223 Groovy читать файл построчно и делать http POST - PullRequest
2 голосов
/ 14 февраля 2020
  • Я пытаюсь перебрать файлы в папке. каждый файл имеет несколько строк json, разделенных символом новой строки. Как только json будет получен, он должен получить указанный c узел json и отправить его на http-сервер.

  • Изначально я думал, что буду использовать конфигурацию набора данных csv, но мне удалось получить вложенные json из файлов. После некоторых уроков чтения jmeter я наконец-то выбрал JSR223, чтобы создать собственный скрипт, который считывает файл и помещает в ctx, который будет использоваться сэмплером для отправки данных.

Вот что я делал до сих пор.

Test plan
    -> Thread group
        -> JSR223 PreProcessor : This is where i am reading file and adding it to vars, its like "json_{number}" and "GETfileLength"
    -> ForEach Controller : This is sibling of Thread group
        -> HTTP Request : Inside for Each controller has a configuration of host, port and the path and in the body i have mentioned ${json_out}
        -> View Results Tree 
        -> Summary Report    

Groovy скрипт присутствует в препроцессоре

    log.info("------ start ----------");
    File file = new File("/data/sample1.json")
    def line;
    def noOfLines=0
    file.withReader { reader ->
        while ((line = reader.readLine()) != null) {
            noOfLines++
            vars.put("json_"+noOfLines, line)
        }
    }
    vars.put("GETfileLength",noOfLines.toString()) ;
    log.info("------ end ----------");

enter image description here enter image description here enter image description here

  • В приведенной выше иерархии плана тестирования я не вижу, как вызывается скрипт (проверенные журналы). Если я удаляю контроллер forEach, вызывается скрипт, но я не знаю, как дать имя переменной в теле http POST для динамических c переменных.

1 Ответ

1 голос
/ 15 февраля 2020

В соответствии с документацией

Препроцессор выполняет некоторое действие перед выполнением запроса на выборку.

Проверьте Порядок выполнения

Обратите внимание, что таймеры, утверждения, пре- и постпроцессоры обрабатываются только при наличии сэмплера, к которому они применяются. Контроллеры и сэмплеры Logi c обрабатываются в том порядке, в котором они отображаются в дереве. Другие тестовые элементы обрабатываются в соответствии с областью, в которой они находятся, и типом тестового элемента. [Внутри типа элементы обрабатываются в порядке их появления в дереве]

По этой причине ваш скрипт не работает для контроллера forEach.

Попробуйте используя JSR223 Sampler вместо препроцессора JSR223. Вы также можете игнорировать результат выборки.

...