diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py
index 745de22..bf013ec 100644
--- a/tempest/api/object_storage/base.py
+++ b/tempest/api/object_storage/base.py
@@ -47,3 +47,31 @@
         except exceptions.EndpointNotFound:
             skip_msg = "No OpenStack Object Storage API endpoint"
             raise cls.skipException(skip_msg)
+
+    @classmethod
+    def delete_containers(cls, containers, container_client=None,
+                          object_client=None):
+        """Remove given containers and all objects in them.
+
+        The containers should be visible from the container_client given.
+        Will not throw any error if the containers don't exist.
+
+        :param containers: list of container names to remove
+        :param container_client: if None, use cls.container_client, this means
+            that the default testing user will be used (see 'username' in
+            'etc/tempest.conf')
+        :param object_client: if None, use cls.object_client
+        """
+        if container_client is None:
+            container_client = cls.container_client
+        if object_client is None:
+            object_client = cls.object_client
+        for cont in containers:
+            try:
+                objlist = container_client.list_all_container_objects(cont)
+                # delete every object in the container
+                for obj in objlist:
+                    object_client.delete_object(cont, obj['name'])
+                container_client.delete_container(cont)
+            except exceptions.NotFound:
+                pass
diff --git a/tempest/api/object_storage/test_container_services.py b/tempest/api/object_storage/test_container_services.py
index 0b4b57b..70f704f 100644
--- a/tempest/api/object_storage/test_container_services.py
+++ b/tempest/api/object_storage/test_container_services.py
@@ -29,15 +29,7 @@
 
     @classmethod
     def tearDownClass(cls):
-        for container in cls.containers:
-            objlist = \
-                cls.container_client.list_all_container_objects(container)
-            # delete every object in the container
-            for obj in objlist:
-                resp, _ = \
-                    cls.object_client.delete_object(container, obj['name'])
-            # delete the container
-            resp, _ = cls.container_client.delete_container(container)
+        cls.delete_containers(cls.containers)
 
     @attr(type='smoke')
     def test_create_container(self):
@@ -125,8 +117,3 @@
         self.assertEqual(resp['status'], '204')
         self.assertNotIn('x-container-meta-name', resp)
         self.assertNotIn('x-container-meta-description', resp)
-
-        # delete container
-        resp, _ = self.container_client.delete_container(container_name)
-        self.assertEqual(resp['status'], '204')
-        self.containers.remove(container_name)
diff --git a/tempest/api/object_storage/test_container_sync.py b/tempest/api/object_storage/test_container_sync.py
index 03ce12f..a1c1c06 100644
--- a/tempest/api/object_storage/test_container_sync.py
+++ b/tempest/api/object_storage/test_container_sync.py
@@ -48,14 +48,8 @@
 
     @classmethod
     def tearDownClass(cls):
-        for cont_name, client in cls.clients.items():
-            objlist = client[0].list_all_container_objects(cont_name)
-            # delete every object in the container
-            if objlist:
-                for obj in objlist:
-                    resp, _ = client[1].delete_object(cont_name, obj['name'])
-            # delete the container
-            resp, _ = client[0].delete_container(cont_name)
+        for client in cls.clients.values():
+            cls.delete_containers(cls.containers, client[0], client[1])
 
     @testtools.skip('Until Bug #1093743 is resolved.')
     @attr(type=['positive', 'gate'])
