181 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| CTHULHU TEST HARNESS:
 | |
| ------------------
 | |
| 
 | |
| This document provides a very brief description of the Cthulhu test
 | |
| harness.  The Cthulhu test harness is not meant to be our final answer to
 | |
| testing, but it helps fill the gap until more general testing for
 | |
| GNOME is avaialble.
 | |
| 
 | |
| 
 | |
| MAIN IDEAS:
 | |
| -----------
 | |
| 
 | |
| The main ideas behind the Cthulhu test harness are as follows:
 | |
| 
 | |
| * We try to make sure there is a textual description of a test that
 | |
|   someone can follow by hand when sitting behind the machine.  The 
 | |
|   description contains the goal of the test, the procedure to follow,
 | |
|   and the expected results.  We try to keep the description of the
 | |
|   tests here:
 | |
| 
 | |
|   http://cvs.gnome.org/viewcvs/*checkout*/cthulhu/docs/doc-set/cthulhu.html#TESTINGPLAN
 | |
| 
 | |
| * Each test is intended to be small and test for a specific feature
 | |
|   of Cthulhu and/or for a specific bug that has been been found and
 | |
|   fixed.
 | |
| 
 | |
| * Cthulhu provides the ability to send a textual description of what it
 | |
|   is sending to speech and braille.  This allows for the recording
 | |
|   of output, thus allowing for comparison to results in the future.
 | |
| 
 | |
| * The harness merely consists of playing back pre-recorded keystrokes
 | |
|   and comparing Cthulhu's output to a previously recorded successful run
 | |
|   (where 'success' means Cthulhu output the correct information).
 | |
| 
 | |
| 
 | |
| DIRECTORY LAYOUT:
 | |
| -----------------
 | |
| 
 | |
| The Cthulhu regression tests contained in this directory are laid out as
 | |
| follows:
 | |
| 
 | |
| ./harness:    test harness scripts
 | |
| 
 | |
| ./keystrokes: keystroke and otyher files for playing back tests
 | |
| 
 | |
| ./results:    reference results containing accurate output from Cthulhu
 | |
|               when the test harness runall script was run using the
 | |
|               keystrokes
 | |
| 
 | |
| 
 | |
| PREREQUISITES:
 | |
| --------------
 | |
| 
 | |
| The main prerequisite for running the tests is that you've checked the
 | |
| cthulhu module out from the GNOME git repository.  If you want to do
 | |
| regression testing to compare the test results with a known 'correct'
 | |
| set of results, you need to create an 'cthulhu' user on your machine and
 | |
| run the tests while logged in as that user.  It's best if you check
 | |
| the cthulhu module out directly in the home directory of the user running
 | |
| the tests.
 | |
| 
 | |
| 
 | |
| MAIN FILES:
 | |
| -----------
 | |
| 
 | |
| ./harness/runall.sh: The ./harness directory contains two main
 | |
|   scripts: runall.sh and runone.sh.  The runall.sh script is the main
 | |
|   script to use and will execute all the tests and will place the
 | |
|   results in a directory whose name is of the form YYYY-MM-DD_HH:MM:SS
 | |
|   (e.g., 2006-11-29_20:21:41).
 | |
| 
 | |
| ./harness/runone.sh: The runone.sh script allows a test creator to
 | |
|   run just one test.  The parameters are:  <*.keys file> <app-name>
 | |
|   where the *.keys file contains keystrokes and <app-name> is the
 | |
|   name of the application to run with the given *.keys file.
 | |
| 
 | |
| ./harness/user-settings.py.in: contains the default Cthulhu configuration
 | |
|   settings.  The primary thing this file does is disable the use of
 | |
|   real speech and braille and instead sends a text form of the speech
 | |
|   and braille to a log file.  Note that there are also facilities to
 | |
|   specify a custom user-settings file for each keystroke file so as to
 | |
|   allow the testing of Cthulhu settings (e.g., echo by word).
 | |
| 
 | |
