revert fixture decorator for now, switch to append. no more globals
diff --git a/tests/conftest.py b/tests/conftest.py
index b9879f8..a9acb54 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -8,20 +8,12 @@
 from .utils import check_for_iface, check_backend_support, select_backends
 
 
-# copy all backends so we can mutate it.This variable is used in generate
-# tests to allow us to target a single backend without changing _ALL_BACKENDS
-_SELECTED_BACKENDS = list(_ALL_BACKENDS)
-
-
 def pytest_generate_tests(metafunc):
-    global _SELECTED_BACKENDS
     names = metafunc.config.getoption("--backend")
-    _SELECTED_BACKENDS = select_backends(names, _SELECTED_BACKENDS)
+    selected_backends = select_backends(names, _ALL_BACKENDS)
 
-
-@pytest.fixture(params=_SELECTED_BACKENDS)
-def backend(request):
-    return request.param
+    if "backend" in metafunc.fixturenames:
+        metafunc.parametrize("backend", selected_backends)
 
 
 @pytest.mark.trylast
diff --git a/tests/test_utils.py b/tests/test_utils.py
index a7da490..f852f3a 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -35,9 +35,9 @@
     b3 = pretend.stub(name="b3")
     backends = [b1, b2, b3]
     name = "b2"
-    select_backends(name, backends)
-    assert len(backends) == 1
-    assert backends[0] == b2
+    selected_backends = select_backends(name, backends)
+    assert len(selected_backends) == 1
+    assert selected_backends[0] == b2
 
 
 def test_select_no_backend():
@@ -56,8 +56,8 @@
     b3 = pretend.stub(name="b3")
     backends = [b1, b2, b3]
     name = None
-    select_backends(name, backends)
-    assert len(backends) == 3
+    selected_backends = select_backends(name, backends)
+    assert len(selected_backends) == 3
 
 
 def test_select_two_backends():
@@ -66,9 +66,9 @@
     b3 = pretend.stub(name="b3")
     backends = [b1, b2, b3]
     name = "b2 ,b1 "
-    select_backends(name, backends)
-    assert len(backends) == 2
-    assert backends == [b1, b2]
+    selected_backends = select_backends(name, backends)
+    assert len(selected_backends) == 2
+    assert selected_backends == [b1, b2]
 
 
 def test_check_for_iface():
diff --git a/tests/utils.py b/tests/utils.py
index ee1675e..a243225 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -22,13 +22,13 @@
     split_names = [x.strip() for x in names.split(',')]
     # this must be duplicated and then removed to preserve the metadata
     # pytest associates. Appending backends to a new list doesn't seem to work
-    backends = list(backend_list)
-    for backend in backends:
-        if backend.name not in split_names:
-            backend_list.remove(backend)
+    selected_backends = []
+    for backend in backend_list:
+        if backend.name in split_names:
+            selected_backends.append(backend)
 
-    if len(backend_list) > 0:
-        return backend_list
+    if len(selected_backends) > 0:
+        return selected_backends
     else:
         raise ValueError(
             "No backend selected. Tried to select: {0}".format(split_names)