diff --git a/keystone_tempest_plugin/services/identity/clients.py b/keystone_tempest_plugin/services/identity/clients.py
index aac45d3..1baddc5 100644
--- a/keystone_tempest_plugin/services/identity/clients.py
+++ b/keystone_tempest_plugin/services/identity/clients.py
@@ -14,8 +14,7 @@
 
 import json
 
-import six
-from six.moves import http_client
+import http.client
 from tempest import config
 from tempest.lib.common import rest_client
 
@@ -53,26 +52,26 @@
     def _delete(self, entity_id, **kwargs):
         url = self._build_path(entity_id)
         resp, body = super(Federation, self).delete(url, **kwargs)
-        self.expected_success(http_client.NO_CONTENT, resp.status)
+        self.expected_success(http.client.NO_CONTENT, resp.status)
         return rest_client.ResponseBody(resp, body)
 
     def _get(self, entity_id=None, **kwargs):
         url = self._build_path(entity_id)
         resp, body = super(Federation, self).get(url, **kwargs)
-        self.expected_success(http_client.OK, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def _patch(self, entity_id, body, **kwargs):
         url = self._build_path(entity_id)
         resp, body = super(Federation, self).patch(url, body, **kwargs)
-        self.expected_success(http_client.OK, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        self.expected_success(http.client.OK, resp.status)
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def _put(self, entity_id, body, **kwargs):
         url = self._build_path(entity_id)
         resp, body = super(Federation, self).put(url, body, **kwargs)
-        self.expected_success(http_client.CREATED, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        self.expected_success(http.client.CREATED, resp.status)
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
diff --git a/keystone_tempest_plugin/services/identity/v3/auth_client.py b/keystone_tempest_plugin/services/identity/v3/auth_client.py
index f6cd660..bd68539 100644
--- a/keystone_tempest_plugin/services/identity/v3/auth_client.py
+++ b/keystone_tempest_plugin/services/identity/v3/auth_client.py
@@ -14,7 +14,6 @@
 
 import json
 
-import six
 from tempest.lib.common import rest_client
 
 from keystone_tempest_plugin.services.identity import clients
@@ -26,7 +25,7 @@
         resp, body = self.raw_request(
             url, 'GET', headers={'X-Auth-Token': token_id})
         self.expected_success(200, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def get_available_projects_scopes(self, keystone_v3_endpoint, token_id):
diff --git a/keystone_tempest_plugin/services/identity/v3/identity_providers_client.py b/keystone_tempest_plugin/services/identity/v3/identity_providers_client.py
index 98f49c7..08e4e9d 100644
--- a/keystone_tempest_plugin/services/identity/v3/identity_providers_client.py
+++ b/keystone_tempest_plugin/services/identity/v3/identity_providers_client.py
@@ -14,7 +14,6 @@
 
 import json
 
-import six
 from tempest.lib.common import rest_client
 
 from keystone_tempest_plugin.services.identity import clients
@@ -63,7 +62,7 @@
             self._build_path(entity_id=idp_id), 'protocols', protocol_id)
         resp, body = self.put(url, put_body)
         self.expected_success(201, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def delete_protocol_and_mapping(self, idp_id, protocol_id):
@@ -80,7 +79,7 @@
             self._build_path(entity_id=idp_id), 'protocols', protocol_id)
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def list_protocols_and_mappings(self, idp_id):
@@ -88,7 +87,7 @@
         url = '%s/%s' % (self._build_path(entity_id=idp_id), 'protocols')
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
 
     def update_protocol_mapping(self, idp_id, protocol_id, mapping_id):
@@ -98,5 +97,5 @@
             self._build_path(entity_id=idp_id), 'protocols', protocol_id)
         resp, body = self.patch(url, patch_body)
         self.expected_success(200, resp.status)
-        body = json.loads(body if six.PY2 else body.decode('utf-8'))
+        body = json.loads(body.decode('utf-8'))
         return rest_client.ResponseBody(resp, body)
diff --git a/keystone_tempest_plugin/tests/scenario/test_federated_authentication.py b/keystone_tempest_plugin/tests/scenario/test_federated_authentication.py
index a99118d..b152116 100644
--- a/keystone_tempest_plugin/tests/scenario/test_federated_authentication.py
+++ b/keystone_tempest_plugin/tests/scenario/test_federated_authentication.py
@@ -12,13 +12,13 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+import http.client
 import json
 from lxml import etree
-from six.moves import http_client
-from six.moves import urllib
 from tempest import config
 from tempest.lib.common.utils import data_utils
 import testtools
+import urllib
 
 from keystone_tempest_plugin.tests import base
 
@@ -126,7 +126,7 @@
     def _get_sp_authn_request(self):
         resp = self.saml2_client.send_service_provider_request(
             self.keystone_v3_endpoint, self.idp_id, self.protocol_id)
-        self.assertEqual(http_client.OK, resp.status_code)
+        self.assertEqual(http.client.OK, resp.status_code)
         saml2_authn_request = etree.XML(resp.content)
 
         relay_state = self._str_from_xml(
@@ -137,7 +137,7 @@
         # Perform the authn request to the identity provider
         resp = self.saml2_client.send_identity_provider_authn_request(
             saml2_authn_request, self.idp_url, self.username, self.password)
-        self.assertEqual(http_client.OK, resp.status_code)
+        self.assertEqual(http.client.OK, resp.status_code)
         saml2_idp_authn_response = etree.XML(resp.content)
 
         idp_consumer_url = self._str_from_xml(
@@ -161,7 +161,7 @@
         # Must receive a redirect from service provider to the URL where the
         # unscoped token can be retrieved.
         self.assertIn(resp.status_code,
-                      [http_client.FOUND, http_client.SEE_OTHER])
+                      [http.client.FOUND, http.client.SEE_OTHER])
 
         # If this is K2K, don't follow HTTP specs - after the HTTP 302/303
         # response don't repeat the call directed to the Location URL. In this
@@ -177,7 +177,7 @@
         resp = (
             self.saml2_client.send_service_provider_unscoped_token_request(
                 sp_url))
-        self.assertEqual(http_client.CREATED, resp.status_code)
+        self.assertEqual(http.client.CREATED, resp.status_code)
         self.assertIn('X-Subject-Token', resp.headers)
         self.assertNotEmpty(resp.json())
 
diff --git a/requirements.txt b/requirements.txt
index e7efdc4..790e605 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,5 +9,4 @@
 tempest>=17.1.0 # Apache-2.0
 oslo.config>=5.2.0 # Apache-2.0
 testtools>=2.2.0 # MIT
-six>=1.10.0 # MIT
 requests>=2.14.2 # Apache-2.0
