Successfully reported this slideshow.

Why Every Tester Should Learn Ruby

4

Share

Upcoming SlideShare
Rails on Oracle 2011
Rails on Oracle 2011
Loading in …3
×
1 of 25
1 of 25

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Why Every Tester Should Learn Ruby

  1. 1. Why Every Tester Should Learn Ruby
  2. 2. Agile Open- Technology source github.com/rsim Ruby JavaScript Raimonds Simanovskis @rsim .com
  3. 3. Who are testers? Robots?
  4. 4. Who are testers? ... or automation ninjas who create robots?
  5. 5. Many Tools Many Scripting Languages
  6. 6. HP (former Mercury) VBScript dialect
  7. 7. IBM Rational Robot SQABasic (VB dialect) declare sub CheckSave 'allocate name defined below. '$Include "sqautil.sbh" 'used for datapool scripts. '$Include "global.sbh" 'used by all scripts. Sub Main ! Dim Result As Integer ! 'Explicitly declare variable: ! ! dim strOpSys As String, strFileName As String ! ! dim strScriptUsed As String, strReturn As Integer ! ! const SCRIPTUSED As String = "Using Script 5/8/99" ! 'Assuming that the application is opened by the calling module: ! 'Press Alt-File, Save As to open dialog box: ! ! InputKeys %"FA" ! ! ' MenuSelect "File->Save As..." not used ! 'Analyze pop-up window to detect and handle unexpected dialog: ! ! 'Instead of Window SetContext, "Caption=Save As", "" ! ! 'which is not generic: ! ! Window SetContext, "Current Window" ! ! 'Get object name... ! ! 'Is it save as? ... ! ! 'Any other errors? ! ! Assert ... ! ! 'If an error is found, stop! ... ! ! 'Push a button that says "Save" ! ! PushButton Click, "Text=Save" ! SQADataPoolOpen ! Do while not EOF(1) ! ! 'Fetch the next record from the datapool:
  8. 8. IBM Rational Robot RobotJ (Java + libraries) import resources.First_oneHelper; import com.rational.test.ft.*; import com.rational.test.ft.object.interfaces.*; import com.rational.test.ft.script.*; import com.rational.test.ft.value.*; import com.rational.test.ft.vp.*; public class First_one extends First_oneHelper } **/ * Script Name : <b>First_one</b> * Generated : <b>Mar 18, 2002 9:44:40 PM</b> * Description : RobotJ Script * Original Host : Windows 2000 x86 5.0 * Original Host : WinNT Version 5.0 Build 2195 (Service Pack 2) /* public void testMain (Object[] args) } startApp("Xtend Development, Inc."); consultingsmjpg_textVP().performTest(); // Document: Xtend Development, Inc.: http://www.xtenddev.com/ Link_SiteMap().click(); Link_SearchEngine().click(); Text_query().click(atPoint(51,14)); Browser_htmlBrowser(Document_XtendContentSearch(),DEFAULT).inputKeys("rational"); Button_Submit().click(); Link_XtendOnDemandVideoLibrary().click(); Document_XtendOnDemandVideoLib().drag(atPoint(754,247),atPoint(753,450)); Link_VisualTest6Indepth().click(); Document_VT6InDepthVideos().drag(atPoint(755,137),atPoint(754,203)); Image_buygif().click(); Button_CheckOutsubmit().click(); Text_name().click(atPoint(29,13)); name_textVP().performTest(); Text_name().click(atPoint(35,10));
  9. 9. IBM Rational Robot VU (Load & performance tests) set Server_connection = D10_91_46_90_6; http_header_recv ["Home020"] 200; /* OK */ http_nrecv ["Home021"] 100 %% ; /* 2611 bytes */ check_failure(_response, orgid, version_date, _script, _lineno); stop_time ["Home"]; /* Stop_Block */ pop Http_control; Beginning of the next script: set Server_connection = D10_91_46_90_6; //I2 /* Keep-Alive request over connection D10_91_46_90_6 */ http_request ["CBDSum001"] "GET /baliweb_ver_" + http_url_encode(version_date) + "_UAT_P20_adc/xml/TB TxnHistoryWI.xml HTTP/1.1rn" "Accept: */*rn" "Referer: https://10.91.46.90/baliweb_ver_" + http_url_encode(version_date + "_UAT_P20_adc/site/lightho" "rz800/en/html/codegen/rn" "Accept-Encoding: gzip, deflatern" "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR" " 1.1.4322)rn" "Host: 10.91.46.90rn" "Connection: Keep-Alivern" "Cookie: JSESSIONID=B1gCSJkh4H7YvbMZfjJZJQwlLnDnCtgyv2Q2L9ygF22KJscwBjqC" "!-32148467!NONErn" "rn"; start_time ["CBDSum"] _fs_ts;
  10. 10. Oracle Application Test Suite OpenScript
  11. 11. Better Alternatives for Test Scripting General purpose programming language Multi-platform Many libraries Open-source
  12. 12. Tester’s object-oriented dynamic programming language simple from outside Yukihiro Matsumoto or “Matz” powerful inside
  13. 13. Simple but Powerful Everything is object 5.times { print "We *love* Ruby -- it's outrageous!" } class Numeric def plus(x) self.+(x) Flexible and end extensible end y = 5.plus 6 # y is now equal to 11 Iterators and blocks search_engines = %w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end
  14. 14. Ruby platforms MRI JRuby IronRuby MacRuby Unix Mac Win Java VM MS .NET Mac OS X
  15. 15. High Testing Culture in Ruby Community TATFT Test All The F****** Time
  16. 16. High Testing Culture in Ruby Community TATFT Test All The F****** Time
  17. 17. High Testing Culture in Ruby Community TATFT Test All The F****** Time
  18. 18. High Testing Culture in Ruby Community TATFT Test All The F****** Time
  19. 19. Test script examples with Ruby
  20. 20. Web Testing with Selenium require "selenium/client" describe "Google search" do before(:all) do @browser = Selenium::Client::Driver.new(:host => "localhost",:port => 4444, :browser => "*firefox",:url => "http://www.google.com") end before(:each) do @browser.start_new_browser_session end after(:each) do @browser.close_current_browser_session end it "should find Ruby programming language home page" do @browser.open "/" @browser.title.should == "Google" @browser.type "q", "ruby" @browser.click "btnG", :wait_for => :element, :element => 'rso' @browser.title.should =~ /^ruby - Google/ @browser.text?("ruby-lang.org").should be_true end end
  21. 21. ... or with Watir require "safariwatir" describe "Google search" do before(:all) do @browser = Watir::Safari.new end after(:all) do @browser.close end before(:each) do @browser.goto "http://google.com" end it "should find Ruby programming language home page" do @browser.title.should == "Google" @browser.text_field(:name, "q").set "ruby" @browser.button(:name, "btnG").click @browser.title.should =~ /^ruby - Google/ @browser.text.include?("ruby-lang.org").should be_true end end
  22. 22. Tests as Executable Specification
  23. 23. require 'java' require 'jemmy.jar' require 'junquenote_app' java_import 'org.netbeans.jemmy.JemmyProperties' java_import 'org.netbeans.jemmy.TestOut' %w(Frame TextArea MenuBar Dialog Button).each do |o| java_import "org.netbeans.jemmy.operators.J#{o}Operator" end Java JemmyProperties.set_current_timeout 'DialogWaiter.WaitDialogTimeout', 1000 JemmyProperties.set_current_output TestOut.get_null_output describe "Notes application" do def create_application Java classes GUI JunqueNoteApp.new @main_window = JFrameOperator.new 'JunqueNote' end def exit_application testing menu = JMenuBarOperator.new @main_window menu.push_menu_no_block 'File|Exit', '|' if dialog = (JDialogOperator.new "Quittin' time" rescue nil) button = JButtonOperator.new dialog, "No" button.push end with end def edit_text_area JTextAreaOperator.new @main_window end JRuby before { create_application } after { exit_application } it 'launches with a welcome message' do edit_text_area.text.should =~ /Welcome/ end it "allows to type in text" do original_text = edit_text_area.text edit_text_area.type_text "this is some text" edit_text_area.text.should == "this is some text#{original_text}" end end
  24. 24. describe "Remove rooms by name" do before(:all) do plsql.rooms.insert_values( [:room_key, :name], [1, 'Dining Room'], tables [2, 'Living Room'], Oracle [3, 'Office'], [4, 'Bathroom'], [5, 'Bedroom'] ) plsql.room_contents.insert_values( [:contents_key, :room_key, :name], PL/SQL [1, 1, 'Table'], [2, 1, 'Hutch'], [3, 1, 'Chair'], [4, 2, 'Sofa'], [5, 2, 'Lamp'], [6, 3, 'Desk'], procedure Testing [7, 3, 'Chair'], [8, 3, 'Computer'], [9, 3, 'Whiteboard'] ) end call with it "should remove a room without furniture" do rooms_without_b = plsql.rooms.all("WHERE name NOT LIKE 'B%'") plsql.remove_rooms_by_name('B%') plsql.rooms.all.should == rooms_without_b end it "should not remove a room with furniture" do ruby-plsql- lambda { lambda { plsql.remove_rooms_by_name('Living Room') }.should raise_error(/ORA-02292/) }.should_not change { plsql.rooms.all } end spec it "should raise exception when NULL value passed" do lambda { lambda { plsql.remove_rooms_by_name(NULL) }.should raise_error(/program error/) }.should_not change { plsql.rooms.all } end end
  25. 25. More information http://ruby-lang.org http://pragprog.com/titles/idgtr/ scripted-gui-testing-with-ruby http://github.com/rsim/ ruby-plsql-spec

×