SlideShare a Scribd company logo
1 of 41
Functional UI testing
 of Adobe Flex RIA


            Viktor Gamov
  viktor.gamov@faratasystems.com
           August, 12 2011
Agenda
•   Why to test?
•   How to test?
•   What the automated testing means?
•   Automated testing tools
•   Automated testing architecture
•   Loading automation classes
•   Creating test-friendly applications
•   Bunch of Demos
Software has to satisfy the
          user!
Demo: Killer RIA
How to test?

• Unit Testing
• Functional (UAT, QA) Testing
• Integration Testing
• Load Testing
Metaphor: building the
           house
• think of unit tests as having the building inspector
  at the construction's site
• think of functional testing as having the
  homeowner visiting the house and being
  interested in how the house looks, if the rooms
  have the desired size
What automated
         testing means?
Automated testing is the use of software to control the
execution of tests, the comparison of actual outcomes to
predicted outcomes, and other test control and test
reporting functions.
General approaches

• Code-Driven Testing -               the public (usually) interfaces to
  classes, modules, or libraries are tested with a variety of input
  arguments to validate that the returned results are correct.

• GUI Testing -         a testing framework generates and records
  the UI events keystrokes and mouse clicks. The tester observes
  the changes reflected via the user interface to validate
  the observable behavior of the program.
Some Automated
      Testing tools
• HP QuickTest Professional (QTP)
• Selenium
• Ranorex
• FlexMonkey
HP QTP
•   All-in-one suite for automation testing
    enterprise applications

•   Supports the large pool of  software
    development environments like SAP , Web ,
    Oracle etc.
•   Support libraries out-of-the-box with Flex
    (qtp.swc, qtp_air.swc)

•   VBScript as scripting language
Selenium

•   Web applications testing

•   Open source and large community

•   Cross platform (Selenium IDE - browser
    extension)

•   Uses JavaScript as scripting language
Ranorex
•   Similar to QTP, but easier to use

•   Support various technologies: .NET, WPF,
    Silverlight, Qt, Win32, WFC, Java SWT, Flash/
    Flex

•   Script languages C#,VB.NET, IronPython

•   Integrates with Visual Studio 2010

•   Platform: Windows only
Flex Monkey
•   Open Source (commercial support available)

•   Flex apps testing centric tool

•   Cross platform (console - AIR application)

•   Generated FlexUnit 4 test code

•   Supports testing only Flex applications (no Flash)

•   Integration with Selenium IDE (FlexMonkium
    project)
Demo
and the QTP testing tool.


         Automated Testing
• automation tool — Automation tools are applications that use the data that is d
  include QTP, Omniture, and Segue.
• delegates — Flex framework components are instrumented by attaching a de
           Architecture
  time. The delegate class defines the methods and properties required to perfo
The following illustration shows the relationship between an application, an age

   Automation
      Tool             •   automation tool are applications that use the
                           data that provided by the agent.

                       •   automation agent facilitates communications
                           between an application and an automation
      Agent                tool.

                       •   delegates are Flex framework components are
                           instrumented by attaching a delegate class to
                           each component at run time. The delegate class
   Application             defines the methods and properties required
  built with Flex          to perform automation.



As this illustration shows, the automation tool uses an agent to communicate wit
Automation API
Core Flex API                    SystemManager




                                     Automation   Delegates
Automation API      Automation        Manager
                                                   Delegates
                                                      Delegates




                    QTP            FlexMonkey        Selenium
Agent Classes
                   Agent              Agent           Agent




Automation Tools   QTP             FlexMonkey        Selenium
You are not required to create an instance of your adapter in the init() method. You can also create this instance in
the APPLICATION_COMPLETE event handler if your agent requires that the application must be initialized before it is
instantiated.




   Automation flow
Understanding the automation flow
When the application is initialized, the AutomationManager object is created. In its init() method, it adds a listener
for Event.ADDED events.
The following image shows the order of events when the application is initialized and the AutomationManager class
constructs the delegate map.

1. Creates the display list.                   3. Listens for ADDED event.

     SystemManager                                  AutomationManager

     Display List

         HGroup
                                                        Automation
             Accordion

                    Button                     4. Maintains map of component
                    TextArea                      class to delegate class.


                                     {                                                }
         HGroup
                                         map[Button] = map[spark.components.Button]
             TextInput                   map[HGroup] = map[spark.components.HGroup]
             TextInput                   ...
         Button