diff --git a/tempest/api/object_storage/test_object_expiry.py b/tempest/api/object_storage/test_object_expiry.py
index 08ffc74..aaa2c64 100644
--- a/tempest/api/object_storage/test_object_expiry.py
+++ b/tempest/api/object_storage/test_object_expiry.py
@@ -40,15 +40,7 @@
         But delete action for the expired object is raising
         NotFound exception and also non empty container cannot be deleted.
         """
-        objlist = \
-            cls.container_client.list_all_container_objects(cls.container_name)
-        # delete every object in the container
-        if objlist:
-            for obj in objlist:
-                resp, _ = cls.object_client.delete_object(cls.container_name,
-                                                          obj['name'])
-        # delete the container
-        resp, _ = cls.container_client.delete_container(cls.container_name)
+        cls.delete_containers([cls.container_name])
 
     @testtools.skip('Until Bug #1069849 is resolved.')
     @attr(type='gate')
diff --git a/tempest/api/object_storage/test_object_services.py b/tempest/api/object_storage/test_object_services.py
index dfd8eaf..72a1d51 100644
--- a/tempest/api/object_storage/test_object_services.py
+++ b/tempest/api/object_storage/test_object_services.py
@@ -32,6 +32,7 @@
         super(ObjectTest, cls).setUpClass()
         cls.container_name = rand_name(name='TestContainer')
         cls.container_client.create_container(cls.container_name)
+        cls.containers = [cls.container_name]
 
         cls.data.setup_test_user()
         resp, body = cls.token_client.auth(cls.data.test_user,
@@ -44,14 +45,7 @@
 
     @classmethod
     def tearDownClass(cls):
-        objlist = cls.container_client.list_all_container_objects(
-            cls.container_name)
-        # delete every object in the container
-        for obj in objlist:
-            resp, _ = cls.object_client.delete_object(cls.container_name,
-                                                      obj['name'])
-        # delete the container
-        resp, _ = cls.container_client.delete_container(cls.container_name)
+        cls.delete_containers(cls.containers)
         # delete the user setup created
         cls.data.teardown_all()
 
@@ -198,9 +192,11 @@
         # create a container to use as  asource container
         src_container_name = rand_name(name='TestSourceContainer')
         self.container_client.create_container(src_container_name)
+        self.containers.append(src_container_name)
         # create a container to use as a destination container
         dst_container_name = rand_name(name='TestDestinationContainer')
         self.container_client.create_container(dst_container_name)
+        self.containers.append(dst_container_name)
         # create object in source container
         object_name = rand_name(name='Object')
         data = arbitrary_string(size=len(object_name) * 2,
@@ -233,17 +229,6 @@
         except Exception as e:
             self.fail("Got exception :%s ; while copying"
                       " object across containers" % e)
-        finally:
-            # delete objects from respective containers
-            resp, _ = self.object_client.delete_object(dst_container_name,
-                                                       object_name)
-            resp, _ = self.object_client.delete_object(src_container_name,
-                                                       object_name)
-            # delete containers created in this method
-            resp, _ = self.container_client.delete_container(
-                src_container_name)
-            resp, _ = self.container_client.delete_container(
-                dst_container_name)
 
     @attr(type=['negative', 'gate'])
     def test_write_object_without_using_creds(self):
@@ -389,14 +374,7 @@
         self.container_client.create_container(self.container_name)
 
     def tearDown(self):
-        objlist = self.container_client.list_all_container_objects(
-            self.container_name)
-        # delete every object in the container
-        for obj in objlist:
-            resp, _ = self.object_client.delete_object(
-                self.container_name, obj['name'])
-        # delete the container
-        resp, _ = self.container_client.delete_container(self.container_name)
+        self.delete_containers([self.container_name])
         super(PublicObjectTest, self).tearDown()
 
     @attr(type='smoke')
diff --git a/tempest/api/object_storage/test_object_version.py b/tempest/api/object_storage/test_object_version.py
index d449c0a..cda3e4f 100644
--- a/tempest/api/object_storage/test_object_version.py
+++ b/tempest/api/object_storage/test_object_version.py
@@ -28,15 +28,7 @@
 
     @classmethod
     def tearDownClass(cls):
-        for container in cls.containers:
-            objlist = \
-                cls.container_client.list_all_container_objects(container)
-            # delete every object in the container
-            for obj in objlist:
-                resp, _ = \
-                    cls.object_client.delete_object(container, obj['name'])
-            # delete the container
-            resp, _ = cls.container_client.delete_container(container)
+        cls.delete_containers(cls.containers)
 
     def assertContainer(self, container, count, byte, versioned):
         resp, _ = self.container_client.list_container_metadata(container)
@@ -94,10 +86,3 @@
                              vers_container_name)
         self.assertContainer(vers_container_name, '0', '0',
                              'Missing Header')
-        # delete containers
-        resp, _ = self.container_client.delete_container(base_container_name)
-        self.assertEqual(resp['status'], '204')
-        self.containers.remove(base_container_name)
-        resp, _ = self.container_client.delete_container(vers_container_name)
-        self.assertEqual(resp['status'], '204')
-        self.containers.remove(vers_container_name)
