diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers.py b/manila_tempest_tests/tests/api/admin/test_share_servers.py
index 2b3bd6f..442cce9 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers.py
@@ -53,7 +53,7 @@
     @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_share_servers_without_filters(self):
         servers = self.shares_client.list_share_servers()
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         keys = [
             "id",
             "host",
@@ -70,11 +70,11 @@
             if server["updated_at"]:
                 self.assertTrue(self.date_re.match(server["updated_at"]))
             # Host is not empty
-            self.assertTrue(len(server["host"]) > 0)
+            self.assertGreater(len(server["host"]), 0)
             # Id is not empty
-            self.assertTrue(len(server["id"]) > 0)
+            self.assertGreater(len(server["id"]), 0)
             # Project id is not empty
-            self.assertTrue(len(server["project_id"]) > 0)
+            self.assertGreater(len(server["project_id"]), 0)
 
         # Do not verify statuses because we get all share servers from whole
         # cluster and here can be servers with any state.
@@ -103,7 +103,7 @@
             raise lib_exc.NotFound(message=msg)
         search_opts = {"host": host}
         servers = self.shares_client.list_share_servers(search_opts)
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         for server in servers:
             self.assertEqual(server["host"], host)
 
@@ -129,7 +129,7 @@
             raise lib_exc.NotFound(message=msg)
         search_opts = {"status": status}
         servers = self.shares_client.list_share_servers(search_opts)
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         for server in servers:
             self.assertEqual(server["status"], status)
 
@@ -138,7 +138,7 @@
         search_opts = {"project_id": self.share_network["project_id"]}
         servers = self.shares_client.list_share_servers(search_opts)
         # Should exist, at least, one share server, used by this test suite.
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         for server in servers:
             self.assertEqual(server["project_id"],
                              self.share_network["project_id"])
@@ -148,7 +148,7 @@
         search_opts = {"share_network": self.share_network["name"]}
         servers = self.shares_client.list_share_servers(search_opts)
         # Should exist, at least, one share server, used by this test suite.
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         for server in servers:
             self.assertEqual(server["share_network_name"],
                              self.share_network["name"])
@@ -158,7 +158,7 @@
         search_opts = {"share_network": self.share_network["id"]}
         servers = self.shares_client.list_share_servers(search_opts)
         # Should exist, at least, one share server, used by this test suite.
-        self.assertTrue(len(servers) > 0)
+        self.assertGreater(len(servers), 0)
         for server in servers:
             self.assertIn(server["share_network_name"],
                           self.sn_name_and_id)
@@ -186,15 +186,15 @@
         if server["updated_at"]:
             self.assertTrue(self.date_re.match(server["updated_at"]))
         # Host is not empty
-        self.assertTrue(len(server["host"]) > 0)
+        self.assertGreater(len(server["host"]), 0)
         # Id is not empty
-        self.assertTrue(len(server["id"]) > 0)
+        self.assertGreater(len(server["id"]), 0)
         # Project id is not empty
-        self.assertTrue(len(server["project_id"]) > 0)
+        self.assertGreater(len(server["project_id"]), 0)
         # Status is not empty
-        self.assertTrue(len(server["status"]) > 0)
+        self.assertGreater(len(server["status"]), 0)
         # share_network_name is not empty
-        self.assertTrue(len(server["share_network_name"]) > 0)
+        self.assertGreater(len(server["share_network_name"]), 0)
         # backend_details should be a dict
         self.assertIsInstance(server["backend_details"], dict)
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types.py b/manila_tempest_tests/tests/api/admin/test_share_types.py
index d55b01e..d36ba0b 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types.py
@@ -100,7 +100,7 @@
         # list share types
         st_list = self.shares_v2_client.list_share_types(version=version)
         sts = st_list["share_types"]
-        self.assertTrue(len(sts) >= 1)
+        self.assertGreaterEqual(len(sts), 1)
         self.assertTrue(any(st_id in st["id"] for st in sts))
         for st in sts:
             self._verify_is_public_key_name(st, version)
diff --git a/manila_tempest_tests/tests/api/admin/test_shares_actions.py b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
index ed04ffd..64e5122 100644
--- a/manila_tempest_tests/tests/api/admin/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
@@ -150,7 +150,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertDictContainsSubset(
                 filters['metadata'], share['metadata'])
@@ -170,10 +170,10 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         shares_ids = [s["id"] for s in shares]
         for share in self.shares:
-            self.assertTrue(share["id"] in shares_ids)
+            self.assertIn(share["id"], shares_ids)
         for share in shares:
             # find its name or id, get id
             st_id = None
@@ -198,7 +198,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             st_list = self.shares_client.list_share_types()
             # find its name or id, get id
@@ -218,7 +218,7 @@
                 filters['share_type_id'], st_id)
         share_ids = [share['id'] for share in shares]
         for share in self.shares:
-            self.assertTrue(share['id'] in share_ids)
+            self.assertIn(share['id'], share_ids)
 
     @test.attr(type=[base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND])
     def test_list_shares_with_detail_filter_by_host(self):