2. Dispatches the ADDED
                                                         Delegate
   event for each UIComponent.

                                               5. Handles component events.
                                                  Records and plays back events
                                                  on component instances.


                               {   map[spark.components.Button] = SparkButtonAutomationImpl
                                   map[spark.components.HGroup] = SparkGroupAutomationImpl
                                   ...                                                        }
1 The SystemManager class creates the display list, a tree of visible objects that make up your application.
5 When it is created, the delegate class adds a reference to its instance in the delegate class map. The de
   then handles events during record and play-back sequences.
   The delegate is now considered registered with the component. It adds event listeners for the compon

               Automation flow
   and calls the AutomationManager when the component triggers those events.
After the components in the display list are instantiated and mapped to instances of their delegate classe
AutomationManager is ready to listen for events and forward them to the agent for processing.
The following image shows the flow of operation when a user performs an action that is a recordable event
the user clicks a Button control in the application.

1. User clicks on a component.

         Application               3. recordAutomationEvent() called.
        built with Flex
                                             Automation-
                                                                                Agent
                                              Manager


          Delegate                 4. Dispatches RECORD event.          5. Handles RECORD events.


           Button

2. Listens for component events
   such as CLICK.


1 The user clicks the Button control in the application. The SystemManager dispatches a MouseEvent.
2 The SparkButtonAutomationImpl class, the Button control’s automation delegate, listens for click e
   delegate’s click event handler, the delegate calls the AutomationManager recordAutomationEvent
Loading automation
        classes
• Compile time -            To compile an application that includes the
  automation classes, include automation libraries at compile time by
  using the compiler’s include-libraries option.

• Run time -         Compile your app without any additions. At run
  time, load your application into a wrapper SWF file that has built in
  automation libraries. This wrapper SWF file uses SWFLoader to
  load your application SWF file to be tested.
Creating test-friendly
        applications
•   providing meaningful identification of objects
    “submitPanel” rather than “myPanel” or “p1”

•   avoiding renaming objects
    if (!automationName) return label;

•   adding and removing containers from the
    automation hierarchy
    showInAutomationHierarchy = false;

•   instrumenting events
•   instrumenting custom components
Instrumenting events

• instrumenting existing events -                     the tools are not
  generally interested in recording all the events : MOUSE_OVER

• instrumenting custom events -              when you extend
  components, you often add events that are triggered by new
  functionality of that component

• blocking and overriding events -                 in some cases,
  you might want to block or override the default events that are
  recorded for a component
Instrumenting existing
         events
• override the replayAutomatableEvent()
  method of the IAutomationObject interface
• call the AutomationManager’s
                         method when a
  recordAutomatableEvent()
  button dispatch MOUSE_MOVE event
• define the new event for the agent
Instrumenting custom
         events
• call the Automation.automationManager2 class’s
  recordCustomAutomationEvent()   method

• define the new event for the agent
• listen for the AutomationCustomReplayEvent,
  get the details about it and replay the event
What is a custom
             component
•   A component extending from a standard component
    (No additional events, no additional properties)

•   A component extending from a standard component –
    Additional events/ additional properties

•   A component extending from a non container class, but
    the current class is a container.
Instrumenting custom
         components

• create a delegate class that implements the required
  interfaces (IAutomationObject)

• add testing-related code to the component (not
  recommended)
Create a delegate class
•   use a pattern for delegate class name
    [ComponentClassName]AutomationImpl

•   extend the UIComponentAutomationImpl
    or implement IAutomationObject interface

•   mark the delegate class as a mixin by using
    the [Mixin] metadata keyword
•   register the delegate with the
    AutomationManager by calling the
    Automation.registerDelegateClass()
Instrument component
  with a delegate class
•   override the getters of the automationName and the
    automationValue properties

•   add listeners for events that the automation tool
    records

•   override the replayAutomatableEvent() method

•   add the new component to custom class definition
    XML file (FlexMonkeyEnv.xml)
Instrument composite
          component

•   override the getter of the numAutomationChildren
    property and the methods to expose children:
    •  getAutomationChildren()
    •  getAutomationChildrenAt()
And one more thing...
PROBLEM


• Unless tests are run automatically, testing is
  ineffective
Solution: Use Jenkins

• Will automatically run tests for you
• Will tell you if they fail
• Provide you reports, result and metrics
• Can be downloaded from http://jenkins-ci.org/
• Very easy to setup and configure
Demo
Instead of an epilogue
«90% of coding is debugging. The other 10% is writing bugs»
     Bram Cohen, author of the BitTorrent protocol




  «If debugging is the process of removing bugs then
