test automation in ruby v2
TRANSCRIPT
![Page 1: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/1.jpg)
Test Automation using
Sveatoslav Cîrcel (@sveat0slav)Web: medbedb.github.io
23 April 2016, Iasi
![Page 2: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/2.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
Sponsors
![Page 3: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/3.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
What will be covered: Introduction How to get started in Automation? Web and Watir-Webdriver DOM elements and code examples Automated testing for any GUI using Ruby Automated testing for Web Services using Ruby Querying Databases using Ruby Few words about BDD Few words about Rake and Rspec Continuous Integration Integration with Sauce Labs (Cloud)
![Page 4: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/4.jpg)
@sveat0slav #AutomationRuby
Few words about meHusband, father, lover of Godand science, IT consultant & Scrum Master. Senior Developer at Endava. Few of my interests are: #Agile #Coding #Scripting #QA #Ruby #Java #Bible #Guitar Feel free to follow me on Twitter: twitter.com/sveat0slavOr read my blog: nnedbedb.wordpress.com
![Page 5: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/5.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
#ByTheCommunityForTheCommunity #AutomationRuby@sveat0slav @tabaradetestare
![Page 6: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/6.jpg)
@sveat0slav #AutomationRuby
“Good software testing is a challenging
intellectual process.”
“Continuous learning
required” By Alexandru Rotaru
@altomalex, altom.ro
![Page 7: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/7.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
![Page 8: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/8.jpg)
@sveat0slav #AutomationRuby
•Dynamic•Simple syntax•IRB•Object oriented
•Cross-platform
•Powerful•Massive support
THE RUBY LANGUAGE
![Page 9: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/9.jpg)
@sveat0slav #AutomationRuby
1. WATIR – Web Application Testing in Ruby
![Page 10: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/10.jpg)
@sveat0slav #AutomationRuby
What is Watir and why should we use it?
•Free
•Powerful
•Simple
•Excellent Support
• It uses Ruby
•Broad usage
•Multiple browsers
•Windows/tabs.
• JavaScript
•Frames
•Modal dialogs.
• Invisible runs
•Screen Capture
•… anything you can think of
![Page 11: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/11.jpg)
@sveat0slav #AutomationRuby
HOW WATIR WORKS?
![Page 12: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/12.jpg)
@sveat0slav #AutomationRuby
HOW TO GET STARTED WINDOWS MAC
1. Download and install Ruby.2. Install rubygems: gem
update --system3. Install DevKit4. Download and install
ChromeDriver. 5. Install Watir-Webdriver: gem
install watir-webdriver6. Open CMD, type: irb7. Type: require 'watir-
webdriver'8. Type: browser =
Watir::Browser.start 'iasi.codecamp.ro'
1. Download and install Ruby.
2. Install Watir-Webdriver: gem install
watir-webdriver
3. Open CMD, type: irb
4. Type: require 'watir-webdriver'
5. Type: browser =
Watir::Browser .start
'iasi.codecamp.ro'
![Page 13: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/13.jpg)
@sveat0slav #AutomationRuby
![Page 14: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/14.jpg)
@sveat0slav #AutomationRuby
READY FOR SOME CODE?
![Page 15: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/15.jpg)
@sveat0slav #AutomationRuby
OPEN A WEB PAGE AND SHOW TITLE AND TEXT
• require 'watir-webdriver'• b = Watir::Browser.new :chrome• b.goto 'iasi.codecamp.ro'
Returns current title of the page• b.title
Returns current text elements of the page• b.text
![Page 16: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/16.jpg)
@sveat0slav #AutomationRuby
![Page 17: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/17.jpg)
@sveat0slav #AutomationRuby
THE DOM LOCATORS TREE OF LIFE
![Page 18: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/18.jpg)
@sveat0slav #AutomationRuby
TextBox b.text_field(:name,’n’).set ’a’
Button b.button(:text, /text/).clickDropDown b.select_list(:id, ’id’).set
CheckBox b.checkbox(:class, ’cl’).click
Radio b.radio(:class, ’cl’).click
Link b.link(:href, ’URL’).click
Form b.form(:name, ’n’).set ’Value’
Frame b.frame(:id, ’frame1’).useAnd many more (div, label, image, etc)…
![Page 19: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/19.jpg)
@sveat0slav #AutomationRuby
INTERACTION WITH DOM
Interaction with DOM• b.link(:text, 'Sponsors').click
Small conditional validation testif b.text.include? 'Probably the largest IT conference in Romania!' puts 'Test passed.' else puts 'Test failed.'end
![Page 20: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/20.jpg)
@sveat0slav #AutomationRuby
![Page 21: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/21.jpg)
@sveat0slav #AutomationRuby
COLLECTIONS OF ELEMENTS
Returns all text links of the page•b.links.each {|x| unless x.text.empty? or x.text.nil?; puts x.text; end }
Returns all text of the page which is enclosed in <span> tags.•b.lis.each {|x| unless x.text.empty? or x.text.nil?; puts x.text; end }
Returns all images url’s of the page.•b.imgs.each {|x| puts x.src }
![Page 22: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/22.jpg)
@sveat0slav #AutomationRuby
Writes all images’ url’s to a new array
a = Array.newb.imgs.each {|x| a.push(x.src) }puts a
![Page 23: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/23.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
![Page 24: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/24.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
DEBUGGIN WITH IRBIRB = Interactive Ruby Shell; Command line-like interface that allows immediate running of Ruby script. Great for debugging one line at a time, rather then having to run through an entire script. Great for testing single lines
![Page 25: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/25.jpg)
@sveat0slav #AutomationRuby
![Page 26: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/26.jpg)
@sveat0slav #AutomationRuby
2. ANY GUI AUTOMATION – AUTOIT AND SIKULI
Simple AutoIT Example Simple Sikuli Example (on jRuby)
![Page 27: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/27.jpg)
@sveat0slav #AutomationRuby
3. WEB SERVICES AUTOMATION USING RUBY
![Page 28: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/28.jpg)
@sveat0slav #AutomationRuby
3.1 REST• First you will have to install a REST client gem: gem install rest-client
• Then use it like this:require 'rest-client' RestClient.get 'http://services.groupkt.com/country/get/all’RestClient.post 'http://example.com/resource', :param1 => 'one', :nested => { :param2 => 'two' } RestClient.delete 'http://example.com/resource’
For more details: http://www.rubydoc.info/gems/rest-client/1.8.0
![Page 29: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/29.jpg)
@sveat0slav #AutomationRuby
3.2 SOAP•First you will have to install a SOAP client gem:
gem install savon•Then use it like this:require ’savon' client = Savon.client(wsdl:'http://service.example.com?wsdl')
![Page 30: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/30.jpg)
@sveat0slav
@sveat0slav #AutomationRuby
client.operations # => [:find_user, :list_users]
# call the 'findUser' operation response = client.call(:find_user, message: { id: 42 })
response.body # => { find_user_response: { id: 42, name: 'Hoff' } }
For more details: http://www.rubydoc.info/gems/savon/2.11.1
SOAP Operations
![Page 31: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/31.jpg)
@sveat0slav #AutomationRuby
4. DATABASES
![Page 32: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/32.jpg)
@sveat0slav #AutomationRuby
Connecting Ruby to Mysql db•First you will have to install a db client (If needed):
gem install mysql •Then use it like this:db_host = "localhost" db_user = "root" db_pass = "root" db_name = "your_db_name" • client = Mysql::Client.new(:host => db_host, :username => db_user, :password => db_pass, :database => db_name)
![Page 33: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/33.jpg)
@sveat0slav #AutomationRuby
Executing the query
•client = Mysql::Client.new(:host => db_host, :username => db_user, :password => db_pass, :database => db_name)
•cdr_result = client.query('SELECT * from your_db_table_name')
Other DB adapters for ruby: https://www.ruby-toolbox.com/categories/SQL_Database_Adapters
![Page 34: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/34.jpg)
@sveat0slav #AutomationRuby
5. BDD: CUCUMBER & RSPECInstall the necessary gems by running:• gem install 'cucumber'• gem install 'watir-webdriver'• gem install 'rspec-expectations‘Setup Env.rb (next slide)Create GoogleSearch.feature:Feature: "When I go to the Google search page, and search for an item, I expect to see some reference to that item in the result summary.“
Scenario: 1. Search BDD in Google (Positive) Given that I have gone to the Google page When I add "BDD" to the search box And click the Search Button Then " behavior-driven development" should be mentioned in the results
![Page 35: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/35.jpg)
@sveat0slav #AutomationRuby
CREATE CODE FOR YOUR FEATURESGiven /^that I have gone to the Google page$/ do @browser.goto('www.google.com')endWhen /^I add "(.*)" to the search box$/ do |item| @browser.text_field(:name, 'q').set(item)end
And /^click the Search Button$/ do @browser.button(:name, 'btnG').clickEnd
Then /"(.*)" should be mentioned in the results/ do |text| @browser.text.should =~ /#{text}/End
Run using the following command: cucumber GoogleSearch.feature
![Page 36: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/36.jpg)
@sveat0slav #AutomationRuby
![Page 37: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/37.jpg)
@sveat0slav #AutomationRuby
RAKE – RUNNING SCRIPTS GROUPED IN TASKS.
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec) do |t| t.pattern = FileList['spec/*_spec.rb'] t.rspec_opts = '--format html > ./results.html' end
task :default => :spec
![Page 38: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/38.jpg)
@sveat0slav #AutomationRuby
RSPEC AND EXTENSIVE LOGGING
![Page 39: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/39.jpg)
@sveat0slav #AutomationRuby
6. CONTINUOUS INTEGRATION WITH JENKINS
![Page 40: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/40.jpg)
@sveat0slav #AutomationRuby
7. INTEGRATION WITH SAUCE LABS
![Page 41: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/41.jpg)
@sveat0slav #AutomationRuby
SublimeNotepad++
TOOLS FOR ACCESSING DOM ELEMENTS USEFUL TOOLS/IDEs
FireBug Xpath CheckerWATIR::SupportsSubElements IE Developer Tool bar
Further Reading and Automation ideas1 MAC OS X Automation http://www.rubydoc.info/gems/AXElementshttps://www.youtube.com/watch?v=G9O5wzb7oTY
2 Windows OS Automationhttp://itreallymatters.net/post/2352350743/automating-windows-and-their-controls-with-rubyhttp://www.gearheadforhire.com/articles/ruby/win32-autogui/using-ruby-to-drive-windows-applicationshttp://phrogz.net/programmingruby/win32.html
3 Home Automation using Ruby and Raspberry Pihttps://steve.dynedge.co.uk/2013/03/29/remote-controlled-home-automation-using-sinatra-ruby-and-the-lightwaverf-wifi-box/http://harmdelaat.com/home-automation-with-x10-raspberry-pi-linux-and-ruby-on-rails/https://www.youtube.com/watch?v=u1guHGWD1TU&feature=em-uploademail
![Page 42: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/42.jpg)
@sveat0slav #AutomationRuby
QUESTIONS ?…
![Page 43: Test Automation In Ruby v2](https://reader036.vdocument.in/reader036/viewer/2022062401/58efcd021a28ab8d308b457b/html5/thumbnails/43.jpg)
Test Automation using RubyTwitter: sveat0slav (follow me on twitter will post the slides there) ;-)Web: medbedb.github.io
23 April 2016, Iasi
Please fill the online evaluation form after event