diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index a943b0c..8e5a5e7 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -16,6 +16,7 @@
 from tempest import test
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
+from tempest.lib.common.utils import data_utils as lib_data_utils
 import ddt
 
 from designate_tempest_plugin.tests import base
@@ -184,6 +185,76 @@
             lambda: self.client.create_recordset(
                 self.zone['id'], recordset_data))
 
+    @decorators.idempotent_id('b6dad57e-5ce9-4fa5-8d66-aebbcd23b4ad')
+    def test_get_nonexistent_recordset(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        LOG.info('Attempt to get an invalid Recordset')
+        with self.assertRaisesDns(
+                lib_exc.NotFound, 'recordset_not_found', 404):
+            self.client.show_recordset(zone['id'], lib_data_utils.rand_uuid())
+
+    @decorators.idempotent_id('93d744a8-0dfd-4650-bcef-1e6ad632ad72')
+    def test_get_nonexistent_recordset_invalid_id(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        LOG.info('Attempt to get an invalid Recordset')
+        with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
+            self.client.show_recordset(zone['id'], 'invalid')
+
+    @decorators.idempotent_id('da08f19a-7f10-47cc-8b41-994507190812')
+    def test_update_nonexistent_recordset(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        recordset_data = data_utils.rand_recordset_data('A', zone['name'])
+
+        LOG.info('Attempt to update an invalid Recordset')
+        with self.assertRaisesDns(
+                lib_exc.NotFound, 'recordset_not_found', 404):
+            self.client.update_recordset(
+                zone['id'], lib_data_utils.rand_uuid(), recordset_data)
+
+    @decorators.idempotent_id('158340a1-3f69-4aaa-9968-956190563768')
+    def test_update_nonexistent_recordset_invalid_id(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        recordset_data = data_utils.rand_recordset_data('A', zone['name'])
+
+        LOG.info('Attempt to update an invalid Recordset')
+        with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
+            self.client.update_recordset(
+                zone['id'], 'invalid', recordset_data)
+
+    @decorators.idempotent_id('64bd94d4-54bd-4bee-b6fd-92ede063234e')
+    def test_delete_nonexistent_recordset(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        LOG.info('Attempt to delete an invalid Recordset')
+        with self.assertRaisesDns(
+                lib_exc.NotFound, 'recordset_not_found', 404):
+            self.client.delete_recordset(
+                zone['id'], lib_data_utils.rand_uuid())
+
+    @decorators.idempotent_id('5948b599-a332-4dcb-840b-afc825075ba3')
+    def test_delete_nonexistent_recordset_invalid_id(self):
+        LOG.info('Create a zone')
+        _, zone = self.zone_client.create_zone()
+        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+
+        LOG.info('Attempt to get an invalid Recordset')
+        with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
+            self.client.delete_recordset(zone['id'], 'invalid')
+
 
 class RootRecordsetsTests(BaseRecordsetsTest):
 
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index c86b38a..8f3e83d 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -21,6 +21,38 @@
 CONF = config.CONF
 
 
+class AssertRaisesDns(object):
+    def __init__(self, test_class, exc, type_, code):
+        self.test_class = test_class
+        self.exc = exc
+        self.type_ = type_
+        self.code = code
+
+    def __enter__(self):
+        pass
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        if exc_type is None:
+            try:
+                exc_name = self.exc.__name__
+            except AttributeError:
+                exc_name = str(self.exc)
+            raise self.failureException(
+                "{0} not raised".format(exc_name))
+
+        if issubclass(exc_type, self.exc):
+            self.test_class.assertEqual(
+                self.code, exc_value.resp_body['code'])
+
+            self.test_class.assertEqual(
+                    self.type_, exc_value.resp_body['type'])
+
+            return True
+
+        # Unexpected exceptions will be reraised
+        return False
+
+
 class BaseDnsTest(test.BaseTestCase):
     """Base class for DNS tests."""
 
@@ -49,6 +81,22 @@
                 self.assertIn(key, actual)
                 self.assertEqual(value, actual[key], key)
 
+    def assertRaisesDns(self, exc, type_, code, callable_=None, *args,
+                        **kwargs):
+        """
+        Checks the response that a api call with a exception contains the
+        expected data
+
+        Usable as both a ordinary function, and a context manager
+        """
+        context = AssertRaisesDns(self, exc, type_, code)
+
+        if callable_ is None:
+            return context
+
+        with context:
+            callable_(*args, **kwargs)
+
 
 class BaseDnsV1Test(BaseDnsTest):
     """Base class for DNS V1 API tests."""
