Table of contents
Preface
How to use this manual
Table of contents
List of figures
List of tables
I
User manual
1
Installation and startup
1.1Unix Installation
1.2Windows Installation
1.3The license file
1.4The configuration files
1.5Starting QF-Test
1.6Firewall Security Warning
2
The user interface
2.1The test-suite
2.2Basic editing
2.2.1Navigating the tree
2.2.2Insertion marker
2.2.3Moving nodes
2.2.4Transforming nodes
2.2.5Tables
2.2.6Packing and Unpacking
2.3Advanced editing
2.3.1Searching
2.3.2Replacing
2.3.3Complex searches and replace operations
2.3.4Multiple views
2.0+
3
Quickstart
4
Running an application from QF-Test
4.1Connection with a JDK
4.2SWT instrumentation
4.2.1Preparation for manual SWT instrumentation
4.2.2Manual SWT instrumentation for eclipse based applications
4.2.3Manual instrumentation for standalone SWT applications
4.3Various methods to start the SUT
4.3.1A standalone script or executable file
4.3.2An application launched through Java WebStart
4.3.3An applet in a web browser
4.3.4An application started with java -jar <archive>
4.3.5 An application started with java -classpath <classpath> <class>
4.3.6 A web application in a browser
4.3.7An application started indirectly from an already connected SUT
4.4Program output and the Clients menu
5
Capture and replay
5.1Recording sequences
5.2Running tests
5.3Recording checks
5.4Recording components
5.5Recording of HTTP Requests (GET/POST)
6
Components
6.1GUI component hierarchy
6.2'Components' in QF-Test
6.3'Component' 'Ids'
6.4Component class
3.1+6.5 Component inspection
6.6The importance of naming components
6.7Considerations for setting names
6.8Updating 'Components'
6.9Troubleshooting component recognition problems
6.10Accessing hidden fields on a web page
7
Sub-items of complex GUI components
7.1'Items'
7.2The 'Id' of an 'Item'
7.3Special 'Id'-syntax for direct element access
8
Variables
8.1Variable lookup
8.2Defining variables
8.3Variable example
8.4External data and special groups
8.5Expressions
3.0+8.6Immediate and lazy binding
9
Problem analysis and debugging
9.1The run-log
9.1.1Error states
9.1.2Navigating the run-log tree
9.1.3Accepting values of failed checks as good
3.0+9.1.4Split run-logs
9.1.5Run-log options
3.3+9.1.6Creating a test-suite from the run-log
9.2The debugger
9.2.1Entering the debugger
9.2.2The debugger window
9.2.3Debugger commands
9.2.4Manipulating breakpoints
10
Organizing the test-suite
10.1'Sequence' and 'Test' nodes
2.0+10.2 Test management with 'Test-set' and 'Test-case' nodes
10.2.1Concepts
10.2.2Variables and special attributes
10.2.3Migration and backwards compatibility
10.3'Procedures' and 'Packages'
3.1+10.3.1Local 'Procedures' and 'Packages'
3.1+10.3.2Relative 'Procedures'
10.3.3Inserting 'Procedure call' nodes
3.1+10.3.4Parameterizing nodes
3.0+10.3.5Transforming a 'Sequence' into a 'Procedure'
10.4Documenting test-suites
11
The standard library
12
Dependencies
12.1'Dependency' basics
12.2The dependency stack
12.3Error escalation
12.4Special variables
12.5Error handling
13
Scripting
13.1Fundamentals of the Jython integration
13.2The run-context rc
13.3Scripting examples
13.3.1Logging messages
13.3.2Performing checks
13.3.3Accessing variables
13.3.4Setting variables
13.3.5Global Jython variables
13.3.6Exchanging Jython variables between interpreters
13.3.7Accessing the SUT's GUI components
13.3.8Calling 'Procedures'
3.1+13.3.9Setting options
13.3.10A complex example
13.3.11Override components
13.4Modules
13.5Post-mortem debugging of Jython scripts
13.6Differences between Jython version 2.2.1 and 2.5
13.6.1Boolean type
13.6.2Character encodings
13.6.3Getting the name of a Java class
13.7Scripting with Groovy
13.7.1Accessing variables in Groovy
13.7.2Global Groovy variables
13.7.3Groovy packages
14
Data-driven testing
14.1Data-driver examples
14.2General use of 'Data drivers'
14.3Examples for 'Data drivers'
14.4Advanced use
15
Reports and test documentation
15.1Reports
15.1.1Report concepts
15.1.2Report contents
15.1.3Creating reports
15.2Testdoc documentation for 'Test-sets' and 'Test-cases'
15.3Pkgdoc documentation for 'Packages', 'Procedures' and 'Dependencies'
16
Test execution
16.1Test execution in batch mode
16.1.1Command line usage
16.1.2Windows batch script
3.0+16.1.3Groovy
16.2Executing tests in daemon mode
16.2.1Launching the daemon
3.0+16.2.2Controlling a daemon from QF-Test's command line
16.2.3Controlling a daemon with the daemon API
17
Distributed test development
17.1Referencing nodes in another test-suite
17.2Managing 'Components'
17.3Merging test-suites
17.3.1Importing Components
3.3+17.3.2 Importing Procedures and Testcases
17.4Strategies for distributed development
3.0+
18
Automated Creation of Basic Procedures
18.1Introduction
18.2How to use the Procedure Builder
18.3Configuration of the Procedure Builder
18.3.1The Procedure Builder definition file
3.0+
19
Interaction with Test Management Tools
19.1General Information
19.2HP TestDirector for Quality Center
19.2.1Introduction
19.2.2Step-by-step integration guide
19.3Imbus TestBench
19.3.1Introduction
19.3.2Creating QF-Test template from interactions
19.3.3Importing test-execution results
19.4TestLink
19.4.1Introduction
19.4.2Generating template test-suites for QF-Test from test-cases
19.4.3Execution of test-cases
19.4.4Importing QF-Test results into TestLink
20
Integration with Build Tools
20.1Ant
20.2Maven
3.3+20.3Jenkins/Hudson
20.3.1Install and start Hudson
20.3.2Create a new job for QF-Test
20.3.3Install QF-Test Demo Project
21
Performing GUI-based load tests
21.1Background and comparison with other techniques
21.2Load tests with QF-Test
21.2.1Running tests with parallel threads
21.2.2Synchronization
21.2.3Coordinating tests on multiple machines
3.0+
22
Executing Manual Tests in QF-Test
22.1Introduction
22.2Step-by-step Guide
22.3Structure of the Excel file
22.4The ManualTestRunner test-suite
22.5Results
II
Best Practices
23
Introduction
24
How to start a project
24.1Infrastructure and testing environment
24.2Location of files
24.2.1Network installation
24.3Component Recognition
25
Organizing test-suites
25.1Organizing tests
25.2Modularization
25.3Parameterization
25.4Working in multiple test-suites
25.5Roles and responsibilities
25.6Managing components at different levels
25.7Reverse includes
26
Efficient working techniques
26.1Creating test-suites from scratch
26.2The standard library qfs.qft
26.3Component storage
26.4Extending test-suites
26.5Working in the script editor
27
How to achieve robust component recognition
27.1Using the default configuration
27.2Using the 'Name overrides everything' mode
27.3Using regular expressions for working with dynamic window titles
27.4Influencing the names by implementing a NameResolver
27.5Handling class changes due to re-factoring by using 'Record system-classes only'
27.6Avoiding recording every component or using generic components
3.1+27.7 Switching component recognition settings dynamically
28
Test execution
28.1Dependencies
28.2Timeout vs. delay
28.3What to do if the run-log contains an error
III
Reference manual
29
Options
29.1General options
29.1.1Editing
29.1.2Projects
29.1.3Bookmarks
29.1.4External tools
29.1.5Backup files
29.1.6Library path
29.1.7License
29.2Recording options
29.2.1Events to record
29.2.2Events to pack
29.2.3Components
29.2.4Recording sub-items
29.2.5Recording procedures
29.3Replay options
29.3.1Client options
29.3.2Event handling
29.3.3Component recognition
29.3.4Delays
29.3.5Timeouts
29.4Web options
29.5Debugger options
29.6Run-log options
29.6.1General run-log options
29.6.2Options determining run-log content
29.7Variables
30
Elements of a test-suite
30.1The test-suite and its structure
30.1.1'Test-suite'
30.2Test and Sequence nodes
30.2.1'Test-case'
30.2.2'Test-set'
30.2.3'Test call'
30.2.4'Test'
30.2.5'Sequence'
30.2.6'Test-step'
30.2.7'Sequence with time limit'
30.2.8'Extras'
30.3Dependencies
30.3.1'Dependency'
30.3.2'Dependency reference'
30.3.3'Setup'
30.3.4'Cleanup'
30.3.5'Error handler'
30.4Data driver
30.4.1'Data driver'
30.4.2'Data table'
30.4.3'Database'
30.4.4'Excel data file'
30.4.5'CSV data file'
30.4.6'Data loop'
30.5Procedures
30.5.1'Procedure'
30.5.2'Procedure call'
30.5.3'Return'
30.5.4'Package'
30.5.5'Procedures'
30.6Control structures
30.6.1'Loop'
30.6.2'While'
30.6.3'Break'
30.6.4'If'
30.6.5'Elseif'
30.6.6'Else'
30.6.7'Try'
30.6.8'Catch'
30.6.9'Finally'
30.6.10'Throw'
30.6.11'Rethrow'
30.6.12'Server script'
30.6.13'SUT script'
30.7Processes
30.7.1'Start Java SUT client'
30.7.2'Start SUT client'
30.7.3'Start browser'
30.7.4'Start process'
30.7.5'Execute shell command'
30.7.6'Wait for client to connect'
30.7.7'Stop client'
30.7.8'Wait for process to terminate'
30.8Events
30.8.1'Mouse event'
30.8.2'Key event'
30.8.3'Text input'
30.8.4'Window event'
30.8.5'Component event'
30.8.6'Selection'
30.8.7'File selection'
30.9Checks
30.9.1'Check text'
30.9.2'Boolean check'
30.9.3'Check items'
30.9.4'Check selectable items'
30.9.5'Check image'
30.9.6'Check geometry'
30.10Queries
30.10.1'Fetch text'
30.10.2'Fetch index'
30.10.3'Fetch geometry'
30.11Miscellaneous
30.11.1'Set variable'
30.11.2'Wait for component to appear'
30.11.3'Wait for document to load'
30.11.4'Wait for download to finish'
30.11.5'Load resources'
30.11.6'Load properties'
30.11.7'HTTP Request'
30.12Windows, Components and Items
30.12.1'Window'
30.12.2'Web page'
30.12.3'Component'
30.12.4'Item'
30.12.5'Window group'
30.12.6'Component group'
30.12.7'Windows and components'
31
Exceptions
IV
Technical reference
32
Command line arguments and exit codes
32.1Call syntax
32.2Command line arguments
32.2.1Arguments for the starter script
32.2.2Arguments for the Java VM
32.2.3Arguments for QF-Test
32.2.4Placeholders in the filename parameter for run-log and report
32.3Exit codes for QF-Test
33
JDK instrumentation
33.1Modifications to the JDK
33.2Effects of the instrumentation
34
GUI engines
35
Starting the SUT with the old connection mechanism
35.1Four methods to start the SUT
35.2Starting an application through Java WebStart
35.3Running an applet in the appletviewer
35.4Security
35.5Background information
36
Technical details about miscellaneous issues
36.1Drag&Drop
36.2Component recognition
36.3Timing
36.4Regular expressions
36.5Line breaks under Unix and Windows
36.6Quoting and escaping special characters
36.7Include file resolution
37
Jython and Groovy scripting
37.1Module load-path (Jython)
37.2The plugin directory
37.3The package cache (Jython)
37.4Initialization (Jython)
37.5Namespace environment for script execution (Jython)
37.6Run-context API
37.7The qf module
3.0+37.8Image API
37.8.1The ImageWrapper class
37.9Exception handling
37.10Debugging scripts (Jython)
38
Special features for web applications
38.1Pseudo DOM API
38.1.1The abstract Node class
38.1.2The DocumentNode class
38.1.3The FrameNode class
38.1.4The DomNode class
38.1.5The DialogNode class
38.2Special support for various AJAX toolkits
38.2.1AJAX resolver concepts
38.2.2Supported AJAX toolkits
39
Extension APIs
39.1Resolver hooks
39.1.1Overview over the supported kinds of resolvers
3.1+39.1.2 The ClassNameResolver interface
3.1+39.1.3 The NameResolver2 interface
39.1.4The IdResolver interface
3.1+39.1.5 The FeatureResolver2 interface
39.1.6The ExtraFeatureResolver interface
3.1+39.1.7 The ItemNameResolver2 interface
3.1+39.1.8 The ItemValueResolver2 interface
39.1.9The TreeTableResolver interface
39.1.10Simplified resolver creation with the resolvers module
39.1.11The ResolverRegistry
39.1.12Error handling
3.1+39.2 Implementing custom item types with the ItemResolver interface
39.2.1ItemResolver concepts
39.2.2The ItemResolver interface
39.2.3The class SubItemIndex
39.2.4The ItemRegistry
39.2.5Default item representations
3.1+39.3 Implementing custom checks with the Checker interface
39.3.1The Checker interface
39.3.2The class Pair
39.3.3 The CheckType interface and its implementation DefaultCheckType
39.3.4The class CheckDataType
39.3.5The class CheckData and its subclasses
39.3.6The CheckerRegistry
39.3.7Custom checker example
3.2+39.4 Working with the Eclipse Graphical Editing Framework (GEF)
39.4.1Recording GEF items
39.4.2Implementing a GEF ItemNameResolver2
39.4.3Implementing a GEF ItemValueResolver2
3.1+39.5Test-run listeners
39.5.1The TestRunListener interface
39.5.2The class TestRunEvent
39.5.3The class TestSuiteNode
39.6DOM processors
39.6.1The DOMProcessor interface
39.6.2The DOMProcessorRegistry
39.6.3Error handling
3.0+39.7Image API extensions
39.7.1The ImageRep class
39.7.2The ImageComparator interface
40
Daemon mode
40.1The DaemonLocator
40.2The Daemon
40.3The TestRunDaemon
40.3.1Miscellaneous
40.3.2Global variable handling
40.3.3Test execution
40.3.4Identification
40.4The DaemonRunContext
3.1+40.5The DaemonTestRunListener
41
The Procedure Builder definition file
41.1Placeholders
41.2Conditions for Package and Procedure Definition
41.3Interpretation of the Component Hierarchy
3.4+41.4Details about the @CONDITION tag
42
The ManualStepDialog
42.1The ManualStepDialog API
3.1+
43
Details about transforming nodes
43.1Introduction
43.2Transformation with type changes
43.3Additional transformations below the 'Extras' node
43.3.1Transformations without side-effects
43.3.2Transformations with side-effects
3.3+
44
Details about the algorithm for image comparison
44.1Introduction
44.2Description of algorithms
44.2.1Classic image check
44.2.2Pixel-based identity check
44.2.3Pixel-based similarity check
44.2.4Block-based identity check
44.2.5Block-based similarity check
44.2.6Histogram check
44.2.7Analysis with Discrete Cosine Transformation
44.2.8Block-based analysis with Discrete Cosine Transformation
44.2.9Bilinear Filter
A
FAQ - Frequently Asked Questions
B
Release notes
B.1Version 3.4.4
B.2Version 3.4.3
B.3Version 3.4.2
B.4Version 3.4.1
B.5Main new features in version 3.4
B.6Version 3.4.0
B.7Version 3.4M2
B.8Version 3.4M1
B.9Version 3.3.0
B.10Version 3.2.2
B.11Version 3.2.1
B.12New features in QF-Test version 3.2
B.13Version 3.2.0
B.14Version 3.1.4
B.15Version 3.1.3
B.16Version 3.1.2
B.17Version 3.1.1
B.18Version 3.1.0
B.19Version 3.0.2
B.20Version 3.0.1
B.21New features in QF-Test version 3
C
Keyboard shortcuts
C.1Navigation and editing
C.2Record and replay functions
C.3Keyboard helper
D
Glossary
E
Third party software