Speedos incorporates BrowserMob Proxy along with Capybara, recording the web traffic and time taken to load all elements on each of the pages within a user journey. The aim is to identify any performance related issues, such as specific items that take a long time to load on page.
Put speedos on your Gemfile
gem 'speedos'
# MUST ADD: 'selenium-webdriver', '2.35.1'
gem 'selenium-webdriver', '2.35.1'
# OPTIONAL (if you want to use a properly working harviewer):
gem 'har', git: 'https://github.com/PeterWuMC/har.git'
Or, install it via rubygem
$ gem install speedos
The easiest and quickest way to get you started is to run the init script
$ speedos init
and it will generate following file structure for you:
├── .irbrc
├── Rakefile
├── config
│ ├── initializer.rb
│ └── mongoid.yml
├── helpers
├── log
└── scripts
It is essential to let speedos know the location of your mongoid.yml by...
Speedos::Configuration.load_mongoid_config('/location/to/my/mongoid.yml')
Refer to mongoid documentation for the correct format of mongoid.yml http://mongoid.org/en/mongoid/docs/installation.html
By default, speedos will output all the logging using STDOUT, you can override this method by either
# pass in a Logger Object
Speedos::Log.logger = Logger.new(…)
or
# the location where you want the log to be saved
Speedos::Log.logger = "/location/to/desire/log/location"
you should put all your script under /scripts
require 'speedos'
Speedos::Performance.test do |page|
page.is 'simplybusiness-main-page' do
# page.driver is a capybara session instance
page.driver.visit 'https://www.simplybusiness.co.uk/'
page.driver.fill_in 'ctaText', with: "IT contractor"
end
page.is 'business-insurance-page' do
page.driver.find_button('ctaBtn').click
end
end
If you use init
to generate your structure, you should get Rakefile
created. And it will create rake task for all the scripts you have created in /scripts
└── scripts
├── earth
│ └── grass.rb
├── human.rb
└── sky
├── cloud.rb
└── rain.rb
For example, if you have above scripts structure, then you should get the following rake tasks created
$ rake -T
rake earth:grass # run the script located in /Users/pwu/test/scripts/earth/grass.rb
rake human # run the script located in /Users/pwu/test/scripts/human.rb
rake sky:cloud # run the script located in /Users/pwu/test/scripts/sky/cloud.rb
rake sky:rain # run the script located in /Users/pwu/test/scripts/sky/rain.rb
You can access the performance data via Speedos::Record
object
$ irb
> Speedos::Record.first.pages
#=> [Entries: ["simplybusiness-main-page"], Entries: ["google-result-page"]]
> Speedos::Record.first.pages.first
#=> Entries: ["simplybusiness-main-page"]
> Speedos::Record.first.pages.first.total_load_time
#=> 3828.0
# which is the total loading time for the page in milliseconds