modify backend selection to allow multiple backends via comma delimiter
diff --git a/tests/conftest.py b/tests/conftest.py
index 49e178b..b9879f8 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,21 +5,21 @@
     HMACBackend, CipherBackend, HashBackend
 )
 
-from .utils import check_for_iface, check_backend_support, modify_backend_list
+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
-_DESIRED_BACKENDS = list(_ALL_BACKENDS)
+_SELECTED_BACKENDS = list(_ALL_BACKENDS)
 
 
 def pytest_generate_tests(metafunc):
-    global _DESIRED_BACKENDS
-    name = metafunc.config.getoption("--backend")
-    modify_backend_list(name, _DESIRED_BACKENDS)
+    global _SELECTED_BACKENDS
+    names = metafunc.config.getoption("--backend")
+    _SELECTED_BACKENDS = select_backends(names, _SELECTED_BACKENDS)
 
 
-@pytest.fixture(params=_DESIRED_BACKENDS)
+@pytest.fixture(params=_SELECTED_BACKENDS)
 def backend(request):
     return request.param
 
diff --git a/tests/test_utils.py b/tests/test_utils.py
index e8037c1..a7da490 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, modify_backend_list
+    check_backend_support, select_backends
 )
 
 
@@ -29,25 +29,46 @@
     pass
 
 
-def test_modify_backend_list_leave_one():
+def test_select_one_backend():
     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)
+    select_backends(name, backends)
     assert len(backends) == 1
     assert backends[0] == b2
 
 
-def test_modify_backend_list_error_none():
+def test_select_no_backend():
     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)
+        select_backends(name, backends)
+
+
+def test_select_backends_none():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = None
+    select_backends(name, backends)
+    assert len(backends) == 3
+
+
+def test_select_two_backends():
+    b1 = pretend.stub(name="b1")
+    b2 = pretend.stub(name="b2")
+    b3 = pretend.stub(name="b3")
+    backends = [b1, b2, b3]
+    name = "b2 ,b1 "
+    select_backends(name, backends)
+    assert len(backends) == 2
+    assert backends == [b1, b2]
 
 
 def test_check_for_iface():
diff --git a/tests/utils.py b/tests/utils.py
index 343f3ef..ee1675e 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -16,14 +16,23 @@
 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 select_backends(names, backend_list):
+    if names is None:
+        return backend_list
+    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)
+
+    if len(backend_list) > 0:
+        return backend_list
+    else:
+        raise ValueError(
+            "No backend selected. Tried to select: {0}".format(split_names)
+        )
 
 
 def check_for_iface(name, iface, item):