JMeter: разделение набора данных между «пользователями» - PullRequest
0 голосов
/ 12 января 2019

У меня есть набор данных, полученный из запроса к базе данных, около 5000 элементов. Я хотел бы разделить эти данные на куски и затем сделать так, чтобы «пользователи» (потоки) сделали HTTP-запрос.

Цель этого состоит в том, чтобы у нас был сайт, который в реальном времени предоставляет информацию о переходных данных, я хочу смоделировать несколько одновременных запросов к службе.

1 - попытался создать план тестирования, в котором был выполнен запрос к БД, а затем обработан с помощью HTTP-запроса через контроллер ForEach. Это работает нормально, когда у меня есть только 1 «пользователь», однако; если я увеличу количество пользователей до 2+, тогда запрос к БД будет выполнен 2+ раза, и каждый «пользователь» пройдет через все 5000+ точек данных

2 - Я попытался переместить запрос к БД в его собственную группу потоков, а затем с помощью BeanShell поместить данные в среду (props.add (...)). Это сработало в том, что данные были там, но каждый «пользователь» в группе потоков HTTP-запроса повторил все данные.

В идеале я хотел бы получить данные, и группа потоков HTTP-запросов делит данные таким образом, чтобы поток 1 занял первые 2500, а поток 2 - вторые 2500 (или, если есть 4 «пользователя», то поток 1 занимает первые 1250, поток 2 - следующие 1250 и т. д.)

Я только начал смотреть на JMeter, и я не думаю, что он может сделать это «автоматически», но я хотел спросить, если мне не хватает чего-то очевидного.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Самый быстрый и простой способ - сохранить данные из базы данных в CSV-файл. После этого вы сможете использовать CSV Data Set Config и его Sharing Mode функцию в соответствии с вашими требованиями.

Хранение данных может быть сделано следующим образом:

  1. Определите Result variable name в вашем запросе JDBC Sampler:

    enter image description here

  2. Добавить JSR223 PostProcessor как дочерний элемент сэмплера JDBC Request
  3. Поместите следующий код в область «Сценарий»:

    resultSet = vars.getObject("resultSet")
    result = new StringBuilder()
    
    for (Object row : resultSet ) {
        iter = row.entrySet().iterator()
        while (iter.hasNext()) {
            pair = iter.next()
            result.append(pair.getValue())
            result.append(",")
        }
        result.append(System.getProperty("line.separator"))
    }
    
    org.apache.commons.io.FileUtils.writeStringToFile(new File("data.csv"), result.toString(), "UTF-8")
    

    Как только выполнение будет завершено, вы должны увидеть файл data.csv в папке "bin" вашей установки JMeter, содержащий данные из базы данных

0 голосов
/ 12 января 2019

Поместите элемент Counter в план тестирования с помощью:

Начальное значение: 1

Инкремент: 1

Ссылочное имя: (например) cid

и отключен «Счетчик треков независимо ...».

Затем добавьте сэмплер JSR223 или BeanShell и напишите простой код:

Integer cid = Integer.valueOf(vars.get("cid"));
Integer dataShift = 2500;

Integer startReadDataFrom = (cid - 1) * 2500;
vars.put('startReadDataFrom', String.valueOf(startReadDataFrom));

Затем вы можете использовать переменную $ {startReadDataFrom} в качестве отправной точки для чтения данных для каждого потока (0, 2500, 5000, 7500, ...).

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