test automation in ruby v2

43
Test Automation using Sveatoslav Cîrcel (@sveat0slav) Web: medbedb.github.io 23 April 2016, Iasi

Upload: sveatoslav-circel

Post on 14-Apr-2017

349 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Test Automation In Ruby v2

Test Automation using

Sveatoslav Cîrcel (@sveat0slav)Web: medbedb.github.io

23 April 2016, Iasi

Page 2: Test Automation In Ruby v2

@sveat0slav

@sveat0slav #AutomationRuby

Sponsors

Page 3: Test Automation In Ruby v2

@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

@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

@sveat0slav

@sveat0slav #AutomationRuby

#ByTheCommunityForTheCommunity #AutomationRuby@sveat0slav @tabaradetestare

Page 6: Test Automation In Ruby v2

@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

@sveat0slav

@sveat0slav #AutomationRuby

Page 8: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

•Dynamic•Simple syntax•IRB•Object oriented

•Cross-platform

•Powerful•Massive support

THE RUBY LANGUAGE

Page 9: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

1. WATIR – Web Application Testing in Ruby

Page 10: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

HOW WATIR WORKS?

Page 12: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

Page 14: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

READY FOR SOME CODE?

Page 15: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

Page 17: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

THE DOM LOCATORS TREE OF LIFE

Page 18: Test Automation In Ruby v2

@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

@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

@sveat0slav #AutomationRuby

Page 21: Test Automation In Ruby v2

@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

@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

@sveat0slav

@sveat0slav #AutomationRuby

Page 24: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

Page 26: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

2. ANY GUI AUTOMATION – AUTOIT AND SIKULI

Simple AutoIT Example Simple Sikuli Example (on jRuby)

Page 27: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

3. WEB SERVICES AUTOMATION USING RUBY

Page 28: Test Automation In Ruby v2

@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

@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

@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

@sveat0slav #AutomationRuby

4. DATABASES

Page 32: Test Automation In Ruby v2

@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

@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

@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

@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

@sveat0slav #AutomationRuby

Page 37: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

RSPEC AND EXTENSIVE LOGGING

Page 39: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

6. CONTINUOUS INTEGRATION WITH JENKINS

Page 40: Test Automation In Ruby v2

@sveat0slav #AutomationRuby

7. INTEGRATION WITH SAUCE LABS

Page 41: Test Automation In Ruby v2

@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

@sveat0slav #AutomationRuby

QUESTIONS ?…

Page 43: Test Automation In Ruby v2

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