我知道这是一个开放式的问题,但我已经接管了运行使用RUBY并需要对其进行性能改进的自动化包。
我想知道是否有人知道在Ruby中运行一个简单的断言(true,false,equal等)需要多长时间?
有些测试运行时很长,包含很多断言(一次测试超过7000次!)。
能够消除甚至只是经常被调用的一些断言可以帮助很多。在我们花时间重构之前,我只需要能够向我的经理证明纸上的好处。
这个新手可以提供任何帮助! 谢谢, 丛生
答案 0 :(得分:1)
断言本身非常快。在下面的规范中,您可以看到可以在不到一秒的时间内轻松完成14,000个断言。
require 'rspec/autorun'
RSpec.describe 'assert' do
it 'is fast for a simple comparision' do
7000.times { expect(1).to eq(1) }
end
it 'is fast for include' do
7000.times { expect("aasdfas flsajfalds jfdsf lksa jfd test asfdsadf sadfsadf").to include('test') }
end
end
#=> Finished in 0.0312 seconds (files took 0.1092 seconds to load)
#=> 2 examples, 0 failures
正在检查浏览器使断言变慢。在以下规范中,您可以看到只需要50秒来检查文本 100 次。
require 'rspec/autorun'
require 'watir-webdriver'
RSpec.describe 'assert url' do
it 'is fast for include' do
start_setup = Time.now
browser = Watir::Browser.new :chrome
browser.goto('http://www.example.com/')
puts "start browser: #{Time.now - start_setup} seconds"
100.times { expect(browser.text).to include('illustrative') }
end
end
#=> start browser: 1.947 seconds
#=> Finished in 52.92 seconds (files took 0.441 seconds to load)
#=> 1 example, 0 failures
删除对浏览器的重复调用,允许我们再次快速做出许多断言(除了浏览器设置)。
require 'rspec/autorun'
require 'watir-webdriver'
RSpec.describe 'assert url' do
it 'is fast for include' do
start_setup = Time.now
browser = Watir::Browser.new :chrome
browser.goto('http://www.example.com/')
puts "start browser: #{Time.now - start_setup} seconds"
text = browser.text
7000.times { expect(text).to include('illustrative') }
7000.times { expect(text).not_to include('some other text') }
end
end
#=> start browser: 1.972 seconds
#=> Finished in 2.75 seconds (files took 0.3432 seconds to load)
#=> 1 example, 0 failures
总之,断言很快,但检查浏览器的速度很慢。删除断言只会加快测试套件的速度,如果它们减少了对浏览器的调用次数。