programming must be the process of putting them in»
                     Edsger Dijkstra
Be brave!
Just test and no more bugs!
Resources
• GorillaLogic http://goo.gl/Ly6dd
• FlexMonkey resources page http://goo.gl/
  eKKaZ
• Ranorex Flex Testing http://goo.gl/sJI1L
• Automation Docs http://goo.gl/PwuZc
• Blog on Flex Automation http://goo.gl/CCQ80
p.s. Sample code




https://github.com/gAmUssA/flex_flexmonkey_flexunit_ci

 http://myflex.org/presentations/symposium4/Viktor.zip

More Related Content

What's hot

2007 Max Presentation - Creating Custom Flex Components
2007 Max Presentation - Creating Custom Flex Components2007 Max Presentation - Creating Custom Flex Components
2007 Max Presentation - Creating Custom Flex Componentsmichael.labriola
 
Event and signal driven programming techniques
Event and signal driven programming techniquesEvent and signal driven programming techniques
Event and signal driven programming techniquesElizabeth Smith
 
Event and signal driven programming
Event and signal driven programmingEvent and signal driven programming
Event and signal driven programmingElizabeth Smith
 
Progressive Mobile Test Automation
Progressive Mobile Test AutomationProgressive Mobile Test Automation
Progressive Mobile Test AutomationRakhi Jain Rohatgi
 
Android tutorial (2)
Android tutorial (2)Android tutorial (2)
Android tutorial (2)Kumar
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksTsimafei Avilin
 

What's hot (9)

Dense And Hot 360 Flex
Dense And Hot 360 FlexDense And Hot 360 Flex
Dense And Hot 360 Flex
 
2007 Max Presentation - Creating Custom Flex Components
2007 Max Presentation - Creating Custom Flex Components2007 Max Presentation - Creating Custom Flex Components
2007 Max Presentation - Creating Custom Flex Components
 
9b4c1 vb(pd)
9b4c1 vb(pd)9b4c1 vb(pd)
9b4c1 vb(pd)
 
Event and signal driven programming techniques
Event and signal driven programming techniquesEvent and signal driven programming techniques
Event and signal driven programming techniques
 
Event and signal driven programming
Event and signal driven programmingEvent and signal driven programming
Event and signal driven programming
 
Applications lab
Applications labApplications lab
Applications lab
 
Progressive Mobile Test Automation
Progressive Mobile Test AutomationProgressive Mobile Test Automation
Progressive Mobile Test Automation
 
Android tutorial (2)
Android tutorial (2)Android tutorial (2)
Android tutorial (2)
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricks
 

Viewers also liked

JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»Viktor Gamov
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersViktor Gamov
 
Testing Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupTesting Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupViktor Gamov
 
