diff --git a/dev-requirements.txt b/dev-requirements.txt
index a7fb27c2c466b0ec0a9ab5ae542d43f5ba352680..498e68858abf7fe53136ab45b4d074070ec29c99 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -1,4 +1,10 @@
 Django>=1.6.11,<=1.11.999; python_version <= "2.7"
-Django>=1.7; python_version >= "3.6"
-nose
+Django>=2.0,<=2.999; python_version == "3.6"
+Django>=3.0; python_version >= "3.7"
+
+pytest~=4.6.11; python_version == "2.7"
+pytest~=7.0.1; python_version == "3.6"
+pytest~=7.1.2; python_version >= "3.7"
+pytest-env~=0.6.2
+
 sphinx-testing
diff --git a/tests/runtests.py b/tests/runtests.py
index 3a4a1a2ac94d6fff661827de64408f6011842b09..01b970d6f7aba14c64362b2d4da3d30670c430db 100755
--- a/tests/runtests.py
+++ b/tests/runtests.py
@@ -1,26 +1,9 @@
-#!/usr/bin/env python
-from __future__ import unicode_literals
+#!/usr/bin/env python3
 
-import os
 import sys
 
-import nose
-
-
-def run_tests():
-    nose_argv = [
-        'runtests.py',
-        '-v',
-    ]
-
-    if len(sys.argv) > 2:
-        nose_argv += sys.argv[2:]
-
-    if not nose.run(argv=nose_argv):
-        sys.exit(1)
+import pytest
 
 
 if __name__ == '__main__':
-    os.chdir(os.path.join(os.path.dirname(__file__), '..'))
-    sys.path.insert(0, os.getcwd())
-    run_tests()
+    sys.exit(pytest.main(sys.argv[1:]))
