【问题标题】:How do I Benchmark RESTful Service with Variable Parameters?如何使用可变参数对 RESTful 服务进行基准测试?
【发布时间】:2012-03-05 22:06:21
【问题描述】:

我目前正在对我制作的 RESTful 服务进行基准测试,其中一部分是确保它针对大量参数在合理的时间内运行。例如,假设我有 some_site.com/item?item_id=y 形式的 RESTful API。在这种情况下,为了确保我的服务以我希望的速度运行,我想一一尝试 y 的许多值,最好来自某个文本文件。我想不出在 ab 或 httperf 中执行此操作的任何方法。如果我有的话,我愿意使用不同的基准测试程序,但我更喜欢简单而轻便的东西。我想做的事情似乎很标准,所以我猜肯定已经有一个程序可以让我这样做,但是一个小时左右的谷歌搜索并没有给我答案。想法?

【问题讨论】:

  • 您可以为此作业编写一个简单的 bash/php/perl 脚本并跟踪每次调用的加载时间。
  • 是的,但这似乎很常见,以至于我认为已经有一个传统的解决方案。我想也许毕竟没有……

标签: rest benchmarking jmeter apachebench httperf


【解决方案1】:

答案:Jmeter(这显然很棒)。 This faq 解释了如何做到这一点。希望这对其他人有所帮助,因为我花了一天的时间才弄清楚这一点。

【讨论】:

    【解决方案2】:

    我刚刚在 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);
    

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

    您可以生成 JSON,但您需要将jakarta-jmeter-2.5.1/lib/js-1.6R5.jar 升级为最新版本的Rhino 以获得JSON.stringifyJSON.parse。这对我也很有效,虽然我想我会在这里举一个简单的例子。

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

    顺便说一句,This blog post 帮了不少忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多