diff --git a/.gitignore b/.gitignore
index 8c25b70..d61ae1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,5 +15,5 @@ doc/source/api/
 *.egg
 .autogenerated
 .coverage
-.testrepository/
+.stestr/
 .tox/
diff --git a/.stestr.conf b/.stestr.conf
new file mode 100644
index 0000000..95c6367
--- /dev/null
+++ b/.stestr.conf
@@ -0,0 +1,3 @@
+[DEFAULT]
+test_path=./shaker/tests
+top_dir=./
diff --git a/.testr.conf b/.testr.conf
deleted file mode 100644
index 8ecb52b..0000000
--- a/.testr.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-[DEFAULT]
-test_command=OS_STDOUT_CAPTURE=1 OS_STDERR_CAPTURE=1 ${PYTHON:-python} -m subunit.run discover -t ./ ./shaker/tests $LISTOPT $IDOPTION
-test_id_option=--load-list $IDFILE
-test_list_option=--list
diff --git a/test-requirements.txt b/test-requirements.txt
index cafcbe3..4b5796d 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -10,5 +10,5 @@ oslotest>=1.10.0 # Apache-2.0
 sphinx>=1.5.1 # BSD
 sphinxcontrib-httpdomain # BSD
 sphinx_rtd_theme
-testrepository>=0.0.18 # Apache-2.0/BSD
+stestr>=2.0.0 # Apache-2.0
 testtools>=1.4.0 # MIT
diff --git a/tox.ini b/tox.ini
index 88bd494..eafa52f 100644
--- a/tox.ini
+++ b/tox.ini
@@ -12,7 +12,7 @@ setenv = VIRTUAL_ENV={envdir}
          LC_ALL=C
 deps = -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
-commands = python setup.py testr --testr-args='{posargs}'
+commands = stestr run {posargs}
 
 [testenv:pep8]
 commands = flake8
@@ -26,7 +26,13 @@ whitelist_externals = bash
 commands = bash -c "find {toxinidir} -type f -not -wholename \*.tox/\* -and \( -name \*.sh -or -name \*rc -or -name functions\* -or \( -wholename lib/\* -and -not -name \*.md \) \) -print0 | xargs -0 bashate -v"
 
 [testenv:cover]
-commands = python setup.py testr --coverage --testr-args='{posargs}'
+setenv =
+    PYTHON=coverage run --source $project --parallel-mode
+commands =
+    stestr run '{posargs}'
+    coverage combine
+    coverage html -d cover
+    coverage xml -o cover/coverage.xml
 
 [testenv:genconfig]
 # When shaker is setup in develop mode it results in 2 packages: shaker and pyshaker