| ./keystrokes/*: The ./keystrokes directory consists of a set of
 | |
|   directories, where each directory name has significant meaning
 | |
|   and is used to determine which app the test harness uses for
 | |
|   testing.  The directory name is typically the name of a binary 
 | |
|   on the path.  For example, there is a ./keystrokes/gtk-demo
 | |
|   directory, and the files under this directory are for testing Cthulhu
 | |
|   using the gtk-demo application.  The other type of directory name
 | |
|   is one that matches the output of 'uname', and is used to contain
 | |
|   platform specific tests (e.g., Ctrl+Esc for Solaris versus Alt+F1
 | |
|   for Linux).
 | |
| 
 | |
|   Under each ./keystrokes/* directory, there will be one or more
 | |
|   *.keys files.  These contain keystrokes recorded using the 
 | |
|   record_keystrokes.py utility (see RECORDING TESTS below).  In
 | |
|   addition, there may be an option *.settings file for each *.keys
 | |
|   file.  The *.settings file is an Cthulhu settings file to use
 | |
|   specifically for the *.keys file, and is used to help test
 | |
|   specific Cthulhu features such as word echo, key echo, etc.
 | |
| 
 | |
| ./results/*: The ./results directory should contain a set of
 | |
|   directories that matches those in the ./keystrokes directory.
 | |
|   Under each of the ./results/* directores are *.cthulhu files
 | |
|   containing the reference speech and braille output from a
 | |
|   known successful run of Cthulhu using the associated *.keys file.
 | |
| 
 | |
| 
 | |
| RECORDING KEYSTROKES:
 | |
| ---------------------
 | |
| 
 | |
| To record a test, you should first start the application to be tested
 | |
| and leave it in its initial startup state.  For example, if you want
 | |
| to write a test for gedit, just start 'gedit' and don't do anything in
 | |
| it yet.
 | |
| 
 | |
| In a separate terminal window, run cthulhu's 'record_keystrokes.py'
 | |
| module and immediately give focus back to the window of the
 | |
| application you are testing.  You can run the record_keystrokes.py
 | |
| module as follows (the 'sleep 5' gives you time to put focus back on
 | |
| the app):
 | |
| 
 | |
|   sleep 5; python ~/cthulhu/src/tools/record_keystrokes.py > myfile.keys
 | |
| 
 | |
| Then, interact with the application and press F12 when you are done.
 | |
| The F12 tells record_keystrokes.py to quit.  If you want to do a rough
 | |
| verification that the recorded file is OK, you can run the
 | |
| 'sanity_check.py' module:
 | |
| 
 | |
|   python ~/cthulhu/src/tools/sanity_check.py < myfile.keys
 | |
| 
 | |
| NOTE: You need to be somewhat careful about recording tests.  There
 | |
| are cases where some keystrokes do not make it to the AT-SPI, such as
 | |
| when applications do keyboard grabs.  In these cases, you need to find
 | |
| a different way to accomplish what you're trying to do.  In addition,
 | |
| be aware that some applications also embed time-based and
 | |
| username-specific stuff in them.  They also sometimes modify their
 | |
| menus based upon past use (e.g., a list of recently used documents in
 | |
| the 'File' menu).  In these cases, you should try to avoid navigating
 | |
| through these areas so as to avoid inconsistent output from run to
 | |
| run.
 | |
| 
 | |
| NOTE ALSO: the test harness automatically starts and kills the
 | |
| application to be tested.  As such, you usually do not need to record
 | |
| keystrokes to exit the application being tested, unless you happen to
 | |
| be writing a test for that, of course.  Some apps, such as Nautilus
 | |
| and Open Office, tend to spawn off or connect to background processes.
 | |
| In order to ensure these types of applications quit, you actually do
 | |
| need to make sure the keystrokes to quit these applications are
 | |
| contained in every keystroke file.
 | |
| 
 | |
| 
 | |
| RUNNING THE HARNESS:
 | |
| --------------------
 | |
| 
 | |
| To run the harness, merely run the runall.sh script.  It will run
 | |
| through all the keystrokes and compare the results to the known
 | |
| results.
 | |
| 
 | |
| 
 | |
| KNOWN ISSUES:
 | |
| -------------
 | |
| 
 | |
| * Solaris and Linux use different keycodes.  The keystroke files
 | |
|   currently are recorded on Ubuntu.  The work needed here might be to
 | |
|   create a directory called ./keystrokes_solaris parallel to the
 | |
|   ./keystrokes directory, and then specify this directory via the "-k"
 | |
|   command line option to the runall.sh script.
 | |
| 
 | |
| * The OS-specific (e.g., 'uname') portions of the harness really do not
 | |
|   work yet.  Instead, the keystroke files are always played regardless
 | |
|   of platform.  We need to work this out.
 | |
| 
 | |
| * OpenOffice behaves oddly when popping up dialogs: there seems to be
 | |
|   a variable delay on these dialogs and the played keystrokes do not
 | |
|   always seem to get to the right window.  You'll be able to tell this
 | |
|   because OpenOffice will not quit when the test is completed.  For
 | |
|   now, the workaround is to keep rerunning the tests via the runone.sh
 | |
|   script until the tests complete.
 |