【问题标题】:Measure response time for a HTTP request using Ruby使用 Ruby 测量 HTTP 请求的响应时间
【发布时间】:2013-03-18 02:25:28
【问题描述】:

我正在建立一个供个人使用的小型网站来测试我公司制作的 API。我的老板想要一个网站,我们可以在其中进入网站,使用 GET 或 POST 请求表单,以及发送请求的次数。他希望记录请求、每个请求的时间以及所有请求的平均时间。

有没有办法使用 Ruby 测量 GET 或 POST 请求的响应时间?

我查看了 Net::HTTP 库,但没有看到任何返回所用时间的内容。

是否有任何网站已经这样做了?他们需要有一个 GUI,以便非技术人员可以使用它。如果没有,我打算创建一个简单的表单来运行脚本,将该脚本的输出写入文本文件或电子表格,然后将其发送给用户。

还有其他建议吗? (一个漂亮的 AJAX 界面可能工作得很好,但可能需要数据库存储。每次运行 10000 个请求时,这可能会变得很庞大。

【问题讨论】:

  • 使用 Ruby 的 Benchmark Module 怎么样?
  • 很好的问题。
  • 基准测试似乎可以工作 - I found this post 看起来这正是他使用的。我会和我的老板讨论,也许会四处打听,看看这是否可能是最好的方法。

标签: ruby net-http


【解决方案1】:

正如 cmets 中提到的,ruby 有一个benchmark module

require "benchmark"

time = Benchmark.measure do
  #requests
end

【讨论】:

    【解决方案2】:

    Net::HTTP 不跟踪响应时间,因为这不是它的工作。

    在您的请求之前和之后使用Time.now 设置开始和结束时间:

    start_time = Time.now
    # ...do request...
    elapsed_time = Time.now - start_time
    

    如果您想取平均值,请将 elapsed_time 值相加并除以测试次数:

    total_time += elapsed_time
    # ... do some stuff...
    average_time = total_time / num_of_iterations
    

    时间可以精确到微秒,对于您的需求应该足够准确。

    界面由您自己决定,因为这是一个完全不同的主题,并且会构成一本书。

    【讨论】:

    • 虽然我在很多事情上都使用基准测试——你会在我的许多答案中找到它,而且我可能比任何处理 Ruby 答案的人都使用它——这对于这项任务来说太过分了。当我想测试多种算法并且需要格式化时间详细信息来处理用户与系统任务时,Benchmark 非常棒。在这种情况下,他们只需要知道打一次电话需要多长时间,然后平均结果。 Benchmark 的格式化结果需要重新解析和拆分才能达到与简单平均值相同的位置。
    • 感谢您的回复。我使用了基准测试,它做得很好,但我感谢您的意见。
    • 我喜欢这个答案,因为它减少了依赖的数量。
    • 谢谢。 Benchmark 将为原本应该是非常简单的任务增加大量额外开销,但有些人宁愿以艰难的方式学习。 :-)
    • 这个答案也是正确的。例如,您不能将 Benchmark 与 EventMachine 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多