Sie sind auf Seite 1von 25

UI Automated Testing of

Java Applications

Jiří Skřivánek
Sun Microsystems
360
2

Introduction
> Sun Microsystems
> NetBeans
> NetBeans Quality Engineering
3

AGENDA

> UI functional testing


> Jemmy testing library
> Jellytools testing library
> XTest
> Support in NetBeans IDE
> Demo
> Q&A
4

Why write automated tests?


> Make sure code works (specification)
– show the intended use and behavior of the code
> Things do not get wrong (integration)
– not to break existing functionality
> Mistakes do not reappear (regression)
– verify bug fixes
> Detect unused code (code coverage)
– delete obsolete code or improve tests
> Measure UI responsiveness (performance)
– only way how to daily check performance
5

How write tests?


> Unit vs. functional
> Who should write tests?
– application code developers – unit
– quality assurance engineers – functional
> How many tests are enough?
– manual – ad hoc testing
– automated – save engineers cycles from repetitive testing
> How often run tests?
– before integration
– daily
6

UI Functional Testing
> Advantages
– like real user input
– reusability
> Obstacles
– stability of tests
– changing UI
> Existing tools
– commercial (Functional Tester, SilkTest, WinRunner)
– open-source (Abbot, Jemmy, JFCUnit, Marathon)
7

Jemmy Overview
> Java library used to create UI automated tests
> Provides support covering all Swing components
> Can be easily extended for custom component support
> Two modes of action reproducing (Robot and event dispatching)
> Pre/post verification methods
> When test fails? – Jemmy exceptions and timeouts
8

Jemmy Operator Hierarchy

Component ComponentOperator

Container ContainerOperator

JComponent JComponentOperator

JLabel JLabelOperator
9

Jemmy Operators
> Find a window – JFrameOperator, JDialogOperator
> Find a component inside container
– by text
– by ordinal index
– by component name
– using ComponentChooser
> Interact with component
– simulate user actions
– call component API
10

Text Operator Diagram

Text operations Text operator

Mapping methods: Mouse Keyboard


getText(), getX(), operations operations
getY, ...

Events
Dispatching mode
Robot
11

Jemmy Code Example


JFrameOperator frameOper =
new JFrameOperator("Frame Title");
JTextFieldOperator textOper =
new JTextFieldOperator(frameOper);
textOper.typeText("A new text");
textOper.getText();
JButtonOperator buttonOper =
new JButtonOperator(frameOper, "OK");
//JButtonOperator buttonOper =
// new JButtonOperator(frameOper, 1);
buttonOper.push();
12

Jellytools Overview
> UI test library for NetBeans
> Based on Jemmy
> Uses NetBeans API
> Operators for NetBeans UI components
> High-level functionality
13

Jemmy – Jellytools Diagram

TEST

Jellytools Jemmy

API UI

NetBeans
14

Jellytools Operators
> Extend Jemmy operator
> Provide access to all sub components
> Encapsulate localization
> Actions
– menu, popup, shortcut, API
> Nodes
– handle tree-like structures
15

Jellytools Code Example

NewFileWizardOperator wizardOper =
NewFileWizardOperator.invoke();
wizardOper.selectProject("MyProject");

//JComboBoxOperator projectOper =
// wizardOper.cboProject();
//projectOper.selectItem("MyProject");

wizardOper.next();
16

XTest Overview
> Open-source test harness
> Runs tests based on JUnit
> Based on Ant
> XTest is able to
– compile tests
– run tests in plain JVM or in NetBeans IDE
– publish test results as HTML pages
17

What Needed To Run Tests


> test case = JUnit test method
> test suite = JUnit suite
> test bag = a set of test suites
> test type (unit, qa-functional, ...)
> compiler/executor
> build scripts
> config files
18

Publishing Engine
> HTML presentation of test results
– grouped by suites, test bags, projects
– detailed results of test case - status, time, exception stack trace, link to
workdir
> Publishing engine server
– gather results from several sources
– generate summary and history reports
– publish using HTTP server
19

Support in NetBeans - Overview


> JUnit module and NbJUnit extension
> Jemmy/Jellytools library modules
> JemmySupport module
> XTest module
20

JUnit Module and NbJUnit


> JUnit support module
– create unit test from existing classes
– run unit tests
> NbJUnit - extension to JUnit framework
– assert files
– working directory for each test case
– memory usage
21

Jemmy/Jellytools Support
> Code completion
> Javadoc included
> JellyTestCase template
> Operator generator
> Jemmy UI browser
22

XTest Module
> XTest harness distribution
> XTest infrastructure wizard
– build scripts
– configuration files
> Project actions
23

Demo
24

Motto

“People should think and


machines should test.”
Jiří Skřivánek http://testtools.netbeans.org
Sun Microsystems Jiri.Skrivanek@sun.com

Das könnte Ihnen auch gefallen