我目前正在对我制作的 RESTful 服务进行基准测试,其中一部分是确保它针对大量参数在合理的时间内运行。例如,假设我有 RESTful API 的形式some_site.com/item?item_id=y
。在这种情况下,为了确保我的服务以我希望的速度运行,我想一一尝试 y 的许多值,最好来自某个文本文件。我想不出在 ab 或 httperf 中执行此操作的任何方法。如果我有的话,我愿意使用不同的基准测试程序,但我更喜欢简单和轻便的东西。我想做的事情似乎很标准,所以我猜肯定已经有一个程序可以让我这样做,但是一个小时左右的谷歌搜索并没有给我答案。想法?
问问题
1110 次
2 回答
1
答案:Jmeter(这显然很棒)。此常见问题解答说明了如何执行此操作。希望这对其他人有所帮助,因为我花了一天的时间才弄清楚这一点。
于 2012-03-07T20:56:51.623 回答
1
我刚刚在 JMeter 中使用 JavaScript(通过 BSF/Rhino)有了一些很好的经验。
我在我的测试计划中放置了一个线程组,并粘贴了一个带有两个元素的“简单控制器”——“HTTP 请求”采样器和“BSF 预处理器”。
将 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);
现在我可以${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}
请求参数传递。
顺便说一句,这篇博文帮助很大。
于 2012-04-03T15:29:51.207 回答