Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用HTTParty测试api响应时间_Ruby_Api_Testing_Automation_Httparty - Fatal编程技术网

Ruby 使用HTTParty测试api响应时间

Ruby 使用HTTParty测试api响应时间,ruby,api,testing,automation,httparty,Ruby,Api,Testing,Automation,Httparty,我们的一个api服务有一些性能增强。我被要求获得一些随机数据,并记录新的和旧的响应时间,以便我们可以看到并排的例子。我编写了一个快速脚本,从数据库中获取随机数据,并在两个调用中使用相同的数据迭代结果集。我在同一个循环中使用HttpParty进行两次调用,但第一次调用似乎比应该的慢多了。如果我把这两个电话调换一下,旧的电话现在就快了,不应该这样。下面是我正在做的事情 如果我切换新旧通话,我应该可以看到时间的反映,但时间没有反映出来,新通话现在真的很慢 谁能告诉我我做错了什么?提前谢谢。如果我的问题

我们的一个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,我在记录的调用之前添加了启动调用,这似乎有帮助,它们现在响应正常。有没有更好的方法来编写这样的测试?