diff --git a/test-requirements-py2.txt b/test-requirements-py2.txt
index ac5c18a5..2cb1c751 100644
--- a/test-requirements-py2.txt
+++ b/test-requirements-py2.txt
@@ -17,3 +17,4 @@ oslotest>=1.2.0  # Apache-2.0
 testrepository>=0.0.18
 testscenarios>=0.4
 testtools>=0.9.36,!=1.2.0
+tempest-lib
diff --git a/test-requirements-py3.txt b/test-requirements-py3.txt
index 58b9a3d1..d2487857 100644
--- a/test-requirements-py3.txt
+++ b/test-requirements-py3.txt
@@ -16,6 +16,7 @@ oslotest>=1.2.0  # Apache-2.0
 testrepository>=0.0.18
 testscenarios>=0.4
 testtools>=0.9.36,!=1.2.0
+tempest-lib
 
 # TODO(harlowja): add in pymysql when able to...
 # https://review.openstack.org/#/c/123737
diff --git a/tools/pretty_tox.sh b/tools/pretty_tox.sh
new file mode 100755
index 00000000..b9fd556c
--- /dev/null
+++ b/tools/pretty_tox.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+# return nonzero exit status of rightmost command, so that we
+# get nonzero exit on test failure without halting subunit-trace
+set -o pipefail
+
+
+TESTRARGS=$1
+
+python setup.py testr --slowest --testr-args="--subunit $TESTRARGS" | subunit-trace -f
+
diff --git a/tox.ini b/tox.ini
index 79111163..3d206408 100644
--- a/tox.ini
+++ b/tox.ini
@@ -9,12 +9,13 @@ envlist = py26,py27,py33,py34,pep8
 # NOTE(dhellmann): We cannot set usedevelop=True
 # for oslo libraries because of the namespace package.
 #usedevelop = True
+whitelist_externals = bash
 install_command = pip install -U {opts} {packages}
 setenv =
    VIRTUAL_ENV={envdir}
 deps = -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements-py2.txt
-commands = python setup.py testr --slowest --testr-args='{posargs}'
+commands = bash tools/pretty_tox.sh '{posargs}'
 
 [testenv:sqla_09]
 commands = pip install SQLAlchemy>=0.9.0,!=0.9.5,<1.0.0