diff --git a/test-requirements.txt b/test-requirements.txt
new file mode 100644
index 000000000..3bb043237
--- /dev/null
+++ b/test-requirements.txt
@@ -0,0 +1,8 @@
+hacking>=0.5.3,<0.6
+
+coverage>=3.6
+discover
+testrepository>=0.0.13
+testtools>=0.9.27
+Babel>=0.9.6,<1.0
+argparse
diff --git a/tools/test-requires b/tools/test-requires
deleted file mode 100644
index 0cf0fc186..000000000
--- a/tools/test-requires
+++ /dev/null
@@ -1,2 +0,0 @@
-testtools
-fixtures
diff --git a/tox.ini b/tox.ini
index a178c0b54..dc8fc1c2d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -5,26 +5,12 @@ envlist = py26,py27,pep8
 setenv = LANG=en_US.UTF-8
          LANGUAGE=en_US:en
          LC_ALL=C
-deps=
-    testtools
-    testrepository
-    coverage
-    babel
+deps= -r{toxinidir}/test-requirements.txt
 commands=
     bash -c 'if [ ! -d ./.testrepository ] ; then testr init ; fi'
     bash -c 'testr run --parallel {posargs} ; RET=$?; echo "Slowest Tests" ; testr slowest && exit $RET'
 
-[testenv:py26]
-deps=
-    testtools
-    testrepository
-    coverage
-    babel
-    discover
-    argparse
-
 [testenv:pep8]
-deps = hacking>=0.5.3,<0.6
 commands =
   flake8 {posargs}
 
@@ -43,4 +29,3 @@ downloadcache = ~/cache/pip
 ignore = E125,H
 builtins = _
 exclude =  .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build
-