diff --git a/tempest/api_schema/response/compute/v2_1/tenant_usages.py b/tempest/api_schema/response/compute/v2_1/tenant_usages.py
deleted file mode 100644
index d51ef12..0000000
--- a/tempest/api_schema/response/compute/v2_1/tenant_usages.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import copy
-
-_server_usages = {
-    'type': 'array',
-    'items': {
-        'type': 'object',
-        'properties': {
-            'ended_at': {
-                'oneOf': [
-                    {'type': 'string'},
-                    {'type': 'null'}
-                ]
-            },
-            'flavor': {'type': 'string'},
-            'hours': {'type': 'number'},
-            'instance_id': {'type': 'string'},
-            'local_gb': {'type': 'integer'},
-            'memory_mb': {'type': 'integer'},
-            'name': {'type': 'string'},
-            'started_at': {'type': 'string'},
-            'state': {'type': 'string'},
-            'tenant_id': {'type': 'string'},
-            'uptime': {'type': 'integer'},
-            'vcpus': {'type': 'integer'},
-        },
-        'required': ['ended_at', 'flavor', 'hours', 'instance_id', 'local_gb',
-                     'memory_mb', 'name', 'started_at', 'state', 'tenant_id',
-                     'uptime', 'vcpus']
-    }
-}
-
-_tenant_usage_list = {
-    'type': 'object',
-    'properties': {
-        'server_usages': _server_usages,
-        'start': {'type': 'string'},
-        'stop': {'type': 'string'},
-        'tenant_id': {'type': 'string'},
-        'total_hours': {'type': 'number'},
-        'total_local_gb_usage': {'type': 'number'},
-        'total_memory_mb_usage': {'type': 'number'},
-        'total_vcpus_usage': {'type': 'number'},
-    },
-    'required': ['start', 'stop', 'tenant_id',
-                 'total_hours', 'total_local_gb_usage',
-                 'total_memory_mb_usage', 'total_vcpus_usage']
-}
-
-# 'required' of get_tenant is different from list_tenant's.
-_tenant_usage_get = copy.deepcopy(_tenant_usage_list)
-_tenant_usage_get['required'] = ['server_usages', 'start', 'stop', 'tenant_id',
-                                 'total_hours', 'total_local_gb_usage',
-                                 'total_memory_mb_usage', 'total_vcpus_usage']
-
-list_tenant_usage = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'tenant_usages': {
-                'type': 'array',
-                'items': _tenant_usage_list
-            }
-        },
-        'required': ['tenant_usages']
-    }
-}
-
-get_tenant_usage = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'tenant_usage': _tenant_usage_get
-        },
-        'required': ['tenant_usage']
-    }
-}
diff --git a/tempest/clients.py b/tempest/clients.py
index 6370e2c..8ecca47 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -54,6 +54,8 @@
     SnapshotsClient as ComputeSnapshotsClient
 from tempest_lib.services.compute.tenant_networks_client import \
     TenantNetworksClient
+from tempest_lib.services.compute.tenant_usages_client import \
+    TenantUsagesClient
 from tempest_lib.services.identity.v2.token_client import TokenClient
 from tempest_lib.services.identity.v3.token_client import V3TokenClient
 
@@ -74,8 +76,6 @@
 from tempest.services.compute.json.server_groups_client import \
     ServerGroupsClient
 from tempest.services.compute.json.servers_client import ServersClient
-from tempest.services.compute.json.tenant_usages_client import \
-    TenantUsagesClient
 from tempest.services.compute.json.versions_client import VersionsClient
 from tempest.services.compute.json.volumes_client import \
     VolumesClient as ComputeVolumesClient
diff --git a/tempest/services/compute/json/tenant_usages_client.py b/tempest/services/compute/json/tenant_usages_client.py
deleted file mode 100644
index 73b4706..0000000
--- a/tempest/services/compute/json/tenant_usages_client.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2013 NEC Corporation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from oslo_serialization import jsonutils as json
-from six.moves.urllib import parse as urllib
-
-from tempest.api_schema.response.compute.v2_1 import tenant_usages as schema
-from tempest.common import service_client
-
-
-class TenantUsagesClient(service_client.ServiceClient):
-
-    def list_tenant_usages(self, **params):
-        url = 'os-simple-tenant-usage'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_tenant_usage, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_tenant_usage(self, tenant_id, **params):
-        url = 'os-simple-tenant-usage/%s' % tenant_id
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.get_tenant_usage, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/tests/services/compute/test_tenant_usages_client.py b/tempest/tests/services/compute/test_tenant_usages_client.py
deleted file mode 100644
index 58e0b7a..0000000
--- a/tempest/tests/services/compute/test_tenant_usages_client.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright 2015 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import tenant_usages_client
-from tempest.tests.services.compute import base
-
-
-class TestTenantUsagesClient(base.BaseComputeServiceTest):
-
-    FAKE_SERVER_USAGES = [{
-        "ended_at": None,
-        "flavor": "m1.tiny",
-        "hours": 1.0,
-        "instance_id": "1f1deceb-17b5-4c04-84c7-e0d4499c8fe0",
-        "local_gb": 1,
-        "memory_mb": 512,
-        "name": "new-server-test",
-        "started_at": "2012-10-08T20:10:44.541277",
-        "state": "active",
-        "tenant_id": "openstack",
-        "uptime": 3600,
-        "vcpus": 1
-        }]
-
-    FAKE_TENANT_USAGES = [{
-        "server_usages": FAKE_SERVER_USAGES,
-        "start": "2012-10-08T21:10:44.587336",
-        "stop": "2012-10-08T22:10:44.587336",
-        "tenant_id": "openstack",
-        "total_hours": 1,
-        "total_local_gb_usage": 1,
-        "total_memory_mb_usage": 512,
-        "total_vcpus_usage": 1
-        }]
-
-    def setUp(self):
-        super(TestTenantUsagesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = tenant_usages_client.TenantUsagesClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_list_tenant_usages(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.list_tenant_usages,
-            'tempest.common.service_client.ServiceClient.get',
-            {"tenant_usages": self.FAKE_TENANT_USAGES},
-            to_utf=bytes_body)
-
-    def test_list_tenant_usages_with_str_body(self):
-        self._test_list_tenant_usages()
-
-    def test_list_tenant_usages_with_bytes_body(self):
-        self._test_list_tenant_usages(bytes_body=True)
-
-    def _test_show_tenant_usage(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_tenant_usage,
-            'tempest.common.service_client.ServiceClient.get',
-            {"tenant_usage": self.FAKE_TENANT_USAGES[0]},
-            to_utf=bytes_body,
-            tenant_id='openstack')
-
-    def test_show_tenant_usage_with_str_body(self):
-        self._test_show_tenant_usage()
-
-    def test_show_tenant_usage_with_bytes_body(self):
-        self._test_show_tenant_usage(bytes_body=True)
