Merge "Adding description for testcases - identity part5"
diff --git a/tempest/api/identity/admin/v2/test_roles_negative.py b/tempest/api/identity/admin/v2/test_roles_negative.py
index f3b7494..3c71ba9 100644
--- a/tempest/api/identity/admin/v2/test_roles_negative.py
+++ b/tempest/api/identity/admin/v2/test_roles_negative.py
@@ -20,6 +20,7 @@
 
 
 class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
+    """Negative tests of keystone roles via v2 API"""
 
     def _get_role_params(self):
         user = self.setup_test_user()
@@ -30,14 +31,14 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('d5d5f1df-f8ca-4de0-b2ef-259c1cc67025')
     def test_list_roles_by_unauthorized_user(self):
-        # Non-administrator user should not be able to list roles
+        """Test Non-admin user should not be able to list roles via v2 API"""
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_roles_client.list_roles)
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('11a3c7da-df6c-40c2-abc2-badd682edf9f')
     def test_list_roles_request_without_token(self):
-        # Request to list roles without a valid token should fail
+        """Test listing roles without a valid token via v2 API should fail"""
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
         self.assertRaises(lib_exc.Unauthorized, self.roles_client.list_roles)
@@ -46,14 +47,14 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('c0b89e56-accc-4c73-85f8-9c0f866104c1')
     def test_role_create_blank_name(self):
-        # Should not be able to create a role with a blank name
+        """Test creating a role with a blank name via v2 API is not allowed"""
         self.assertRaises(lib_exc.BadRequest, self.roles_client.create_role,
                           name='')
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('585c8998-a8a4-4641-a5dd-abef7a8ced00')
     def test_create_role_by_unauthorized_user(self):
-        # Non-administrator user should not be able to create role
+        """Test non-admin user should not be able to create role via v2 API"""
         role_name = data_utils.rand_name(name='role')
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_roles_client.create_role,
@@ -62,7 +63,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('a7edd17a-e34a-4aab-8bb7-fa6f498645b8')
     def test_create_role_request_without_token(self):
-        # Request to create role without a valid token should fail
+        """Test creating role without a valid token via v2 API should fail"""
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
         role_name = data_utils.rand_name(name='role')
@@ -73,7 +74,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('c0cde2c8-81c1-4bb0-8fe2-cf615a3547a8')
     def test_role_create_duplicate(self):
-        # Role names should be unique
+        """Test role names should be unique via v2 API"""
         role_name = data_utils.rand_name(name='role-dup')
         body = self.roles_client.create_role(name=role_name)['role']
         role1_id = body.get('id')
@@ -84,7 +85,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('15347635-b5b1-4a87-a280-deb2bd6d865e')
     def test_delete_role_by_unauthorized_user(self):
-        # Non-administrator user should not be able to delete role
+        """Test non-admin user should not be able to delete role via v2 API"""
         role_name = data_utils.rand_name(name='role')
         body = self.roles_client.create_role(name=role_name)['role']
         self.addCleanup(self.roles_client.delete_role, body['id'])
@@ -95,7 +96,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('44b60b20-70de-4dac-beaf-a3fc2650a16b')
     def test_delete_role_request_without_token(self):
-        # Request to delete role without a valid token should fail
+        """Test deleting role without a valid token via v2 API should fail"""
         role_name = data_utils.rand_name(name='role')
         body = self.roles_client.create_role(name=role_name)['role']
         self.addCleanup(self.roles_client.delete_role, body['id'])
@@ -110,7 +111,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('38373691-8551-453a-b074-4260ad8298ef')
     def test_delete_role_non_existent(self):
-        # Attempt to delete a non existent role should fail
+        """Test deleting a non existent role via v2 API should fail"""
         non_existent_role = data_utils.rand_uuid_hex()
         self.assertRaises(lib_exc.NotFound, self.roles_client.delete_role,
                           non_existent_role)
@@ -118,8 +119,11 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('391df5cf-3ec3-46c9-bbe5-5cb58dd4dc41')
     def test_assign_user_role_by_unauthorized_user(self):