@@ -229,7 +229,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
@@ -244,7 +244,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(
                 filters['share_network_id'], share['share_network_id'])
@@ -259,7 +259,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(filters['snapshot_id'], share['snapshot_id'])
         self.assertFalse(self.shares[0]['id'] in [s['id'] for s in shares])
@@ -272,7 +272,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         sorted_list = [share['created_at'] for share in shares]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
@@ -295,7 +295,7 @@
         # list shares by active status, at least one share is expected
         params = {"status": "available"}
         shares = self.shares_client.list_shares_with_detail(params)
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(params["status"], share["status"])
 
diff --git a/manila_tempest_tests/tests/api/test_availability_zones.py b/manila_tempest_tests/tests/api/test_availability_zones.py
index b531439..7f77c6b 100644
--- a/manila_tempest_tests/tests/api/test_availability_zones.py
+++ b/manila_tempest_tests/tests/api/test_availability_zones.py
@@ -21,7 +21,7 @@
 class AvailabilityZonesTest(base.BaseSharesTest):
 
     def _list_availability_zones_assertions(self, availability_zones):
-        self.assertTrue(len(availability_zones) > 0)
+        self.assertGreater(len(availability_zones), 0)
         keys = ("created_at", "updated_at", "name", "id")
         for az in availability_zones:
             self.assertEqual(len(keys), len(az))
diff --git a/manila_tempest_tests/tests/api/test_share_networks.py b/manila_tempest_tests/tests/api/test_share_networks.py
index fcf923d..3dc17a7 100644
--- a/manila_tempest_tests/tests/api/test_share_networks.py
+++ b/manila_tempest_tests/tests/api/test_share_networks.py
@@ -94,8 +94,8 @@
         for sn in listed:
             self.assertTrue(all(sn[key] == value for key, value in
                                 six.iteritems(valid_filter_opts)))
-            self.assertTrue(sn['created_at'] <= created_before)
-            self.assertTrue(sn['created_at'] >= created_since)
+            self.assertLessEqual(sn['created_at'], created_before)
+            self.assertGreaterEqual(sn['created_at'], created_since)
 
 
 class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
diff --git a/manila_tempest_tests/tests/api/test_shares_actions.py b/manila_tempest_tests/tests/api/test_shares_actions.py
index 415ca16..1c84793 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions.py
@@ -255,7 +255,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertDictContainsSubset(
                 filters['metadata'], share['metadata'])
@@ -271,7 +271,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
@@ -286,7 +286,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(
                 filters['share_network_id'], share['share_network_id'])
@@ -301,7 +301,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(filters['snapshot_id'], share['snapshot_id'])
         self.assertFalse(self.shares[0]['id'] in [s['id'] for s in shares])
@@ -314,7 +314,7 @@
         shares = self.shares_client.list_shares_with_detail(params=filters)
 
         # verify response
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         sorted_list = [share['created_at'] for share in shares]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
@@ -337,7 +337,7 @@
         # list shares by active status, at least one share is expected
         params = {"status": "available"}
         shares = self.shares_client.list_shares_with_detail(params)
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
         for share in shares:
             self.assertEqual(params["status"], share["status"])
 
@@ -353,7 +353,7 @@
         # non-admin user can get shares only from his project
         params = {"all_tenants": 1}
         shares = self.shares_client.list_shares_with_detail(params)
-        self.assertTrue(len(shares) > 0)
+        self.assertGreater(len(shares), 0)
 
         # get share with detailed info, we need its 'project_id'
         share = self.shares_client.get_share(self.shares[0]["id"])
@@ -533,7 +533,7 @@
             params=filters)
 
         # verify response
-        self.assertTrue(len(snaps) > 0)
+        self.assertGreater(len(snaps), 0)
         for snap in snaps:
             self.assertEqual(filters['status'], snap['status'])
             self.assertEqual(filters['name'], snap['name'])
@@ -549,7 +549,7 @@
             params=filters)
 
         # verify response
-        self.assertTrue(len(snaps) > 0)
+        self.assertGreater(len(snaps), 0)
         sorted_list = [snap['share_id'] for snap in snaps]
         self.assertEqual(sorted(sorted_list), sorted_list)
 
diff --git a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
index 532ddd5..a4e16c7 100644
--- a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
+++ b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
@@ -340,11 +340,11 @@
 
         self.umount_share(ssh_client)
 
-        self.assertTrue('1m1.bin' in output)
-        self.assertTrue('1m2.bin' in output)
-        self.assertTrue('1m3.bin' in output)
-        self.assertTrue('1m4.bin' in output)
-        self.assertTrue('1m5.bin' in output)
+        self.assertIn('1m1.bin', output)
+        self.assertIn('1m2.bin', output)
+        self.assertIn('1m3.bin', output)
+        self.assertIn('1m4.bin', output)
+        self.assertIn('1m5.bin', output)
 
 
 class TestShareBasicOpsNFS(ShareBasicOpsBase):
