diff --git a/run_tests.sh b/run_tests.sh
index a7d66dd12..9cee6751b 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -2,163 +2,45 @@
 
 set -eu
 
-function usage {
-  echo "Usage: $0 [OPTION]..."
-  echo "Run python-novaclient test suite"
-  echo ""
-  echo "  -V, --virtual-env        Always use virtualenv.  Install automatically if not present"
-  echo "  -N, --no-virtual-env     Don't use virtualenv.  Run tests in local environment"
-  echo "  -s, --no-site-packages   Isolate the virtualenv from the global Python environment"
-  echo "  -x, --stop               Stop running tests after the first error or failure."
-  echo "  -f, --force              Force a clean re-build of the virtual environment. Useful when dependencies have been added."
-  echo "  -p, --pep8               Just run pep8"
-  echo "  -P, --no-pep8            Don't run pep8"
-  echo "  -c, --coverage           Generate coverage report"
-  echo "  -h, --help               Print this usage message"
-  echo "  --hide-elapsed           Don't print the elapsed time for each test along with slow test list"
-  echo ""
-  echo "Note: with no options specified, the script will try to run the tests in a virtual environment,"
-  echo "      If no virtualenv is found, the script will ask if you would like to create one.  If you "
-  echo "      prefer to run tests NOT in a virtual environment, simply pass the -N option."
-  exit
-}
+cat <<EOF
+run_tests.sh is deprecated and this script will be removed
+before the Mitaka release. All tests should be run through
+tox.
 
-function process_option {
-  case "$1" in
-    -h|--help) usage;;
-    -V|--virtual-env) always_venv=1; never_venv=0;;
-    -N|--no-virtual-env) always_venv=0; never_venv=1;;
-    -s|--no-site-packages) no_site_packages=1;;
-    -f|--force) force=1;;
-    -p|--pep8) just_pep8=1;;
-    -P|--no-pep8) no_pep8=1;;
-    -c|--coverage) coverage=1;;
-    -*) testropts="$testropts $1";;
-    *) testrargs="$testrargs $1"
-  esac
-}
+To run style checks:
 
-venv=.venv
-with_venv=tools/with_venv.sh
-always_venv=0
-never_venv=0
-force=0
-no_site_packages=0
-installvenvopts=
-testrargs=
-testropts=
-wrapper=""
-just_pep8=0
-no_pep8=0
-coverage=0
+ tox -e pep8
 
-LANG=en_US.UTF-8
-LANGUAGE=en_US:en
-LC_ALL=C
+To run python 2.7 unit tests
 
-for arg in "$@"; do
-  process_option $arg
-done
+ tox -e py27
 
-if [ $no_site_packages -eq 1 ]; then
-  installvenvopts="--no-site-packages"
-fi
+To run functional tests
 
-function init_testr {
-  if [ ! -d .testrepository ]; then
-    ${wrapper} testr init
-  fi
-}
+ tox -e functional
 
-function run_tests {
-  # Cleanup *pyc
-  ${wrapper} find . -type f -name "*.pyc" -delete
+To run a subset of any of these tests:
 
-  if [ $coverage -eq 1 ]; then
-    # Do not test test_coverage_ext when gathering coverage.
-    if [ "x$testrargs" = "x" ]; then
-      testrargs="^(?!.*test_coverage_ext).*$"
-    fi
-    export PYTHON="${wrapper} coverage run --source novaclient --parallel-mode"
-  fi
-  # Just run the test suites in current environment
-  set +e
-  TESTRTESTS="$TESTRTESTS $testrargs"
-  echo "Running \`${wrapper} $TESTRTESTS\`"
-  ${wrapper} $TESTRTESTS
-  RESULT=$?
-  set -e
+ tox -e py27 someregex
 
-  copy_subunit_log
+ i.e.: tox -e py27 test_servers
 
-  return $RESULT
-}
+Use following to replace './run_test.sh -8' to do pep8 check with changed files
 
-function copy_subunit_log {
-  LOGNAME=`cat .testrepository/next-stream`
-  LOGNAME=$(($LOGNAME - 1))
-  LOGNAME=".testrepository/${LOGNAME}"
-  cp $LOGNAME subunit.log
-}
+ tox -e pep8 -- -HEAD
 
-function run_pep8 {
-  echo "Running flake8 ..."
-  ${wrapper} flake8
-}
+Additional tox targets are available in tox.ini. For more information
+see:
+http://docs.openstack.org/project-team-guide/project-setup/python.html
 
-TESTRTESTS="testr run --parallel $testropts"
+NOTE: if you really really don't want to use tox to run tests, you
+can instead use:
 
-if [ $never_venv -eq 0 ]
-then
-  # Remove the virtual environment if --force used
-  if [ $force -eq 1 ]; then
-    echo "Cleaning virtualenv..."
-    rm -rf ${venv}
-  fi
-  if [ -e ${venv} ]; then
-    wrapper="${with_venv}"
-  else
-    if [ $always_venv -eq 1 ]; then
-      # Automatically install the virtualenv
-      python tools/install_venv.py $installvenvopts
-      wrapper="${with_venv}"
-    else
-      echo -e "No virtual environment found...create one? (Y/n) \c"
-      read use_ve
-      if [ "x$use_ve" = "xY" -o "x$use_ve" = "x" -o "x$use_ve" = "xy" ]; then
-        # Install the virtualenv and run the test suite in it
-        python tools/install_venv.py $installvenvopts
-        wrapper=${with_venv}
-      fi
-    fi
-  fi
-fi
+ testr run
 
-# Delete old coverage data from previous runs
-if [ $coverage -eq 1 ]; then
-    ${wrapper} coverage erase
-fi
+Documentation on using testr directly can be found at
+http://testrepository.readthedocs.org/en/latest/MANUAL.html
 
-if [ $just_pep8 -eq 1 ]; then
-    run_pep8
-    exit
-fi
+EOF
 
-init_testr
-run_tests
-
-# NOTE(sirp): we only want to run pep8 when we're running the full-test suite,
-# not when we're running tests individually. To handle this, we need to
-# distinguish between options (noseopts), which begin with a '-', and
-# arguments (testrargs).
-if [ -z "$testrargs" ]; then
-  if [ $no_pep8 -eq 0 ]; then
-    run_pep8
-  fi
-fi
-
-if [ $coverage -eq 1 ]; then
-    echo "Generating coverage report in covhtml/"
-    ${wrapper} coverage combine
-    ${wrapper} coverage html --include='novaclient/*' --omit='novaclient/openstack/common/*' -d covhtml -i
-fi
+exit 1