diff --git a/.gitignore b/.gitignore
index 449a99afb699b557b1c55e3eb252d0798667d942..b5e775bf3d7c0e741fb68c5e451cd55071a84b94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,5 @@ venv/
 
 # pyenv
 .python-version
+
+.tox
diff --git a/.travis.yml b/.travis.yml
index 1990ee85f2ff5900095954b4fc4eb13ac91ccdda..6a96fa12ff4b39cc044828dd29fe470dc7056fe3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,12 +1,16 @@
 language: python
 sudo: false
+
+python:
+- '3.8'
+env:
+  - TOXENV=py38-django22
+  - TOXENV=quality
 install:
   - pip install -r requirements/travis.txt
+script:
+  - tox
 after_success: coveralls
-env:
-  global:
-    secure: AuuqhAgQEkI96lauuaWuRBXKKCIBJ8hKpc1YzA6lGJGIsIoU7sH9IqNBk3mAr8kMOgodFoI5zYLGJhEgc/tEvzsHpp7NWFXC0yhJQjgMHzi7JgFzhoRAFfEBOb08+dSfjNyvXP+ULegoKHpt8AkJ3konSSKavOWy0IPr42p7YsHnj1F8uOr7kXO+LZVPStFuWTS56HCO38Gxeq/rnfsNJadlffJu5AFitkxoMWrvML4D10fzsJSgcIUi8MLhueQ6z7gaD0SH9UDJicSU+7u6ERP5mqzuamdW0JgAOwGJLS3fTgDyIlnn8jqe2nsoZlHGLet80096lmfqkVK8RA52H+tbXM3m157pmrJO90eJXIfW10fliPizKG0aO3lX54Ebl0DCfo7J7/kwRcPbjw1REGVOwHCpkzUzWgsLug5brvgft7uHxMSTvFhzUhGCqUnad/T5gmR7wVvHCB+XIWAt/iMFGt6wMHyoYnvzq7tUA4GP9qaEZnGbyQi4JgzpCcfbtWniAumxzAyOJKMWp8/1D0xIRo4xP3yHy/uUb/GQQHwnxE5FVMbSs0LmL3zsdIhldhjwCXl9yGuIqhlfUNbCBguHQAAB2xlKu17RgBVyzWxY2POjF4pe0839ohUU8S9oYEhb+3ydk+Gni8X93CelwMTBwks08tkpl1xFtar0yao=
-
 deploy:
   provider: pypi
   user: edx
@@ -16,12 +20,3 @@ deploy:
     tags: true
   password:
     secure: DKlhHIFctJS9k/1sdlKfL34MwVIHxZn6QwrQ4/jMaiucNARP7MUoTEhd5wEN7wNMyafsYfkY960/dJuqgF6ztZzt7jYX+Nu9o0YEOM742f5hcqQcn/k2GrU2X5+hMgAVUL3YP4JlZwst4pRM1eRlzXgsoxqCET84V2biS1d04ivJgKO5T9NNHTeIQDRDpSpUVuloY1qVMS6IFewLjL6XZuCYtCBXBcBN29EDFvy8v683JAZyz332Xr8R0yF/u09XFKnW+migeiT9gWNafIKXgDAidr0gbkF4r71OdGCUxhCwa+/IHnAYCptajzd4QUd2gj5yOccbVhtUondK3DSA6NaAHdwFjmU7XS5XouDlMS83wyTbqGlEXj9dEuY6lq/UXeUjvfmbqUc1W5qi7eKGxY2qZ1+3HucnCVlPbzgEVMxnPN/YtPe59SSay60gFD7KyZfxxavLsuhSFM4+aZ/hyW9pI1vu+k9UuVVEw9QisUORHHg5YYC75BsVXI5kkhXAF7F880cFlV+DPEt7mwM0xsAPcbyStmmJ+7sXkoI6bWF+QsveqgY4SPYD14bZ8v3PK4b5UzrQOHSEpa1NNrm7942lnkySoC5Rm6YIShnLdJ+Gdf8wb4RezqnhmZcKVc/9QXQcUga+nj5CRUb9wFVncmak2tf8aAvfqeML8pHzkrs=
-
-jobs:
-  include:
-    - name: Python 3.8 - Tests
-      script: make test
-      python: '3.8'
-    - name: Code Quality
-      script: make quality
-      python: '3.8'
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000000000000000000000000000000000000..4d6d0d7dbc782c1554f06f2a19b77b21f339c6a3
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,20 @@
+[tox]
+envlist =  py38-django{22}, quality
+
+[testenv]
+whitelist_externals =
+	make
+deps =
+	django22: Django>=2.2,<2.3
+	-r{toxinidir}/requirements/test.txt
+commands =
+	make test
+
+[testenv:quality]
+whitelist_externals =
+	make
+deps =
+	-r{toxinidir}/requirements/test.txt
+commands =
+	make quality
+