diff --git a/.zuul.yaml b/.zuul.yaml
index 49dbe2d664..4541fbde0a 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -205,6 +205,8 @@
             # The functional-tips job only tests the latest and shouldn't be run
             # on the stable branches
             branches: ^(?!stable)
+        - openstack-tox-lower-constraints
     gate:
       jobs:
         - osc-functional-devstack
+        - openstack-tox-lower-constraints
diff --git a/lower-constraints.txt b/lower-constraints.txt
new file mode 100644
index 0000000000..f7c7d09faf
--- /dev/null
+++ b/lower-constraints.txt
@@ -0,0 +1,144 @@
+amqp==2.1.1
+aodhclient==0.9.0
+appdirs==1.3.0
+asn1crypto==0.23.0
+Babel==2.3.4
+bandit==1.4.0
+cachetools==2.0.0
+cffi==1.7.0
+cliff==2.8.0
+cmd2==0.8.0
+contextlib2==0.4.0
+coverage==4.0
+cryptography==2.1
+debtcollector==1.2.0
+decorator==3.4.0
+deprecation==1.0
+docker==2.4.2
+docker-pycreds==0.2.1
+dogpile.cache==0.6.2
+eventlet==0.18.2
+extras==1.0.0
+fasteners==0.7.0
+fixtures==3.0.0
+flake8==2.5.5
+flake8-import-order==0.13
+future==0.16.0
+futurist==1.2.0
+gitdb==0.6.4
+GitPython==1.0.1
+gnocchiclient==3.3.1
+greenlet==0.4.10
+hacking==0.12.0
+httplib2==0.9.1
+idna==2.6
+iso8601==0.1.11
+Jinja2==2.10
+jmespath==0.9.0
+jsonpatch==1.16
+jsonpointer==1.13
+jsonschema==2.6.0
+keystoneauth1==3.4.0
+kombu==4.0.0
+linecache2==1.0.0
+MarkupSafe==1.0
+mccabe==0.2.1
+mock==2.0.0
+monotonic==0.6
+mox3==0.20.0
+msgpack-python==0.4.0
+munch==2.1.0
+netaddr==0.7.18
+netifaces==0.10.4
+openstacksdk==0.11.2
+os-client-config==1.28.0
+os-service-types==1.2.0
+os-testr==1.0.0
+osc-lib==1.8.0
+oslo.concurrency==3.25.0
+oslo.config==5.2.0
+oslo.context==2.19.2
+oslo.i18n==3.15.3
+oslo.log==3.36.0
+oslo.messaging==5.29.0
+oslo.middleware==3.31.0
+oslo.serialization==2.18.0
+oslo.service==1.24.0
+oslo.utils==3.33.0
+oslotest==3.2.0
+osprofiler==1.4.0
+paramiko==2.0.0
+Paste==2.0.2
+PasteDeploy==1.5.0
+pbr==2.0.0
+pep8==1.5.7
+pika==0.10.0
+pika-pool==0.1.3
+ply==3.10
+positional==1.2.1
+prettytable==0.7.2
+pyasn1==0.1.8
+pycodestyle==2.3.1
+pycparser==2.18
+pyflakes==0.8.1
+pyinotify==0.9.6
+pyOpenSSL==17.1.0
+pyparsing==2.1.0
+pyperclip==1.5.27
+python-barbicanclient==4.5.2
+python-cinderclient==3.3.0
+python-congressclient==1.9.0
+python-dateutil==2.5.3
+python-designateclient==2.7.0
+python-glanceclient==2.8.0
+python-heatclient==1.10.0
+python-ironic-inspector-client==1.5.0
+python-ironicclient==2.2.0
+python-karborclient==0.6.0
+python-keystoneclient==3.8.0
+python-mimeparse==1.6.0
+python-mistralclient==3.1.0
+python-muranoclient==0.8.2
+python-neutronclient==6.7.0
+python-novaclient==9.1.0
+python-octaviaclient==1.3.0
+python-rsdclient==0.1.0
+python-saharaclient==1.4.0
+python-searchlightclient==1.0.0
+python-senlinclient==1.1.0
+python-subunit==1.0.0
+python-swiftclient==3.2.0
+python-troveclient==2.2.0
+python-zaqarclient==1.0.0
+python-zunclient==1.2.1
+pytz==2013.6
+PyYAML==3.12
+repoze.lru==0.7
+requests==2.14.2
+requests-mock==1.1.0
+requestsexceptions==1.2.0
+rfc3986==0.3.1
+Routes==2.3.1
+rsd-lib==0.1.0
+simplejson==3.5.1
+six==1.10.0
+smmap==0.9.0
+statsd==3.2.1
+stestr==1.0.0
+stevedore==1.20.0
+sushy==0.1.0
+tempest==17.1.0
+tenacity==3.2.1
+testrepository==0.0.18
+testtools==2.2.0
+traceback2==1.4.0
+ujson==1.35
+unittest2==1.1.0
+urllib3==1.21.1
+validictory==1.1.1
+vine==1.1.4
+warlock==1.2.0
+WebOb==1.7.1
+websocket-client==0.44.0
+wrapt==1.7.0
+yaql==1.1.3
diff --git a/tox.ini b/tox.ini
index 7ba2f2191d..9c10eb2fb7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -133,3 +133,10 @@ exclude = .git,.tox,dist,doc,*lib/python*,*egg,build,tools
 ignore = __
 import-order-style = pep8
 application_import_names = openstackclient
+
+[testenv:lower-constraints]
+basepython = python3
+deps =
+  -c{toxinidir}/lower-constraints.txt
+  -r{toxinidir}/test-requirements.txt
+  -r{toxinidir}/requirements.txt