Testing Strategy Presentation to all Stomp developers

advertisement
Automated UI testing of Swing
based applications
Tomas Krecmer
Barclays
27. February 2012
UI testing

What do we want to test?
– Custom widgets
– Data models
– Business logic

What not?
– Swing
– 3rd party widgets, windowing framework
– Server functions via client

How do we implement the tests?
– Who to implement
– What technology
Testing of existing application






Usually not fine grained – business logic
mixed up with UI code
Server calls from widgets
Controllers polluted by UI updates
Idea not to rewrite anything
Hard to mock up
Missing names of the widgets to identify
them on the screen
Test your application by external program

Test your application by external program
– Simulates user interaction
– Run against dedicated environment needed
– No major changes to application itself (just
add names to widgets)
– Technologies like HP QTP (Mercury), Silk
– Testing scripts written in scripting language
like Visual Basic. Tests can be written by QA
team
– Library to navigate on custom widgets
– Expensive, slow
Unit testing - approaches

Pure unit tests for isolated functionality
(widgets, controllers, models)

For mixed up code - initialize whole
application from Unit test against
reference environment. Testing thread
interacts with UI (through UI thread) and
verifies expected results. No need for
mocking.
Unit test technologies

TestNG – general purpose Unit testing framework
– More advanced than JUnit
– Supported by other technologies (ant, TeamCity,
Eclipse, FEST, JMockit)

FEST – Swing testing framework
–
–
–
–
–
–
Pure Java framework
Simulates user interaction
Heavy support for widget’s look up
Needs to initialize UI ei. must be run on Windows box
Good UI thread management
Other framework under investigation (UISpec4J, Jemmy,
Abbot, jfcUnit)
– Takes screenshot on failure
FEST example
Verify when password not set error dialog is
displayed
DialogFixture dialog = frame.dialog(“login”);
dialog.textBox("username").enterText("alex.ruiz“);
dialog.button("ok").click();
dialog.optionPane().requireErrorMessage()
.requireMessage("Please enter
your .*"); // regular expression matching
Integration with Dev Process
Run as part of Continuous
Integration
 Set up for each DEV branch
 Results are used as a test evidence
for releases
 Dedicated Windows box

Reality
Originally 1200 manual testing
scenarios existed
 Converted to 270 unit tests
 Covers 800 of original scenarios
 Total run 2.5 hours
 Total implementation cost about 120
MDs
 Saved 40MDs per release

The End

Q&A
Links
http://www.barcap.com/
 http://testng.org/doc/index.html
 http://code.google.com/p/fest/
 http://code.google.com/p/jmockit/

Download