diff --git a/tests/conftest.py b/tests/conftest.py
index c21f4dc..c5efbd3 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -21,24 +21,14 @@
         mark.kwargs["interface"]
         for mark in request.node.get_marker("requires_backend_interface")
     ]
-    if all(
+    if not all(
         isinstance(openssl_backend, iface) for iface in required_interfaces
     ):
-        return openssl_backend
-    pytest.skip(
-        "OpenSSL doesn't implement required interfaces: {0}".format(
-            required_interfaces
+        pytest.skip(
+            "OpenSSL doesn't implement required interfaces: {0}".format(
+                required_interfaces
+            )
         )
-    )
 
-
-@pytest.mark.trylast
-def pytest_runtest_setup(item):
-    check_backend_support(item)
-
-
-def pytest_addoption(parser):
-    parser.addoption(
-        "--backend", action="store", metavar="NAME",
-        help="Only run tests matching the backend NAME."
-    )
+    check_backend_support(openssl_backend, request)
+    return openssl_backend
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 2b5a2af..a1fa80b 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -32,10 +32,9 @@
     supported = pretend.stub(
         kwargs={"only_if": lambda backend: False, "skip_message": "Nope"}
     )
-    item = pretend.stub(keywords={"supported": [supported]},
-                        funcargs={"backend": True})
+    item = pretend.stub(keywords={"supported": [supported]})
     with pytest.raises(pytest.skip.Exception) as exc_info:
-        check_backend_support(item)
+        check_backend_support(True, item)
     assert exc_info.value.args[0] == "Nope (True)"
 
 
@@ -43,19 +42,8 @@
     supported = pretend.stub(
         kwargs={"only_if": lambda backend: True, "skip_message": "Nope"}
     )
-    item = pretend.stub(keywords={"supported": [supported]},
-                        funcargs={"backend": True})
-    assert check_backend_support(item) is None
-
-
-def test_check_backend_support_no_backend():
-    supported = pretend.stub(
-        kwargs={"only_if": "notalambda", "skip_message": "Nope"}
-    )
-    item = pretend.stub(keywords={"supported": supported},
-                        funcargs={})
-    with pytest.raises(ValueError):
-        check_backend_support(item)
+    item = pretend.stub(keywords={"supported": [supported]})
+    assert check_backend_support(None, item) is None
 
 
 def test_load_nist_vectors():
diff --git a/tests/utils.py b/tests/utils.py
index 136b060..455b6bf 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -25,17 +25,14 @@
 )
 
 
-def check_backend_support(item):
+def check_backend_support(backend, item):
     supported = item.keywords.get("supported")
-    if supported and "backend" in item.funcargs:
+    if supported:
         for mark in supported:
-            if not mark.kwargs["only_if"](item.funcargs["backend"]):
+            if not mark.kwargs["only_if"](backend):
                 pytest.skip("{0} ({1})".format(
-                    mark.kwargs["skip_message"], item.funcargs["backend"]
+                    mark.kwargs["skip_message"], backend
                 ))
-    elif supported:
-        raise ValueError("This mark is only available on methods that take a "
-                         "backend")
 
 
 @contextmanager
