Ruby 使用HTTParty测试api响应时间
我们的一个api服务有一些性能增强。我被要求获得一些随机数据,并记录新的和旧的响应时间,以便我们可以看到并排的例子。我编写了一个快速脚本,从数据库中获取随机数据,并在两个调用中使用相同的数据迭代结果集。我在同一个循环中使用HttpParty进行两次调用,但第一次调用似乎比应该的慢多了。如果我把这两个电话调换一下,旧的电话现在就快了,不应该这样。下面是我正在做的事情 如果我切换新旧通话,我应该可以看到时间的反映,但时间没有反映出来,新通话现在真的很慢 谁能告诉我我做错了什么?提前谢谢。如果我的问题不清楚,请告诉我Ruby 使用HTTParty测试api响应时间,ruby,api,testing,automation,httparty,Ruby,Api,Testing,Automation,Httparty,我们的一个api服务有一些性能增强。我被要求获得一些随机数据,并记录新的和旧的响应时间,以便我们可以看到并排的例子。我编写了一个快速脚本,从数据库中获取随机数据,并在两个调用中使用相同的数据迭代结果集。我在同一个循环中使用HttpParty进行两次调用,但第一次调用似乎比应该的慢多了。如果我把这两个电话调换一下,旧的电话现在就快了,不应该这样。下面是我正在做的事情 如果我切换新旧通话,我应该可以看到时间的反映,但时间没有反映出来,新通话现在真的很慢 谁能告诉我我做错了什么?提前谢谢。如果我的问题
class ProductCompare < Test::Unit::TestCase
def test_compare
def time_diff(start, finish)
((finish - start) * 1000.0).to_i
end
begin
api_conn = Mysql.new()
random_skus = api_conn.query("Select random data")
random_skus.each do |row|
puts row.join("\s")
products1 = "http://api-call-old/#{row.join("\s")}"
start_time1 = Time.now
response1 = HTTParty.get(products1)
end_time1 = Time.now
products1_elapsed_tm = time_diff(start_time1, end_time1)
puts "The response time for response1 is: #{products1_elapsed_tm} ms"
products2 = "http://api-call-new/#{row.join("\s")}"
start_time2 = Time.now
response2 = HTTParty.get(products2)
end_time2 = Time.now
products2_elapsed_tm = time_diff(start_time2, end_time2)
puts "The response time for response2 is: #{products2_elapsed_tm} ms"
assert_equal(response1.body, response2.body, 'The products responce did not match')
end
api_conn.close
rescue Mysql::Error => e
puts e.error
ensure
api_conn.close if api_conn
end
end
end
有可能是DNS解析之类的东西减慢了第一次呼叫的速度,不管它是哪个。如果您首先发出一个虚拟请求来“为泵充注”,那么真正的请求是否会在这之后立即执行?是的,请使用主机的IP地址,而不是在URL中使用FQDN。这将有助于消除任何DNS不确定性。此外,考虑使用CURL进行测试。它非常适合像您正在做的那样自动化测试,并且通过使用时间旋度…您将获得测试的运行时间。@RunscopeAPITools,我在记录的调用之前添加了启动调用,这似乎有帮助,它们现在响应正常。有没有更好的方法来编写这样的测试?