在RUBY中运行断言语句的平均时间?

时间:2016-04-27 14:17:50

标签: ruby eclipse selenium-webdriver watir-webdriver

我知道这是一个开放式的问题,但我已经接管了运行使用RUBY并需要对其进行性能改进的自动化包。

我想知道是否有人知道在Ruby中运行一个简单的断言(true,false,equal等)需要多长时间?

有些测试运行时很长,包含很多断言(一次测试超过7000次!)。

能够消除甚至只是经常被调用的一些断言可以帮助很多。在我们花时间重构之前,我只需要能够向我的经理证明纸上的好处。

这个新手可以提供任何帮助! 谢谢, 丛生

1 个答案:

答案 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

总之,断言很快,但检查浏览器的速度很慢。删除断言只会加快测试套件的速度,如果它们减少了对浏览器的调用次数。