add test marks for various backend functionality
diff --git a/tests/conftest.py b/tests/conftest.py
index 7166280..91ba988 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,5 +1,21 @@
+import pytest
+
+from cryptography.hazmat.backends.interfaces import (
+    HMACBackend, CipherBackend, HashBackend
+)
+
+from .skip_check import skip_check
+
+
 def pytest_generate_tests(metafunc):
     from cryptography.hazmat.backends import _ALL_BACKENDS
 
     if "backend" in metafunc.fixturenames:
         metafunc.parametrize("backend", _ALL_BACKENDS)
+
+
+@pytest.mark.trylast
+def pytest_runtest_setup(item):
+    skip_check('hmac', HMACBackend, item)
+    skip_check('cipher', CipherBackend, item)
+    skip_check('hash', HashBackend, item)
diff --git a/tests/skip_check.py b/tests/skip_check.py
new file mode 100644
index 0000000..4d454d7
--- /dev/null
+++ b/tests/skip_check.py
@@ -0,0 +1,22 @@
+# 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 __future__ import absolute_import, division, print_function
+
+import pytest
+
+
+def skip_check(name, iface, item):
+    if name in item.keywords and item.funcargs.get('backend') is not None:
+        if not isinstance(item.funcargs['backend'], iface):
+            pytest.skip("Backend does not support {}".format(name))
diff --git a/tests/test_skip_check.py b/tests/test_skip_check.py
new file mode 100644
index 0000000..3b303ac
--- /dev/null
+++ b/tests/test_skip_check.py
@@ -0,0 +1,31 @@
+# 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 __future__ import absolute_import, division, print_function
+
+import pretend
+
+import pytest
+
+from .skip_check import skip_check
+
+
+class FakeInterface(object):
+    pass
+
+
+def test_skip_check():
+    item = pretend.stub(keywords=["fake_name"], funcargs={"backend": True})
+    with pytest.raises(pytest.skip.Exception) as exc_info:
+        skip_check("fake_name", FakeInterface, item)
+    assert exc_info.value.args[0] == "Backend does not support fake_name"