如何使用可变参数对RESTful服务进行基准测试?

时间:2012-03-05 22:06:22

标签: rest benchmarking jmeter apachebench httperf

我目前正致力于对我所做的RESTful服务进行基准测试,其中一部分是确保它在一定数量的时间内运行大量参数。例如,假设我有some_site.com/item?item_id=y形式的RESTful API。在这种情况下,为了确保我的服务能够像我希望的那样快速地工作,我想逐个尝试y的许多值,最好来自某些文本文件。我无法弄清楚在ab或httperf中这样做的方法。如果有的话,我愿意使用不同的基准测试程序,但我更喜欢简单明了的东西。我想要做的事情似乎是非常标准的东西,所以我猜我们必须已经有一个让我这样做的程序,但是一个小时左右的谷歌搜索并没有得到答案。想法?

2 个答案:

答案 0 :(得分:1)

答案:Jmeter(显然很棒)。 This faq解释了如何做到这一点。希望这有助于其他人,因为它花了我一天的时间来寻找这个。

答案 1 :(得分:1)

我在JMeter中使用JavaScript(通过BSF / Rhino)获得了一些很好的经验。

我已经在我的测试计划中添加了一个线程组,并在其下面添加了一个“Simple Controller”,其中包含两个元素 - “HTTP Request”采样器和“BSF PreProcessor”。

将BSF语言设置为“javascript”,然后在文本框中键入代码或将其指向文件(使用完整路径或相对于JMeter进程的CWD)。

/* 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);

现在我可以在HTTP请求中引用${PAYLOAD}

您可以生成JSON,但是您需要使用最新版本的Rhino升级jakarta-jmeter-2.5.1/lib/js-1.6R5.jar才能获得JSON.stringifyJSON.parse。这对我来说也很完美,不过我觉得我在这里举了一个简单的例子。

您也可以将BSF预处理器用于网址参数,只需使用vars.put('X', 'some value')设置另一个变量,并将其作为${X}传递给请求参数。

顺便说一下,

This blog post帮助了很多。