support --backend as a pytest flag to limit to one backend for testing
diff --git a/cryptography/hazmat/backends/openssl/backend.py b/cryptography/hazmat/backends/openssl/backend.py
index 07ee58c..ee82ba7 100644
--- a/cryptography/hazmat/backends/openssl/backend.py
+++ b/cryptography/hazmat/backends/openssl/backend.py
@@ -37,6 +37,7 @@
     """
     OpenSSL API binding interfaces.
     """
+    name = "openssl"
 
     def __init__(self):
         self._binding = Binding()
diff --git a/tests/conftest.py b/tests/conftest.py
index 1d9f96e..5cc3042 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,7 +5,12 @@
     HMACBackend, CipherBackend, HashBackend
 )
 
-from .utils import check_for_iface, check_backend_support
+from .utils import check_for_iface, check_backend_support, modify_backend_list
+
+
+def pytest_generate_tests(metafunc):
+    name = metafunc.config.getoption("--backend")
+    modify_backend_list(name, _ALL_BACKENDS)
 
 
 @pytest.fixture(params=_ALL_BACKENDS)
@@ -19,3 +24,10 @@
     check_for_iface("cipher", CipherBackend, item)
     check_for_iface("hash", HashBackend, item)
     check_backend_support(item)
+
+
+def pytest_addoption(parser):
+    parser.addoption(
+        "--backend", action="store", metavar="NAME",
+        help="Only run tests matching the backend NAME."
+    )
diff --git a/tests/test_utils.py b/tests/test_utils.py
index e3e53d6..e8037c1 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -21,7 +21,7 @@
 from .utils import (
     load_nist_vectors, load_vectors_from_file, load_cryptrec_vectors,
     load_openssl_vectors, load_hash_vectors, check_for_iface,
-    check_backend_support
+    check_backend_support, modify_backend_list
 )
 
 
@@ -29,6 +29,27 @@
     pass
 
 
+def test_modify_backend_list_leave_one():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = "b2"
+    modify_backend_list(name, backends)
+    assert len(backends) == 1
+    assert backends[0] == b2
+
+
+def test_modify_backend_list_error_none():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = "back!"
+    with pytest.raises(ValueError):
+        modify_backend_list(name, backends)
+
+
 def test_check_for_iface():
     item = pretend.stub(keywords=["fake_name"], funcargs={"backend": True})
     with pytest.raises(pytest.skip.Exception) as exc_info:
diff --git a/tests/utils.py b/tests/utils.py
index 693a0c8..343f3ef 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -16,6 +16,16 @@
 import pytest
 
 
+def modify_backend_list(name, all_backends):
+    if name is not None:
+        backends = list(all_backends)
+        for backend in backends:
+            if backend.name != name:
+                all_backends.remove(backend)
+        if len(all_backends) == 0:
+            raise ValueError("No backends selected for testing")
+
+
 def check_for_iface(name, iface, item):
     if name in item.keywords and "backend" in item.funcargs:
         if not isinstance(item.funcargs["backend"], iface):