[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016Viktor Gamov
 
[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet Streams[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet StreamsViktor Gamov
 
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017Viktor Gamov
 
[Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"![Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"!Viktor Gamov
 
[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js project[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js projectViktor Gamov
 
[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcast[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcastViktor Gamov
 
Creating your own private Download Center with Bintray
Creating your own private Download Center with Bintray Creating your own private Download Center with Bintray
Creating your own private Download Center with Bintray Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...Baruch Sadogursky
 
Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]Baruch Sadogursky
 
Spring Data: New approach to persistence
Spring Data: New approach to persistenceSpring Data: New approach to persistence
Spring Data: New approach to persistenceOleksiy Rezchykov
 
Morning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryMorning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryTaras Matyashovsky
 
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Couchbase Sydney meetup #1    Couchbase Architecture and ScalabilityCouchbase Sydney meetup #1    Couchbase Architecture and Scalability
Couchbase Sydney meetup #1 Couchbase Architecture and ScalabilityKarthik Babu Sekar
 
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Baruch Sadogursky
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootIvan Vasyliev
 
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...Baruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Baruch Sadogursky
 

Viewers also liked (20)

JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
JavaOne 2013: «Java and JavaScript - Shaken, Not Stirred»
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
 
Testing Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupTesting Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user group
 
[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016[JokerConf] Верхом на реактивных стримах, 10/13/2016
[JokerConf] Верхом на реактивных стримах, 10/13/2016
 
[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet Streams[Jfokus] Riding the Jet Streams
[Jfokus] Riding the Jet Streams
 
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
[NYJavaSig] Riding the Distributed Streams - Feb 2nd, 2017
 
[Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"![Codemash] Caching Made "Bootiful"!
[Codemash] Caching Made "Bootiful"!
 
[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js project[OracleCode - SF] Distributed caching for your next node.js project
[OracleCode - SF] Distributed caching for your next node.js project
 
[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcast[OracleCode SF] In memory analytics with apache spark and hazelcast
[OracleCode SF] In memory analytics with apache spark and hazelcast
 
Creating your own private Download Center with Bintray
Creating your own private Download Center with Bintray Creating your own private Download Center with Bintray
Creating your own private Download Center with Bintray
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code SF...
 
Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]
 
Spring Data: New approach to persistence
Spring Data: New approach to persistenceSpring Data: New approach to persistence
Spring Data: New approach to persistence
 
Confession of an Engineer
Confession of an EngineerConfession of an Engineer
Confession of an Engineer
 
Morning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryMorning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversary
 
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Couchbase Sydney meetup #1    Couchbase Architecture and ScalabilityCouchbase Sydney meetup #1    Couchbase Architecture and Scalability
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
 
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
 
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
 

Similar to Functional UI testing of Adobe Flex RIA

eFront V3.7 Extensions Architecture
eFront V3.7 Extensions ArchitectureeFront V3.7 Extensions Architecture
eFront V3.7 Extensions Architecturepapagel
 
Tips and Tricks for new async web client capabilities on model driven apps
Tips and Tricks for new async web client capabilities on model driven appsTips and Tricks for new async web client capabilities on model driven apps
Tips and Tricks for new async web client capabilities on model driven appsMehdi El Amri
 
Testing project (basic)
Testing project (basic)Testing project (basic)
Testing project (basic)Lokesh Singrol
 
HP Software Testing project (Advanced)
HP Software Testing project (Advanced)HP Software Testing project (Advanced)
HP Software Testing project (Advanced)Lokesh Singrol
 
PATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelPATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelMichael Heron
 
iOS app dev Training - Session1
iOS app dev Training - Session1iOS app dev Training - Session1
iOS app dev Training - Session1Hussain Behestee
 
java Unit4 chapter1 applets
java Unit4 chapter1 appletsjava Unit4 chapter1 applets
java Unit4 chapter1 appletsraksharao
 
Qtp Basics
Qtp BasicsQtp Basics
Qtp Basicsmehramit
 
Debugging lightning components-SEDreamin17
Debugging lightning components-SEDreamin17Debugging lightning components-SEDreamin17
Debugging lightning components-SEDreamin17Mohith Shrivastava
 
Introduction to Visual Basic 6.0
Introduction to Visual Basic 6.0Introduction to Visual Basic 6.0
Introduction to Visual Basic 6.0DivyaR219113
 
Net framework session03
Net framework session03Net framework session03
Net framework session03Vivek chan
 
Automation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadAutomation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadDurga Prasad
 
Automation testing material by Durgasoft,hyderabad
Automation testing material by Durgasoft,hyderabadAutomation testing material by Durgasoft,hyderabad
Automation testing material by Durgasoft,hyderabadDurga Prasad
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosFlutter Agency
 
Test Automation in Flex - Richa Sharma
Test Automation in Flex - Richa SharmaTest Automation in Flex - Richa Sharma
Test Automation in Flex - Richa SharmaIndicThreads
 
PlatForm Event.pptx
PlatForm Event.pptxPlatForm Event.pptx
PlatForm Event.pptxRinku Saini
 
Introduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKIntroduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKKarthik Subramanian
 
Introduction to the integral framework
Introduction to the integral frameworkIntroduction to the integral framework
Introduction to the integral frameworkKarthik Subramanian
 

Similar to Functional UI testing of Adobe Flex RIA (20)

eFront V3.7 Extensions Architecture
eFront V3.7 Extensions ArchitectureeFront V3.7 Extensions Architecture
eFront V3.7 Extensions Architecture
 
Tips and Tricks for new async web client capabilities on model driven apps
Tips and Tricks for new async web client capabilities on model driven appsTips and Tricks for new async web client capabilities on model driven apps
Tips and Tricks for new async web client capabilities on model driven apps
 
Testing project (basic)
Testing project (basic)Testing project (basic)
Testing project (basic)
 
HP Software Testing project (Advanced)
HP Software Testing project (Advanced)HP Software Testing project (Advanced)
HP Software Testing project (Advanced)
 
PATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event ModelPATTERNS06 - The .NET Event Model
PATTERNS06 - The .NET Event Model
 
Rft courseware
Rft coursewareRft courseware
Rft courseware
 
iOS app dev Training - Session1
iOS app dev Training - Session1iOS app dev Training - Session1
iOS app dev Training - Session1
 
java Unit4 chapter1 applets
java Unit4 chapter1 appletsjava Unit4 chapter1 applets
java Unit4 chapter1 applets
 
Qtp Basics
Qtp BasicsQtp Basics
Qtp Basics
 
Wwf
WwfWwf
Wwf
 
Debugging lightning components-SEDreamin17
Debugging lightning components-SEDreamin17Debugging lightning components-SEDreamin17
Debugging lightning components-SEDreamin17
 
Introduction to Visual Basic 6.0
Introduction to Visual Basic 6.0Introduction to Visual Basic 6.0
Introduction to Visual Basic 6.0
 
Net framework session03
Net framework session03Net framework session03
Net framework session03
 
Automation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in HyderabadAutomation testing by Durgasoft in Hyderabad
Automation testing by Durgasoft in Hyderabad
 
Automation testing material by Durgasoft,hyderabad
Automation testing material by Durgasoft,hyderabadAutomation testing material by Durgasoft,hyderabad
Automation testing material by Durgasoft,hyderabad
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
 
Test Automation in Flex - Richa Sharma
Test Automation in Flex - Richa SharmaTest Automation in Flex - Richa Sharma
Test Automation in Flex - Richa Sharma
 
PlatForm Event.pptx
PlatForm Event.pptxPlatForm Event.pptx
PlatForm Event.pptx
 
Introduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORKIntroduction to the INTEGRAL FRAMEWORK
Introduction to the INTEGRAL FRAMEWORK
 
Introduction to the integral framework
Introduction to the integral frameworkIntroduction to the integral framework
Introduction to the integral framework
 

More from Viktor Gamov

[DataSciCon] Divide, distribute and conquer stream v. batch
[DataSciCon] Divide, distribute and conquer  stream v. batch[DataSciCon] Divide, distribute and conquer  stream v. batch
[DataSciCon] Divide, distribute and conquer stream v. batchViktor Gamov
 
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. BatchViktor Gamov
 
Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017Viktor Gamov
 
Distributed caching for your next node.js project cf summit - 06-15-2017
Distributed caching for your next node.js project   cf summit - 06-15-2017Distributed caching for your next node.js project   cf summit - 06-15-2017
Distributed caching for your next node.js project cf summit - 06-15-2017Viktor Gamov
 
[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NG[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NGViktor Gamov
 
Распределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный ударРаспределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный ударViktor Gamov
 
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017Viktor Gamov
 

More from Viktor Gamov (7)

[DataSciCon] Divide, distribute and conquer stream v. batch
[DataSciCon] Divide, distribute and conquer  stream v. batch[DataSciCon] Divide, distribute and conquer  stream v. batch
[DataSciCon] Divide, distribute and conquer stream v. batch
 
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
[Philly JUG] Divide, Distribute and Conquer: Stream v. Batch
 
Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017Testing containers with TestContainers @ AJUG 7/18/2017
Testing containers with TestContainers @ AJUG 7/18/2017
 
Distributed caching for your next node.js project cf summit - 06-15-2017
Distributed caching for your next node.js project   cf summit - 06-15-2017Distributed caching for your next node.js project   cf summit - 06-15-2017
Distributed caching for your next node.js project cf summit - 06-15-2017
 
[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NG[Philly ETE] Java Puzzlers NG
[Philly ETE] Java Puzzlers NG
 
Распределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный ударРаспределяй и властвуй — 2: Потоки данных наносят ответный удар
Распределяй и властвуй — 2: Потоки данных наносят ответный удар
 
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017
[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Recently uploaded (20)

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

Functional UI testing of Adobe Flex RIA

  • 1. Functional UI testing of Adobe Flex RIA Viktor Gamov viktor.gamov@faratasystems.com August, 12 2011
  • 2. Agenda • Why to test? • How to test? • What the automated testing means? • Automated testing tools • Automated testing architecture • Loading automation classes • Creating test-friendly applications • Bunch of Demos
  • 3.
  • 4.
  • 5. Software has to satisfy the user!
  • 7. How to test? • Unit Testing • Functional (UAT, QA) Testing • Integration Testing • Load Testing
  • 8. Metaphor: building the house • think of unit tests as having the building inspector at the construction's site • think of functional testing as having the homeowner visiting the house and being interested in how the house looks, if the rooms have the desired size
  • 9. What automated testing means? Automated testing is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, and other test control and test reporting functions.
  • 10. General approaches • Code-Driven Testing - the public (usually) interfaces to classes, modules, or libraries are tested with a variety of input arguments to validate that the returned results are correct. • GUI Testing - a testing framework generates and records the UI events keystrokes and mouse clicks. The tester observes the changes reflected via the user interface to validate the observable behavior of the program.
  • 11. Some Automated Testing tools • HP QuickTest Professional (QTP) • Selenium • Ranorex • FlexMonkey
  • 12. HP QTP • All-in-one suite for automation testing enterprise applications • Supports the large pool of  software development environments like SAP , Web , Oracle etc. • Support libraries out-of-the-box with Flex (qtp.swc, qtp_air.swc) • VBScript as scripting language
  • 13. Selenium • Web applications testing • Open source and large community • Cross platform (Selenium IDE - browser extension) • Uses JavaScript as scripting language
  • 14. Ranorex • Similar to QTP, but easier to use • Support various technologies: .NET, WPF, Silverlight, Qt, Win32, WFC, Java SWT, Flash/ Flex • Script languages C#,VB.NET, IronPython • Integrates with Visual Studio 2010 • Platform: Windows only
  • 15. Flex Monkey • Open Source (commercial support available) • Flex apps testing centric tool • Cross platform (console - AIR application) • Generated FlexUnit 4 test code • Supports testing only Flex applications (no Flash) • Integration with Selenium IDE (FlexMonkium project)
  • 16. Demo
  • 17. and the QTP testing tool. Automated Testing • automation tool — Automation tools are applications that use the data that is d include QTP, Omniture, and Segue. • delegates — Flex framework components are instrumented by attaching a de Architecture time. The delegate class defines the methods and properties required to perfo The following illustration shows the relationship between an application, an age Automation Tool • automation tool are applications that use the data that provided by the agent. • automation agent facilitates communications between an application and an automation Agent tool. • delegates are Flex framework components are instrumented by attaching a delegate class to each component at run time. The delegate class Application defines the methods and properties required built with Flex to perform automation. As this illustration shows, the automation tool uses an agent to communicate wit
  • 18. Automation API Core Flex API SystemManager Automation Delegates Automation API Automation Manager Delegates Delegates QTP FlexMonkey Selenium Agent Classes Agent Agent Agent Automation Tools QTP FlexMonkey Selenium
  • 19. You are not required to create an instance of your adapter in the init() method. You can also create this instance in the APPLICATION_COMPLETE event handler if your agent requires that the application must be initialized before it is instantiated. Automation flow Understanding the automation flow When the application is initialized, the AutomationManager object is created. In its init() method, it adds a listener for Event.ADDED events. The following image shows the order of events when the application is initialized and the AutomationManager class constructs the delegate map. 1. Creates the display list. 3. Listens for ADDED event. SystemManager AutomationManager Display List HGroup Automation Accordion Button 4. Maintains map of component TextArea class to delegate class. { } HGroup map[Button] = map[spark.components.Button] TextInput map[HGroup] = map[spark.components.HGroup] TextInput ... Button 2. Dispatches the ADDED Delegate event for each UIComponent. 5. Handles component events. Records and plays back events on component instances. { map[spark.components.Button] = SparkButtonAutomationImpl map[spark.components.HGroup] = SparkGroupAutomationImpl ... } 1 The SystemManager class creates the display list, a tree of visible objects that make up your application.
  • 20. 5 When it is created, the delegate class adds a reference to its instance in the delegate class map. The de then handles events during record and play-back sequences. The delegate is now considered registered with the component. It adds event listeners for the compon Automation flow and calls the AutomationManager when the component triggers those events. After the components in the display list are instantiated and mapped to instances of their delegate classe AutomationManager is ready to listen for events and forward them to the agent for processing. The following image shows the flow of operation when a user performs an action that is a recordable event the user clicks a Button control in the application. 1. User clicks on a component. Application 3. recordAutomationEvent() called. built with Flex Automation- Agent Manager Delegate 4. Dispatches RECORD event. 5. Handles RECORD events. Button 2. Listens for component events such as CLICK. 1 The user clicks the Button control in the application. The SystemManager dispatches a MouseEvent. 2 The SparkButtonAutomationImpl class, the Button control’s automation delegate, listens for click e delegate’s click event handler, the delegate calls the AutomationManager recordAutomationEvent
  • 21. Loading automation classes • Compile time - To compile an application that includes the automation classes, include automation libraries at compile time by using the compiler’s include-libraries option. • Run time - Compile your app without any additions. At run time, load your application into a wrapper SWF file that has built in automation libraries. This wrapper SWF file uses SWFLoader to load your application SWF file to be tested.
  • 22. Creating test-friendly applications • providing meaningful identification of objects “submitPanel” rather than “myPanel” or “p1” • avoiding renaming objects if (!automationName) return label; • adding and removing containers from the automation hierarchy showInAutomationHierarchy = false; • instrumenting events • instrumenting custom components
  • 23. Instrumenting events • instrumenting existing events - the tools are not generally interested in recording all the events : MOUSE_OVER • instrumenting custom events - when you extend components, you often add events that are triggered by new functionality of that component • blocking and overriding events - in some cases, you might want to block or override the default events that are recorded for a component
  • 24. Instrumenting existing events • override the replayAutomatableEvent() method of the IAutomationObject interface • call the AutomationManager’s method when a recordAutomatableEvent() button dispatch MOUSE_MOVE event • define the new event for the agent
  • 25. Instrumenting custom events • call the Automation.automationManager2 class’s recordCustomAutomationEvent() method • define the new event for the agent • listen for the AutomationCustomReplayEvent, get the details about it and replay the event
  • 26. What is a custom component • A component extending from a standard component (No additional events, no additional properties) • A component extending from a standard component – Additional events/ additional properties • A component extending from a non container class, but the current class is a container.
  • 27. Instrumenting custom components • create a delegate class that implements the required interfaces (IAutomationObject) • add testing-related code to the component (not recommended)
  • 28. Create a delegate class • use a pattern for delegate class name [ComponentClassName]AutomationImpl • extend the UIComponentAutomationImpl or implement IAutomationObject interface • mark the delegate class as a mixin by using the [Mixin] metadata keyword • register the delegate with the AutomationManager by calling the Automation.registerDelegateClass()
  • 29. Instrument component with a delegate class • override the getters of the automationName and the automationValue properties • add listeners for events that the automation tool records • override the replayAutomatableEvent() method • add the new component to custom class definition XML file (FlexMonkeyEnv.xml)
  • 30. Instrument composite component • override the getter of the numAutomationChildren property and the methods to expose children: • getAutomationChildren() • getAutomationChildrenAt()
  • 31.
  • 32. And one more thing...
  • 33. PROBLEM • Unless tests are run automatically, testing is ineffective
  • 34. Solution: Use Jenkins • Will automatically run tests for you • Will tell you if they fail • Provide you reports, result and metrics • Can be downloaded from http://jenkins-ci.org/ • Very easy to setup and configure
  • 35.
  • 36. Demo
  • 37. Instead of an epilogue
  • 38. «90% of coding is debugging. The other 10% is writing bugs» Bram Cohen, author of the BitTorrent protocol «If debugging is the process of removing bugs then programming must be the process of putting them in» Edsger Dijkstra
  • 39. Be brave! Just test and no more bugs!
  • 40. Resources • GorillaLogic http://goo.gl/Ly6dd • FlexMonkey resources page http://goo.gl/ eKKaZ • Ranorex Flex Testing http://goo.gl/sJI1L • Automation Docs http://goo.gl/PwuZc • Blog on Flex Automation http://goo.gl/CCQ80
  • 41. p.s. Sample code https://github.com/gAmUssA/flex_flexmonkey_flexunit_ci http://myflex.org/presentations/symposium4/Viktor.zip

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. think of unit tests as having the building inspector at the construction's site, focusing on making sure that the internal system of the house (foundation, plumbing, etc) works correctly, while functional testing as having the homeowner visiting the house and being interested in how the house looks, if the rooms have the desired size, etc. He assumes that the internal functions of the house work properly. In unit testing, think of a unit as being the smallest testable part of an application, such as a function/method. The goal is to isolate such parts and make sure they run correctly by being able to test them repeatably. Unit tests are written from the developer's perspective, and as a developer, we have to make sure that we understand the specification and requirements of our software system before writing unit tests. This can be achieved through use cases.\n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n