diff --git a/tests/CI/runTestsuite.sh b/tests/CI/runTestsuite.sh
index 466991a44c53f9caef6615db8c06e770472828f0..230834956b81b9541c1007b193540da8bfb00bc1 100755
--- a/tests/CI/runTestsuite.sh
+++ b/tests/CI/runTestsuite.sh
@@ -4,6 +4,7 @@ REALTIME=0
 TEST_TIMEOUT=600
 source $CIDIR/ci.functions
 ASTETCDIR=$DESTDIR/etc/asterisk
+SETUPVENV=$TESTSUITE_DIR/setupVenv.sh
 
 if [ x"$WORK_DIR" != x ] ; then
 	export AST_WORK_DIR="$(readlink -f $WORK_DIR)"
@@ -11,16 +12,23 @@ if [ x"$WORK_DIR" != x ] ; then
 fi
 
 pushd $TESTSUITE_DIR
-
 ./cleanup-test-remnants.sh
 
 if [ $REALTIME -eq 1 ] ; then
 	$CIDIR/setupRealtime.sh --initialize-db=${INITIALIZE_DB:?0}
 fi
 
-export PYTHONPATH=./lib/python/
+# check to see if venv scripts exist so we can use them
+if [ -f "$SETUPVENV" ] ; then
+	# explicitly invoking setupVenv to capture output in case of failure
+	./setupVenv.sh
+	VENVPREFIX="runInVenv.sh python "
+else
+	export PYTHONPATH=./lib/python/
+fi
+
 echo "Running tests ${TESTSUITE_COMMAND} ${AST_WORK_DIR:+with work directory ${AST_WORK_DIR}}"
-./runtests.py --cleanup --timeout=${TEST_TIMEOUT} ${TESTSUITE_COMMAND} | contrib/scripts/pretty_print --no-color --no-timer --term-width=120 --show-errors || :
+./${VENVPREFIX}runtests.py --cleanup --timeout=${TEST_TIMEOUT} ${TESTSUITE_COMMAND} | contrib/scripts/pretty_print --no-color --no-timer --term-width=120 --show-errors || :
 
 if [ $REALTIME -eq 1 ] ; then
 	$CIDIR/teardownRealtime.sh --cleanup-db=${CLEANUP_DB:?0}