Как сравнить службу RESTful с переменными параметрами?

В настоящее время я работаю над бенчмаркингом службы RESTful, которую я сделал, и часть этого заключается в том, чтобы убедиться, что она работает разумное количество раз для большого набора параметров. Например, предположим, что у меня есть RESTful API вида some_site.com/item?item_id=y. В этом случае, чтобы быть уверенным, что мой сервис работает так быстро, как мне хотелось бы, я хотел бы попробовать много значений для y одно за другим, желательно из какого-нибудь текстового файла. Я не могу понять, как это сделать в ab или httperf. Я готов использовать другую программу бенчмаркинга, если она у меня есть, но предпочел бы что-то простое и легкое. То, что я хочу сделать, кажется чем-то довольно стандартным, поэтому я предполагаю, что уже должна быть программа, которая позволяет мне это сделать, но час или около того гугления не дал мне ответа. Идеи?


person Eli    schedule 05.03.2012    source источник
comment
Вы можете написать простой скрипт bash/php/perl для этого задания и отслеживать время загрузки для каждого вызова.   -  person Martin Rothenberger    schedule 06.03.2012
comment
Да, но это кажется чем-то настолько обычным, что я предположил, что уже существует обычное решение. Я думаю, может быть, все-таки нет...   -  person Eli    schedule 06.03.2012


Ответы (2)


Ответ: Jmeter (что, по-видимому, круто). В этом разделе часто задаваемых вопросов объясняется, как это сделать. Надеюсь, это поможет кому-то еще, так как мне потребовался день поиска, чтобы понять это.

person Eli    schedule 07.03.2012

У меня только что был хороший опыт использования JavaScript (через BSF/Rhino) в JMeter.

Я поместил одну группу потоков в свой план тестирования и вставил «Простой контроллер» с двумя элементами под ним — сэмплером «Запрос HTTP» и «Предварительный процессор BSF».

Установите язык BSF на «javascript» и либо введите код в текстовое поле, либо укажите его на файл (используйте полный путь или относительно CWD процесса JMeter).

/* Since `Math.random()` gives us float, we use `java.util.Random()`
 * see: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html */
var Random = new Packages.java.util.Random();

var min = 10-1;
var max = 2;
var maxLines = (min)+Random.nextInt(max-min);

var s = '';

for (var d = 0; d <= maxLines; d++) {
  s += d.toString()+','+Random.nextInt(1000).toString()+'\n';
}

// s => '0,312\n1,104\n2,608\n'

vars.put('PAYLOAD', s);

Теперь я могу ссылаться на ${PAYLOAD} в HTTP-запросе!

Вы можете сгенерировать JSON, но вам потребуется обновить jakarta-jmeter-2.5.1/lib/js-1.6R5.jar до последней версии Rhino, чтобы получить JSON.stringify и JSON.parse. Это отлично сработало и для меня, хотя я подумал, что приведу здесь простой пример.

Вы также можете использовать препроцессор BSF для параметров URL, просто установите другую переменную с помощью vars.put('X', 'some value') и передайте ее как ${X} в параметре запроса.

Это сообщение в блоге очень помогло немного, кстати.

person errordeveloper    schedule 03.04.2012