test automation in ruby v2

Post on 14-Apr-2017

343 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Test Automation using

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

23 April 2016, Iasi

@sveat0slav

@sveat0slav #AutomationRuby

Sponsors

@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)

@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

@sveat0slav

@sveat0slav #AutomationRuby

#ByTheCommunityForTheCommunity #AutomationRuby@sveat0slav @tabaradetestare

@sveat0slav #AutomationRuby

“Good software testing is a challenging

intellectual process.”

“Continuous learning

required” By Alexandru Rotaru

@altomalex, altom.ro

@sveat0slav

@sveat0slav #AutomationRuby

@sveat0slav #AutomationRuby

•Dynamic•Simple syntax•IRB•Object oriented

•Cross-platform

•Powerful•Massive support

THE RUBY LANGUAGE

@sveat0slav #AutomationRuby

1. WATIR – Web Application Testing in Ruby

@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

@sveat0slav #AutomationRuby

HOW WATIR WORKS?

@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'

@sveat0slav #AutomationRuby

@sveat0slav #AutomationRuby

READY FOR SOME CODE?

@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

@sveat0slav #AutomationRuby

@sveat0slav #AutomationRuby

THE DOM LOCATORS TREE OF LIFE

@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)…

@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

@sveat0slav #AutomationRuby

@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 }

@sveat0slav #AutomationRuby

Writes all images’ url’s to a new array

a = Array.newb.imgs.each {|x| a.push(x.src) }puts a

@sveat0slav

@sveat0slav #AutomationRuby

@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

@sveat0slav #AutomationRuby

@sveat0slav #AutomationRuby

2. ANY GUI AUTOMATION – AUTOIT AND SIKULI

Simple AutoIT Example Simple Sikuli Example (on jRuby)

@sveat0slav #AutomationRuby

3. WEB SERVICES AUTOMATION USING RUBY

@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

@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')

@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

@sveat0slav #AutomationRuby

4. DATABASES

@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)

@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

@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

@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

@sveat0slav #AutomationRuby

@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

@sveat0slav #AutomationRuby

RSPEC AND EXTENSIVE LOGGING

@sveat0slav #AutomationRuby

6. CONTINUOUS INTEGRATION WITH JENKINS

@sveat0slav #AutomationRuby

7. INTEGRATION WITH SAUCE LABS

@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

@sveat0slav #AutomationRuby

QUESTIONS ?…

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

top related