Terminating test case after timeout

Last edited on

The Unix shell script below demonstrates a way to terminate the test case execution after a specified period of time. This is to cope with cases of e.g. a test script being stuck inside an endless loop.

#! /bin/sh

TIMEOUT=3
SQUISHRUNNER="<path_to_squish>/bin/squishrunner --testsuite <path_to_suite> --reportgen xml2.1,/tmp/results.xml"

# run subshell to watch and kill with TIMEOUT ### 
( sleep $TIMEOUT; echo "TIMEOUT AFTER $TIMEOUT seconds"; kill -KILL $$ 2>/dev/null ) &

$SQUISHRUNNER

# kill subshell if normal execution continues
# program will not reach here if subshell sleep times out
# $! refers to last process put into background - here the subshell
if [ -n "$result" ]; then echo "kill -HUP $!"; kill -HUP $!; fi
exit 0

Note that killing squishrunner like that will likely leave only partial results behind. I.e. the generated XML file might be missing closing tags or be completely empty.

A safer built-in --timeout switch for squishrunner is planned for the Squish 6.1 release. Please contact technical support if you want to want to test this new feature with a 6.1 pre-release package.