KWWidgets/GUI Testing/Squish: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
Line 73: Line 73:
** Exit "Recording" mode by closing or exiting the <tt>KWCallbacksExample</tt> window, or hitting the "End Recording" button in the "Squish Control Bar" window.
** Exit "Recording" mode by closing or exiting the <tt>KWCallbacksExample</tt> window, or hitting the "End Recording" button in the "Squish Control Bar" window.
** Back to the Squish IDE, note that the script has been updated to reflect your interaction with the AUT:
** Back to the Squish IDE, note that the script has been updated to reflect your interaction with the AUT:
*** <tt>waitForObject</tt> makes sure a widget is ready and has been mapped on-screen.  
**# <tt>waitForObject</tt> makes sure a widget is ready and has been mapped on-screen.  
*** The widget name itself is often very long as it reflects the hierarchy of parent-child widgets in a typical KWWidgets application. The name of each child in this chain is created at run-time by concatenating the name of the C++ class for that widget to a unique ID among its siblings. The last child in this specific example should be <tt>vtkKWScale0</tt>, which is the de-facto KWWidgets C++ class used to wrap the Tcl/Tk <tt>scale</tt> widget we just interacted with.
**# The widget name itself is often very long as it reflects the hierarchy of parent-child widgets in a typical KWWidgets application. The name of each child in this chain is created at run-time by concatenating the name of the C++ class for that widget to a unique ID among its siblings. The last child in this specific example should be <tt>vtkKWScale0</tt>, which is the de-facto KWWidgets C++ class used to wrap the Tcl/Tk <tt>scale</tt> widget we just interacted with.
*** <tt>invoke scrollTo</tt> is a Squish command that will act on a widget. In this case, this will scroll the scale slider to its new value, 50.0.  
**# <tt>snooze 1.2</tt>; snooze statements force the script to wait for N seconds. These calls are generated to ensure that the script always runs with the same time-delays as when it was recorded. They are added because in some cases an action may take some time to complete and the application may not be ready for the following action in time.
*** <tt>invoke closeWindow</tt> is another Squish command that should close the application window (depending on how you stopped recording).
**# <tt>invoke scrollTo</tt> is a Squish command that will act on a widget. In this case, this will scroll the scale slider to its new value, 50.0.  
**# <tt>invoke closeWindow</tt> is another Squish command that should close the application window (depending on how you stopped recording).
{| class="wikitable" style="margin: 1em auto 1em auto"
{| class="wikitable" style="margin: 1em auto 1em auto"
|-
|-
| [[Image:KWWSquishTkCreateRecordTestCase.png|thumb|left|200px|Record Test Case]] || [[Image:KWWSquishTkCreateTestCaseRecorded.png|thumb|left|200px|Test Case Recorded]]
| [[Image:KWWSquishTkRecordTestCase.png|thumb|left|200px|Record Test Case]] || [[Image:KWWSquishTkTestCaseRecorded.png|thumb|left|200px|Test Case Recorded]]
|}
|}
* Execute the Test Case
** Right-click on <tt>tst_Test1</tt> and select "Exit", or hit F5, or select "Test Suite -> Execute" in the main menu bar. This should run the whole test, move the slider to 50.0 automatically, and bring you back to the Squish IDE.
* Insert a Verification Point
[http://www.froglogic.com/download/book/tgs-vp-tk.html Verification points] (VP) can (and should) be added to make sure the application behaved correctly, i.e. that once executed by Squish, we end up in the state we expected. There are multiple ways to add a VP; in this case, we will insert a breakpoint where the verification should take place, execute the testing script again and insert the VP itself.
** In the <tt>test.tcl</tt> window, insert a breakpoint on the line right *after* the <tt>snooze</tt> command.


==Issues==
==Issues==

Revision as of 19:21, 6 November 2008

Squish

  • Squish Home
  • Squish for Tk, only for Unix
  • about €2500
  • Win32/Qt/Java/Web/Tk, scripting in Tcl/Python/JavaScript/Perl, recorder, window inspector, breakpoints/verification

Prerequisites

  • Qt3. Squish for Tk will not work with Qt4. Make sure you install all Qt3 development packages. On a Ubuntu OS, this (most likely) involve: libqt3-headers, libqt3-mt, libqt3-mt-dev, qt3-apps-dev, qt3-assistant, qt3-designer, qt3-dev-tools, qt3-linguist, qt3-qtconfig, etc.
  • Tcl/Tk 8.4 or 8.5

Download

-rwxr--r-- 1 barre barre 6587889 2008-09-04 13:08 squish-3.4.1-eval-tk-src.tar.gz*
-rwxr--r-- 1 barre barre      19 2008-09-04 13:08 squish-3-license*

Installation

barre@tetsuo:~/build$ tar -xzf /home/barre/tmp/squish/squish-3.4.1-eval-tk-src.tar.gz 
  • Configure Squish
barre@tetsuo:~/build$ cd squish-3.4.1-eval-tk-src
barre@tetsuo:~/build/squish-3.4.1-eval-tk-src$ ./configure "--with-qtdir=/usr/share/qt3" "--with-tclconfig=/opt/tcltk8.5.2/lib/tclConfig.sh" "--with-tkconfig=/opt/tcltk8.5.2/lib/tkConfig.sh" 

Note that the configure script may not find your Qt3 distribution correctly: use --with-qtdir to point to the appropriate directory. Use --with-tclconfig and --with-tkconfig to point to your own Tcl/Tk distribution, if any (here /opt/tcltk8.5.2)

  • Enter your license key (found in squish-3-license)
Configuring Squish. For license information please read the LICENSE file.
By configuring and building Squish you are accepting the terms of this license.
Enter license key: ***-*****-*****-***
Checking for C++ compiler ......... g++
Checking for g++'s version ......... 4
[...]
Done with configuring. Full log in config.log. Now type './build'.
* Build
<pre>
barre@tetsuo:~/build/squish-3.4.1-eval-tk-src$ ./build

Testing KWCallbacksExample

In this section, we will exercise KWWidgets' KWCallbacksExample example.

  • If you are new to Squish you may want to read: Squish Concepts, Creating the First Test. The Squish for Tk documentation is located offline in your build directory at squish-3.4.1-eval-tk-src/doc/book/index.html, or online at http://www.froglogic.com/download/book/.
  • Build KWWidgets examples (make sure KWWidgets_BUILD_EXAMPLES is set to ON), make sure the ./bin/KWCallbacksExample example has been built and is working properly.
  • Start the Squish IDE
barre@tetsuo:~/build/squish-3.4.1-eval-tk-src$ ./bin/squish
  • Create a new Test Suite
    • Select "Create New Test Suite" at the Welcome page.
    • Enter a Suite Name (say kwcallbacksexample). Select where the test suite and its files shall be saved (say ~/tmp/kww_test/). Hit "Next".
    • Specify which toolkit the application is using. KWWidgets uses Tcl/Tk under the hood, therefore select the Tk radiobutton. Hit "Next". NOTE: this page will *only* show up if Squish was built to support *several* toolkits; if only one toolkit is available (hopefully, Tk), this page will not be displayed and the appropriate toolkit will be picked automatically.
    • Select Tcl as the scripting language (if it isn't available, Squish was not able to find or use your Tcl/Tk distribution at build time). Hit "Next".
    • Select the Application Under Test (AUT): pick the the ./bin/KWCallbacksExample application found in your KWWidgets build tree. Notat that even though we are using Squish for Tk, we are actually exercising a KWWidgets *binary application*, not a Tcl/Tk *script*. Hit "Finish".
  • Create a new Test Case
    • Select "Create New Test Case" or right-click on suite_kwcallbacksexample in the left tree and select "New Test Case...". Name it, say, Test1. This should create a tst_Test1 case in the left tree and a test.tcl file in your test suite directory.
New Test Suite
New Test Case
  • Record the Test Case
    • Right-click on tst_Test1 and select "Record...". Accept the defaults and click "Record". This should launch the KWCallbacksExample. Note the "Squish Control Bar" window displaying "Recording test case 'tst_Test1'.
    • Move the slider in the KWCallbacksExample window from 10.0 to a different value, say, 50.0. Note a new (and lengthy) entry in the "Squish Control Bar" window: "scrollTo KWCallbacksExample.vtkKWWindow0.vtkKWFrame3.[...].vtkKWMyWidget0.vtkKWScale0 50000".
    • Exit "Recording" mode by closing or exiting the KWCallbacksExample window, or hitting the "End Recording" button in the "Squish Control Bar" window.
    • Back to the Squish IDE, note that the script has been updated to reflect your interaction with the AUT:
      1. waitForObject makes sure a widget is ready and has been mapped on-screen.
      2. The widget name itself is often very long as it reflects the hierarchy of parent-child widgets in a typical KWWidgets application. The name of each child in this chain is created at run-time by concatenating the name of the C++ class for that widget to a unique ID among its siblings. The last child in this specific example should be vtkKWScale0, which is the de-facto KWWidgets C++ class used to wrap the Tcl/Tk scale widget we just interacted with.
      3. snooze 1.2; snooze statements force the script to wait for N seconds. These calls are generated to ensure that the script always runs with the same time-delays as when it was recorded. They are added because in some cases an action may take some time to complete and the application may not be ready for the following action in time.
      4. invoke scrollTo is a Squish command that will act on a widget. In this case, this will scroll the scale slider to its new value, 50.0.
      5. invoke closeWindow is another Squish command that should close the application window (depending on how you stopped recording).
Record Test Case
Test Case Recorded
  • Execute the Test Case
    • Right-click on tst_Test1 and select "Exit", or hit F5, or select "Test Suite -> Execute" in the main menu bar. This should run the whole test, move the slider to 50.0 automatically, and bring you back to the Squish IDE.
  • Insert a Verification Point

Verification points (VP) can (and should) be added to make sure the application behaved correctly, i.e. that once executed by Squish, we end up in the state we expected. There are multiple ways to add a VP; in this case, we will insert a breakpoint where the verification should take place, execute the testing script again and insert the VP itself.

    • In the test.tcl window, insert a breakpoint on the line right *after* the snooze command.

Issues

  • Can't find Qt
Checking Qt version ......... 
Can't find Qt includes in /usr/include and /usr/src

=> Make sure you installed Qt3

  • New Test Suite: Scripting Language, No Tcl

If the Tcl option is not available in the Scripting Language page when creating a new Test Suite, then Squish was not build with proper Tcl support. Make sure you specified the path to your Tcl/Tk distribution and re-build.

Template:KWWidgets/Template/Footer