diff --git a/.travis.yml b/.travis.yml
index 61599d109fac5df64fb0d691c53a2b2a29a7387e..426bf921cf752e457e17c718cdf18f1b3e57a3f8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,6 +8,11 @@ python:
  - "nightly"
  - "pypy"
  - "pypy3.5"
+cache: pip
+before_script:
+  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
+  - chmod +x ./cc-test-reporter
+  - ./cc-test-reporter before-build
 script:
  - python -m compile_definitions
  - python setup.py test
@@ -16,9 +21,9 @@ install:
  - pip install -r requirements.txt
  - pip install -r stress_tests/requirements.txt
  - pip install yapf
- - pip install --force-reinstall "coverage>=4.0,<4.4" codeclimate-test-reporter
 after_success:
- - codeclimate-test-reporter
+  - coverage xml
+  - ./cc-test-reporter after-build -t coverage.py --exit-code $TRAVIS_TEST_RESULT
  - bash build.sh
 services: rabbitmq
 addons:
diff --git a/setup.py b/setup.py
index e6a2d15247d116fcd8fadf2eb8ae154fe0895cc2..18fb100f563d4f3d46045de34b0354dc5a32564c 100644
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@ setup(keywords=['amqp', 'rabbitmq', 'client', 'network', 'ha', 'high availabilit
 Also, handles your reconnects and transactionality THE RIGHT WAY, though somewhat opinionated''',
       install_requires=['six', 'monotonic', 'futures', 'typing'],
       # per coverage version for codeclimate-reporter
-      tests_require=["nose2", "nose2[coverage_plugin]"],
+      tests_require=["nose2", "coverage", "nose2[coverage_plugin]"],
       test_suite='nose2.collector.collector'
       )