-        # Non-administrator user should not be authorized to
-        # assign a role to user
+        """Test non-admin user assigning a role to user via v2 API
+
+        Non-admin user should not be authorized to assign a role to user via
+        v2 API.
+        """
         (user, tenant, role) = self._get_role_params()
         self.assertRaises(
             lib_exc.Forbidden,
@@ -129,7 +133,11 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('f0d2683c-5603-4aee-95d7-21420e87cfd8')
     def test_assign_user_role_request_without_token(self):
-        # Request to assign a role to a user without a valid token
+        """Test assigning a role to a user without a valid token via v2 API
+
+        Assigning a role to a user without a valid token via v2 API should
+        fail.
+        """
         (user, tenant, role) = self._get_role_params()
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
@@ -142,7 +150,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('99b297f6-2b5d-47c7-97a9-8b6bb4f91042')
     def test_assign_user_role_for_non_existent_role(self):
-        # Attempt to assign a non existent role to user should fail
+        """Test assigning a non existent role to user via v2 API
+
+        Assigning a non existent role to user via v2 API should fail.
+        """
         (user, tenant, _) = self._get_role_params()
         non_existent_role = data_utils.rand_uuid_hex()
         self.assertRaises(lib_exc.NotFound,
@@ -152,7 +163,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('b2285aaa-9e76-4704-93a9-7a8acd0a6c8f')
     def test_assign_user_role_for_non_existent_tenant(self):
-        # Attempt to assign a role on a non existent tenant should fail
+        """Test assigning a role on a non existent tenant via v2 API
+
+        Assigning a role on a non existent tenant via v2 API should fail.
+        """
         (user, _, role) = self._get_role_params()
         non_existent_tenant = data_utils.rand_uuid_hex()
         self.assertRaises(lib_exc.NotFound,
@@ -162,7 +176,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('5c3132cd-c4c8-4402-b5ea-71eb44e97793')
     def test_assign_duplicate_user_role(self):
-        # Duplicate user role should not get assigned
+        """Test duplicate user role should not get assigned via v2 API"""
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -174,8 +188,11 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('d0537987-0977-448f-a435-904c15de7298')
     def test_remove_user_role_by_unauthorized_user(self):
-        # Non-administrator user should not be authorized to
-        # remove a user's role
+        """Test non-admin user removing a user's role via v2 API
+
+        Non-admin user should not be authorized to remove a user's role via
+        v2 API
+        """
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -188,7 +205,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('cac81cf4-c1d2-47dc-90d3-f2b7eb572286')
     def test_remove_user_role_request_without_token(self):
-        # Request to remove a user's role without a valid token
+        """Test removing a user's role without a valid token via v2 API
+
+        Removing a user's role without a valid token via v2 API should fail.
+        """
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -203,7 +223,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('ab32d759-cd16-41f1-a86e-44405fa9f6d2')
     def test_remove_user_role_non_existent_role(self):
-        # Attempt to delete a non existent role from a user should fail
+        """Test deleting a non existent role from a user via v2 API
+
+        Deleting a non existent role from a user via v2 API should fail.
+        """
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -216,7 +239,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('67a679ec-03dd-4551-bbfc-d1c93284f023')
     def test_remove_user_role_non_existent_tenant(self):
-        # Attempt to remove a role from a non existent tenant should fail
+        """Test removing a role from a non existent tenant via v2 API
+
+        Removing a role from a non existent tenant via v2 API should fail.
+        """
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -229,8 +255,11 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('7391ab4c-06f3-477a-a64a-c8e55ce89837')
     def test_list_user_roles_by_unauthorized_user(self):
-        # Non-administrator user should not be authorized to list
-        # a user's roles
+        """Test non-admin user listing a user's roles via v2 API
+
+        Non-admin user should not be authorized to list a user's roles via v2
+        API.
+        """
         (user, tenant, role) = self._get_role_params()
         self.roles_client.create_user_role_on_project(tenant['id'],
                                                       user['id'],
@@ -243,7 +272,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('682adfb2-fd5f-4b0a-a9ca-322e9bebb907')
     def test_list_user_roles_request_without_token(self):
-        # Request to list user's roles without a valid token should fail
+        """Test listing user's roles without a valid token via v2 API
+
+        Listing user's roles without a valid token via v2 API should fail
+        """
         (user, tenant, _) = self._get_role_params()
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
diff --git a/tempest/api/identity/admin/v2/test_tenant_negative.py b/tempest/api/identity/admin/v2/test_tenant_negative.py
index 49bb949..792dad9 100644
--- a/tempest/api/identity/admin/v2/test_tenant_negative.py
+++ b/tempest/api/identity/admin/v2/test_tenant_negative.py
@@ -20,18 +20,22 @@
 
 
 class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
+    """Negative tests of keystone tenants via v2 API"""
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('ca9bb202-63dd-4240-8a07-8ef9c19c04bb')
     def test_list_tenants_by_unauthorized_user(self):
-        # Non-administrator user should not be able to list tenants
+        """Test Non-admin should not be able to list tenants via v2 API"""
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_tenants_client.list_tenants)
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('df33926c-1c96-4d8d-a762-79cc6b0c3cf4')
     def test_list_tenant_request_without_token(self):
-        # Request to list tenants without a valid token should fail
+        """Test listing tenants without a valid token via v2 API
+
+        Listing tenants without a valid token via v2 API should fail.
+        """
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
         self.assertRaises(lib_exc.Unauthorized,
@@ -41,7 +45,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('162ba316-f18b-4987-8c0c-fd9140cd63ed')
     def test_tenant_delete_by_unauthorized_user(self):
-        # Non-administrator user should not be able to delete a tenant
+        """Test non-admin should not be able to delete a tenant via v2 API"""
         tenant = self.setup_test_tenant()
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_tenants_client.delete_tenant,
@@ -50,7 +54,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('e450db62-2e9d-418f-893a-54772d6386b1')
     def test_tenant_delete_request_without_token(self):
-        # Request to delete a tenant without a valid token should fail
+        """Test deleting a tenant without a valid token via v2 API
+
+        Deleting a tenant without a valid token via v2 API should fail.
+        """
         tenant = self.setup_test_tenant()
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
@@ -62,14 +69,14 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('9c9a2aed-6e3c-467a-8f5c-89da9d1b516b')
     def test_delete_non_existent_tenant(self):
-        # Attempt to delete a non existent tenant should fail
+        """Test deleting a non existent tenant via v2 API should fail"""
         self.assertRaises(lib_exc.NotFound, self.tenants_client.delete_tenant,
                           data_utils.rand_uuid_hex())
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('af16f44b-a849-46cb-9f13-a751c388f739')
     def test_tenant_create_duplicate(self):
-        # Tenant names should be unique
+        """Test tenant names should be unique via v2 API"""
         tenant_name = data_utils.rand_name(name='tenant')
         self.setup_test_tenant(name=tenant_name)
         self.assertRaises(lib_exc.Conflict, self.tenants_client.create_tenant,
@@ -78,7 +85,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('d26b278a-6389-4702-8d6e-5980d80137e0')
     def test_create_tenant_by_unauthorized_user(self):
-        # Non-administrator user should not be authorized to create a tenant
+        """Test non-admin user creating a tenant via v2 API
+
+        Non-admin user should not be authorized to create a tenant via v2 API.
+        """
         tenant_name = data_utils.rand_name(name='tenant')
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_tenants_client.create_tenant,
@@ -87,7 +97,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('a3ee9d7e-6920-4dd5-9321-d4b2b7f0a638')
     def test_create_tenant_request_without_token(self):
-        # Create tenant request without a token should not be authorized
+        """Test creating tenant without a token via v2 API is not allowed"""
         tenant_name = data_utils.rand_name(name='tenant')
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
@@ -99,7 +109,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('5a2e4ca9-b0c0-486c-9c48-64a94fba2395')
     def test_create_tenant_with_empty_name(self):
-        # Tenant name should not be empty
+        """Test tenant name should not be empty via v2 API"""
         self.assertRaises(lib_exc.BadRequest,
                           self.tenants_client.create_tenant,
                           name='')
@@ -107,7 +117,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('2ff18d1e-dfe3-4359-9dc3-abf582c196b9')
     def test_create_tenants_name_length_over_64(self):
-        # Tenant name length should not be greater than 64 characters
+        """Test tenant name length should not exceed 64 via v2 API"""
         tenant_name = 'a' * 65
         self.assertRaises(lib_exc.BadRequest,
                           self.tenants_client.create_tenant,
@@ -116,14 +126,17 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('bd20dc2a-9557-4db7-b755-f48d952ad706')
     def test_update_non_existent_tenant(self):
-        # Attempt to update a non existent tenant should fail
+        """Test updating a non existent tenant via v2 API should fail"""
         self.assertRaises(lib_exc.NotFound, self.tenants_client.update_tenant,
                           data_utils.rand_uuid_hex())
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('41704dc5-c5f7-4f79-abfa-76e6fedc570b')
     def test_tenant_update_by_unauthorized_user(self):
-        # Non-administrator user should not be able to update a tenant
+        """Test non-admin user updating a tenant via v2 API
+
+        Non-admin user should not be able to update a tenant via v2 API
+        """
         tenant = self.setup_test_tenant()
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_tenants_client.update_tenant,
@@ -132,7 +145,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('7a421573-72c7-4c22-a98e-ce539219c657')
     def test_tenant_update_request_without_token(self):
-        # Request to update a tenant without a valid token should fail
+        """Test updating a tenant without a valid token via v2 API
+
+        Updating a tenant without a valid token via v2 API should fail
+        """
         tenant = self.setup_test_tenant()
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
diff --git a/tempest/api/identity/admin/v2/test_tokens.py b/tempest/api/identity/admin/v2/test_tokens.py
index 6ce1a8b..5d89f9d 100644
--- a/tempest/api/identity/admin/v2/test_tokens.py
+++ b/tempest/api/identity/admin/v2/test_tokens.py
@@ -23,9 +23,11 @@
 
 
 class TokensTestJSON(base.BaseIdentityV2AdminTest):
+    """Test keystone tokens via v2 API"""
 
     @decorators.idempotent_id('453ad4d5-e486-4b2f-be72-cffc8149e586')
     def test_create_check_get_delete_token(self):
+        """Test getting create/check/get/delete token for user via v2 API"""
         # get a token by username and password
         user_name = data_utils.rand_name(name='user')
         user_password = data_utils.rand_password()
@@ -59,7 +61,7 @@
 
     @decorators.idempotent_id('25ba82ee-8a32-4ceb-8f50-8b8c71e8765e')
     def test_rescope_token(self):
-        """An unscoped token can be requested
+        """Test an unscoped token can be requested via v2 API
 
         That token can be used to request a scoped token.
         """
@@ -112,6 +114,7 @@
 
     @decorators.idempotent_id('ca3ea6f7-ed08-4a61-adbd-96906456ad31')
     def test_list_endpoints_for_token(self):
+        """Test listing endpoints for token via v2 API"""
         tempest_services = ['keystone', 'nova', 'neutron', 'swift', 'cinder',
                             'neutron']
         # get a token for the user
diff --git a/tempest/api/identity/admin/v2/test_tokens_negative.py b/tempest/api/identity/admin/v2/test_tokens_negative.py
index eb3e365..f2e41ff 100644
--- a/tempest/api/identity/admin/v2/test_tokens_negative.py
+++ b/tempest/api/identity/admin/v2/test_tokens_negative.py
@@ -19,12 +19,17 @@
 
 
 class TokensAdminTestNegative(base.BaseIdentityV2AdminTest):
+    """Negative tests of keystone tokens via v2 API"""
 
     credentials = ['primary', 'admin', 'alt']
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('a0a0a600-4292-4364-99c5-922c834fdf05')
     def test_check_token_existence_negative(self):
+        """Test checking other tenant's token existence via v2 API
+
+        Checking other tenant's token existence via v2 API should fail.
+        """
         creds = self.os_primary.credentials
         creds_alt = self.os_alt.credentials
         username = creds.username
diff --git a/tempest/api/identity/admin/v2/test_users.py b/tempest/api/identity/admin/v2/test_users.py
index 0d98af5..57a321a 100644
--- a/tempest/api/identity/admin/v2/test_users.py
+++ b/tempest/api/identity/admin/v2/test_users.py
@@ -23,6 +23,7 @@
 
 
 class UsersTestJSON(base.BaseIdentityV2AdminTest):
+    """Test keystone users via v2 API"""
 
     @classmethod
     def resource_setup(cls):
@@ -33,14 +34,14 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('2d55a71e-da1d-4b43-9c03-d269fd93d905')
     def test_create_user(self):
-        # Create a user
+        """Test creating a user via v2 API"""
         tenant = self.setup_test_tenant()
         user = self.create_test_user(name=self.alt_user, tenantId=tenant['id'])
         self.assertEqual(self.alt_user, user['name'])
 
     @decorators.idempotent_id('89d9fdb8-15c2-4304-a429-48715d0af33d')
     def test_create_user_with_enabled(self):
-        # Create a user with enabled : False
+        """Test creating a user with enabled : False via v2 API"""
         tenant = self.setup_test_tenant()
         name = data_utils.rand_name('test_user')
         user = self.create_test_user(name=name,
@@ -53,7 +54,7 @@
 
     @decorators.idempotent_id('39d05857-e8a5-4ed4-ba83-0b52d3ab97ee')
     def test_update_user(self):
-        # Test case to check if updating of user attributes is successful.
+        """Test updating user attributes via v2 API"""
         tenant = self.setup_test_tenant()
         user = self.create_test_user(tenantId=tenant['id'])
 
@@ -75,14 +76,14 @@
 
     @decorators.idempotent_id('29ed26f4-a74e-4425-9a85-fdb49fa269d2')
     def test_delete_user(self):
-        # Delete a user
+        """Test deleting a user via v2 API"""
         tenant = self.setup_test_tenant()
         user = self.create_test_user(tenantId=tenant['id'])
         self.users_client.delete_user(user['id'])
 
     @decorators.idempotent_id('aca696c3-d645-4f45-b728-63646045beb1')
     def test_user_authentication(self):
-        # Valid user's token is authenticated
+        """Test that valid user's token is authenticated via v2 API"""
         password = data_utils.rand_password()
         user = self.setup_test_user(password)
         tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
@@ -97,6 +98,7 @@
 
     @decorators.idempotent_id('5d1fa498-4c2d-4732-a8fe-2b054598cfdd')
     def test_authentication_request_without_token(self):
+        """Test authentication request without token via v2 API"""
         # Request for token authentication with a valid token in header
         password = data_utils.rand_password()
         user = self.setup_test_user(password)
@@ -116,7 +118,10 @@
 
     @decorators.idempotent_id('a149c02e-e5e0-4b89-809e-7e8faf33ccda')
     def test_get_users(self):
-        # Get a list of users and find the test user
+        """Test getting users via v2 API
+
+        Get a list of users and find the test user
+        """
         user = self.setup_test_user()
         users = self.users_client.list_users()['users']
         self.assertThat([u['name'] for u in users],
@@ -125,7 +130,7 @@
 
     @decorators.idempotent_id('6e317209-383a-4bed-9f10-075b7c82c79a')
     def test_list_users_for_tenant(self):
-        # Return a list of all users for a tenant
+        """Test returning a list of all users for a tenant via v2 API"""
         tenant = self.setup_test_tenant()
         user_ids = list()
         fetched_user_ids = list()
@@ -147,7 +152,7 @@
 
     @decorators.idempotent_id('a8b54974-40e1-41c0-b812-50fc90827971')
     def test_list_users_with_roles_for_tenant(self):
-        # Return list of users on tenant when roles are assigned to users
+        """Test listing users on tenant with roles assigned via v2 API"""
         user = self.setup_test_user()
         tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
         role = self.setup_test_role()
@@ -175,7 +180,7 @@
 
     @decorators.idempotent_id('1aeb25ac-6ec5-4d8b-97cb-7ac3567a989f')
     def test_update_user_password(self):
-        # Test case to check if updating of user password is successful.
+        """Test updating of user password via v2 API"""
         user = self.setup_test_user()
         tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant']
         # Updating the user with new password
diff --git a/tempest/api/identity/admin/v3/test_regions.py b/tempest/api/identity/admin/v3/test_regions.py
index c8c0151..63e456e 100644
--- a/tempest/api/identity/admin/v3/test_regions.py
+++ b/tempest/api/identity/admin/v3/test_regions.py
@@ -20,6 +20,8 @@
 
 
 class RegionsTestJSON(base.BaseIdentityV3AdminTest):
+    """Test regions"""
+
     # NOTE: force_tenant_isolation is true in the base class by default but
     # overridden to false here to allow test execution for clouds using the
     # pre-provisioned credentials provider.
@@ -44,6 +46,7 @@
 
     @decorators.idempotent_id('56186092-82e4-43f2-b954-91013218ba42')
     def test_create_update_get_delete_region(self):
+        """Test creating, updating, getting and updating region"""
         # Create region
         r_description = data_utils.rand_name('description')
         region = self.client.create_region(
@@ -81,7 +84,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('2c12c5b5-efcf-4aa5-90c5-bff1ab0cdbe2')
     def test_create_region_with_specific_id(self):
-        # Create a region with a specific id
+        """Test creating region with specific id"""
         r_region_id = data_utils.rand_uuid()
         r_description = data_utils.rand_name('description')
         region = self.client.create_region(
@@ -93,7 +96,7 @@
 
     @decorators.idempotent_id('d180bf99-544a-445c-ad0d-0c0d27663796')
     def test_list_regions(self):
-        # Get a list of regions
+        """Test getting a list of regions"""
         fetched_regions = self.client.list_regions()['regions']
         missing_regions =\
             [e for e in self.setup_regions if e not in fetched_regions]
@@ -104,6 +107,7 @@
 
     @decorators.idempotent_id('2d1057cb-bbde-413a-acdf-e2d265284542')
     def test_list_regions_filter_by_parent_region_id(self):
+        """Test listing regions filtered by parent region id"""
         # Add a sub-region to one of the existing test regions
         r_description = data_utils.rand_name('description')
         region = self.client.create_region(
diff --git a/tempest/api/identity/admin/v3/test_roles.py b/tempest/api/identity/admin/v3/test_roles.py
index 5ba4c9f..dd7d5af 100644
--- a/tempest/api/identity/admin/v3/test_roles.py
+++ b/tempest/api/identity/admin/v3/test_roles.py
@@ -25,6 +25,8 @@
 
 
 class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
+    """Test roles"""
+
     # NOTE: force_tenant_isolation is true in the base class by default but
     # overridden to false here to allow test execution for clouds using the
     # pre-provisioned credentials provider.
@@ -75,6 +77,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('18afc6c0-46cf-4911-824e-9989cc056c3a')
     def test_role_create_update_show_list(self):
+        """Test creating, updating, showing and listing a role"""
         r_name = data_utils.rand_name('Role')
         role = self.roles_client.create_role(name=r_name)['role']
         self.addCleanup(self.roles_client.delete_role, role['id'])
@@ -101,6 +104,7 @@
                       'Skipped because environment has an immutable user '
                       'source and solely provides read-only access to users.')
     def test_grant_list_revoke_role_to_user_on_project(self):
+        """Test granting, listing, revoking role to user on project"""
         self.roles_client.create_user_role_on_project(self.project['id'],
                                                       self.user_body['id'],
                                                       self.role['id'])
@@ -122,6 +126,7 @@
                       'Skipped because environment has an immutable user '
                       'source and solely provides read-only access to users.')
     def test_grant_list_revoke_role_to_user_on_domain(self):
+        """Test granting, listing, revoking role to user on domain"""
         self.roles_client.create_user_role_on_domain(
             self.domain['id'], self.user_body['id'], self.role['id'])
 
@@ -142,6 +147,7 @@
                       'Skipped because environment has an immutable user '
                       'source and solely provides read-only access to users.')
     def test_grant_list_revoke_role_to_group_on_project(self):
+        """Test granting, listing, revoking role to group on project"""
         # Grant role to group on project
         self.roles_client.create_group_role_on_project(
             self.project['id'], self.group_body['id'], self.role['id'])
@@ -175,6 +181,7 @@
 
     @decorators.idempotent_id('4bf8a70b-e785-413a-ad53-9f91ce02faa7')
     def test_grant_list_revoke_role_to_group_on_domain(self):
+        """Test granting, listing, revoking role to group on domain"""
         self.roles_client.create_group_role_on_domain(
             self.domain['id'], self.group_body['id'], self.role['id'])
 
@@ -192,6 +199,7 @@
 
     @decorators.idempotent_id('f5654bcc-08c4-4f71-88fe-05d64e06de94')
     def test_list_roles(self):
+        """Test listing roles"""
         # Return a list of all roles
         body = self.roles_client.list_roles()['roles']
         found = [role for role in body if role in self.roles]
@@ -215,6 +223,7 @@
 
     @decorators.idempotent_id('c90c316c-d706-4728-bcba-eb1912081b69')
     def test_implied_roles_create_check_show_delete(self):
+        """Test creating, checking, showing and deleting implied roles"""
         prior_role_id = self.roles[0]['id']
         implies_role_id = self.roles[1]['id']
 
@@ -248,6 +257,7 @@
 
     @decorators.idempotent_id('dc6f5959-b74d-4e30-a9e5-a8255494ff00')
     def test_roles_hierarchy(self):
+        """Test creating implied role and listing role inferences rules"""
         # Create inference rule from "roles[0]" to "role[1]"
         self._create_implied_role(
             self.roles[0]['id'], self.roles[1]['id'])
@@ -280,6 +290,7 @@
                       'Skipped because environment has an immutable user '
                       'source and solely provides read-only access to users.')
     def test_assignments_for_implied_roles_create_delete(self):
+        """Test assignments when implied roles are created and deleted"""
         # Create a grant using "roles[0]"
         self.roles_client.create_user_role_on_project(
             self.project['id'], self.user_body['id'], self.roles[0]['id'])
@@ -321,6 +332,7 @@
 
     @decorators.idempotent_id('d92a41d2-5501-497a-84bb-6e294330e8f8')
     def test_domain_roles_create_delete(self):
+        """Test creating, listing and deleting domain roles"""
         domain_role = self.roles_client.create_role(
             name=data_utils.rand_name('domain_role'),
             domain_id=self.domain['id'])['role']
@@ -341,6 +353,7 @@
 
     @decorators.idempotent_id('eb1e1c24-1bc4-4d47-9748-e127a1852c82')
     def test_implied_domain_roles(self):
+        """Test creating implied roles when roles are in domains"""
         # Create two roles in the same domain
         domain_role1 = self.setup_test_role(domain_id=self.domain['id'])
         domain_role2 = self.setup_test_role(domain_id=self.domain['id'])
@@ -373,6 +386,7 @@
                       'Skipped because environment has an immutable user '
                       'source and solely provides read-only access to users.')
     def test_assignments_for_domain_roles(self):
+        """Test assignments for domain roles"""
         domain_role = self.setup_test_role(domain_id=self.domain['id'])
 
         # Create a grant using "domain_role"
@@ -395,6 +409,7 @@
 
     @decorators.idempotent_id('3748c316-c18f-4b08-997b-c60567bc6235')
     def test_list_all_implied_roles(self):
+        """Test listing all implied roles"""
         # Create inference rule from "roles[0]" to "roles[1]"
         self._create_implied_role(
             self.roles[0]['id'], self.roles[1]['id'])
diff --git a/tempest/api/identity/admin/v3/test_tokens.py b/tempest/api/identity/admin/v3/test_tokens.py
index 5f1b58d..f3a7471 100644
--- a/tempest/api/identity/admin/v3/test_tokens.py
+++ b/tempest/api/identity/admin/v3/test_tokens.py
@@ -24,6 +24,7 @@
 
 
 class TokensV3TestJSON(base.BaseIdentityV3AdminTest):
+    """Test tokens"""
 
     credentials = ['primary', 'admin', 'alt']
 
@@ -123,6 +124,7 @@
 
     @decorators.idempotent_id('08ed85ce-2ba8-4864-b442-bcc61f16ae89')
     def test_get_available_project_scopes(self):
+        """Test getting available project scopes"""
         manager_project_id = self.os_primary.credentials.project_id
         admin_user_id = self.os_admin.credentials.user_id
         admin_role_id = self.get_role_by_name(CONF.identity.admin_role)['id']
@@ -152,10 +154,13 @@
 
     @decorators.idempotent_id('ec5ecb05-af64-4c04-ac86-4d9f6f12f185')
     def test_get_available_domain_scopes(self):
-        # Test for verifying that listing domain scopes for a user works if
-        # the user has a domain role or belongs to a group that has a domain
-        # role. For this test, admin client is used to add roles to alt user,
-        # which performs API calls, to avoid 401 Unauthorized errors.
+        """Test getting available domain scopes
+
+        To verify that listing domain scopes for a user works if
+        the user has a domain role or belongs to a group that has a domain
+        role. For this test, admin client is used to add roles to alt user,
+        which performs API calls, to avoid 401 Unauthorized errors.
+        """
         alt_user_id = self.os_alt.credentials.user_id
 
         def _create_user_domain_role_for_alt_user():
diff --git a/tempest/api/identity/v3/test_application_credentials.py b/tempest/api/identity/v3/test_application_credentials.py
index 1cee902..ef1bbdf 100644
--- a/tempest/api/identity/v3/test_application_credentials.py
+++ b/tempest/api/identity/v3/test_application_credentials.py
@@ -23,6 +23,7 @@
 
 
 class ApplicationCredentialsV3Test(base.BaseApplicationCredentialsV3Test):
+    """Test application credentials"""
 
     def _list_app_creds(self, name=None):
         kwargs = dict(user_id=self.user_id)
@@ -33,6 +34,7 @@
 
     @decorators.idempotent_id('8080c75c-eddc-4786-941a-c2da7039ae61')
     def test_create_application_credential(self):
+        """Test creating application credential"""
         app_cred = self.create_application_credential()
 
         # Check that the secret appears in the create response
@@ -55,6 +57,7 @@
 
     @decorators.idempotent_id('852daf0c-42b5-4239-8466-d193d0543ed3')
     def test_create_application_credential_expires(self):
+        """Test creating application credential with expire time"""
         expires_at = timeutils.utcnow() + datetime.timedelta(hours=1)
 
         app_cred = self.create_application_credential(expires_at=expires_at)
@@ -64,6 +67,7 @@
 
     @decorators.idempotent_id('ff0cd457-6224-46e7-b79e-0ada4964a8a6')
     def test_list_application_credentials(self):
+        """Test listing application credentials"""
         self.create_application_credential()
         self.create_application_credential()
 
@@ -72,6 +76,7 @@
 
     @decorators.idempotent_id('9bb5e5cc-5250-493a-8869-8b665f6aa5f6')
     def test_query_application_credentials(self):
+        """Test listing application credentials filtered by name"""
         self.create_application_credential()
         app_cred_two = self.create_application_credential()
         app_cred_two_name = app_cred_two['name']