diff --git a/tests/test_datatype.py b/tests/test_datatype.py
index a7b14d3def80a5504f37278aa9f5ab04cb698438..3a276b04137a4be3f25e1d7f423116331e091dd7 100644
--- a/tests/test_datatype.py
+++ b/tests/test_datatype.py
@@ -27,7 +27,8 @@
 """
 import caosdb as db
 # @UnresolvedImport
-from nose.tools import nottest, assert_raises, with_setup, assert_true, assert_equal
+from nose.tools import nottest, with_setup, assert_true, assert_equal
+from pytest import raises
 
 
 def setup():
@@ -50,15 +51,15 @@ def test_override_with_non_existing_ref():
     rt2 = db.RecordType("TestRecordType2").insert()
     db.Property("TestProperty", datatype=db.TEXT).insert()
 
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         db.Record(
             name="TestRecord").add_property(
             name="TestProperty",
             datatype=rt2,
             value="Non-Existing").add_parent(rt1).insert()
-    assert_equal(
-        cm.exception.get_errors()[0].msg,
-        "Referenced entity does not exist.")
+    assert cm.value.has_error(db.UnqualifiedPropertiesError)
+    assert (cm.value.get_errors()[0].get_errors()[0].msg ==
+            "Referenced entity does not exist.")
 
 
 @with_setup(setup, teardown)
@@ -143,37 +144,33 @@ def test_generic_reference_failure():
         name="TestRT2").add_property(
             name="TestP1",
         value="asdf")
-    assert_raises(db.TransactionError, rec2.insert)
+    with raises(db.TransactionError):
+        rec2.insert()
 
 
 @with_setup(setup, teardown)
 def test_unknown_datatype1():
     p = db.Property(name="TestP", datatype="Non-Existing")
-    try:
+    with raises(db.TransactionError) as te:
         p.insert()
         assert_true(False)
-    except db.TransactionError as e:
-        assert_equal(e.msg, "Unknown datatype.")
+    assert te.value.get_errors()[0].msg == "Unknown datatype."
 
 
 @with_setup(setup, teardown)
 def test_unknown_datatype2():
     p = db.Property(name="TestP", datatype="12345687654334567")
-    try:
+    with raises(db.TransactionError) as te:
         p.insert()
-        assert_true(False)
-    except db.TransactionError as e:
-        assert_equal(e.msg, "Unknown datatype.")
+    assert te.value.get_errors()[0].msg == "Unknown datatype."
 
 
 @with_setup(setup, teardown)
 def test_unknown_datatype3():
     p = db.Property(name="TestP", datatype="-134")
-    try:
+    with raises(db.TransactionError) as te:
         p.insert()
-        assert_true(False)
-    except db.TransactionError as e:
-        assert_equal(e.msg, "Unknown datatype.")
+    assert te.value.get_errors()[0].msg == "Unknown datatype."
 
 
 @with_setup(setup, teardown)
@@ -182,10 +179,10 @@ def test_wrong_refid():
     rt2 = db.RecordType(name="TestRT2").insert()
     rt3 = db.RecordType(name="TestRT3").insert()
     p = db.Property(name="TestP1", datatype=rt1.id).insert()
-    assert_true(p.is_valid())
-    assert_true(rt1.is_valid())
-    assert_true(rt2.is_valid())
-    assert_true(rt3.is_valid())
+    assert p.is_valid()
+    assert rt1.is_valid()
+    assert rt2.is_valid()
+    assert rt3.is_valid()
 
     rec1 = db.Record().add_parent(name="TestRT1").insert()
     rec2 = db.Record().add_parent(name="TestRT2").insert()
@@ -193,16 +190,13 @@ def test_wrong_refid():
         name="TestRT3").add_property(
         name="TestP1",
         value=rec2.id)
-    try:
+    with raises(db.TransactionError):
         rec3.insert()
-        assert_true(False)
-    except db.TransactionError:
-        assert_equal(
-            rec3.get_property("TestP1").get_errors()[0].description,
+    assert (rec3.get_property("TestP1").get_errors()[0].description ==
             'Reference not qualified. The value of this Reference Property is to be a child of its data type.')
 
     rec4 = db.Record().add_parent(
         name="TestRT3").add_property(
         name="TestP1",
         value=rec1.id).insert()
-    assert_true(rec4.is_valid())
+    assert rec4.is_valid()
diff --git a/tests/test_misc.py b/tests/test_misc.py
index 1e107a6db48a8f5c82df613930871d0514b37852..09755dc7369d4a8c5af53505d3c686067bd0eaa9 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -27,12 +27,13 @@
 @author: tf
 """
 from nose.tools import (assert_equal, assert_is_not_none,  # @UnresolvedImport
-                        assert_not_equal, assert_raises, assert_true, nottest,
+                        assert_not_equal, assert_true, nottest,
                         with_setup)
 
 import caosdb as db
 from caosdb import (Container, Info, Property, Record, RecordType,
                     execute_query)
+from pytest import raises
 
 
 def setup():
@@ -142,16 +143,18 @@ def test_error_no_such_role():
     xml = "<Insert><Entity name='test'/></Insert>"
     r = db.get_connection().insert(entity_uri_segment=["Entity"], body=xml)
     c = Container._response_to_entities(r)
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         db.raise_errors(c)
-    assert_equal(cm.exception.msg, "There is no such role 'Entity'.")
+    assert (cm.value.get_errors()[0].msg ==
+            "There is no such role 'Entity'.")
 
     xml = "<Insert><ASDF name='test'/></Insert>"
     r = db.get_connection().insert(entity_uri_segment=["Entity"], body=xml)
     c = Container._response_to_entities(r)
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         db.raise_errors(c)
-    assert_equal(cm.exception.msg, "There is no such role 'ASDF'.")
+    assert (cm.value.get_errors()[0].msg ==
+            "There is no such role 'ASDF'.")
 
 
 @with_setup(setup, setup)
@@ -181,22 +184,21 @@ def test_parent_duplicate_2():
         inheritance=db.ALL).add_parent(
             name="TestRT1",
         inheritance=db.NONE)
-    assert_equal(len(rt2.get_parents()), 2)
-    with assert_raises(db.TransactionError) as cm:
+    assert len(rt2.get_parents()) == 2
+    with raises(db.TransactionError) as cm:
         rt2.insert()
-    assert_equal(
-        cm.exception.msg,
-        "This entity had parent duplicates. Parent duplicates are meaningless and would be ignored (and inserted only once). But these parents had diverging inheritance instructions which cannot be processed.")
+    assert (cm.value.get_errors()[0].msg ==
+            "This entity had parent duplicates. Parent duplicates are meaningless and would be ignored (and inserted only once). But these parents had diverging inheritance instructions which cannot be processed.")
 
 
 def test_server_error():
     con = db.get_connection()
     con._login()
-    with assert_raises(db.ServerErrorException) as cm:
+    with raises(db.ServerErrorException) as cm:
         con._http_request(
             method="GET",
             path="Entity?debug=throwNullPointerException")
-    assert_true("SRID = " in cm.exception.msg)
+    assert_true("SRID = " in cm.value.msg)
 
 
 def test_annotation():
diff --git a/tests/test_query_template.py b/tests/test_query_template.py
index 00aead470721f82631ece76c502f257cdb8b3769..52bc2c96dbb241368209f017159a79ab064d60ad 100644
--- a/tests/test_query_template.py
+++ b/tests/test_query_template.py
@@ -27,6 +27,7 @@
 """
 import caosdb as db
 from nose.tools import with_setup, assert_true, assert_is_none, assert_equal, assert_is_not_none, nottest, assert_raises  # @UnresolvedImport
+from pytest import raises
 
 
 def setup_module():
@@ -107,12 +108,11 @@ def test_insertion_failure_syntax():
         name="TestQueryTemplate",
         description="Find some interesting things with via a simple name.",
         query="SDASDUASIUF")
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.insert()
-    print(cm.exception)
-    assert_equal(
-        cm.exception.msg,
-        "An error occured during the parsing of this query. Maybe you use a wrong syntax?")
+    print(cm.value)
+    assert (cm.value.get_errors()[0].msg ==
+            "An error occured during the parsing of this query. Maybe you use a wrong syntax?")
 
 
 @with_setup(setup, teardown)
@@ -121,11 +121,10 @@ def test_insertion_failure_count_query_not_allowed():
         name="TestQueryTemplate",
         description="Find some interesting things with via a simple name.",
         query="COUNT something")
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.insert()
-    assert_equal(
-        cm.exception.msg,
-        "QueryTemplates may not be defined by 'COUNT...' queries for consistency reasons.")
+    assert (cm.value.get_errors()[0].msg ==
+            "QueryTemplates may not be defined by 'COUNT...' queries for consistency reasons.")
 
 
 @with_setup(setup, teardown)
@@ -135,11 +134,10 @@ def test_insertion_failure_select_query_not_allowed():
         name="TestQueryTemplate",
         description="Find some interesting things with via a simple name.",
         query=query_def)
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.insert()
-    assert_equal(
-        cm.exception.msg,
-        "QueryTemplates may not be defined by 'SELECT... FROM...' queries for consistency reasons.")
+    assert (cm.value.get_errors()[0].msg ==
+            "QueryTemplates may not be defined by 'SELECT... FROM...' queries for consistency reasons.")
 
 
 @with_setup(setup, teardown)
@@ -152,9 +150,9 @@ def test_deletion_success():
 @with_setup(setup, teardown)
 def test_deletion_failure_non_existing():
     q = db.QueryTemplate(id="12342")
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.delete()
-    assert_equal(cm.exception.msg, "Entity does not exist.")
+    assert cm.value.has_error(db.EntityDoesNotExistError)
 
 
 @with_setup(setup, teardown)
@@ -169,9 +167,9 @@ def test_retrieve_success():
 @with_setup(setup, teardown)
 def test_retrieve_failure_non_existing():
     q = db.QueryTemplate(id="12342")
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.retrieve()
-    assert_equal(cm.exception.msg, "Entity does not exist.")
+    assert cm.value.has_error(db.EntityDoesNotExistError)
 
 
 @with_setup(setup, teardown)
@@ -185,42 +183,39 @@ def test_update_success():
 def test_update_failure_syntax():
     q = test_insertion_success()
     q.query = "ashdjfkasjdf"
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.update()
-    assert_equal(
-        cm.exception.msg,
-        "An error occured during the parsing of this query. Maybe you use a wrong syntax?")
+    assert(cm.value.get_errors()[0].msg ==
+           "An error occured during the parsing of this query. Maybe you use a wrong syntax?")
 
 
 @with_setup(setup, teardown)
 def test_update_failure_count_query_not_allowed():
     q = test_insertion_success()
     q.query = "COUNT somethingNew"
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.update()
-    assert_equal(
-        cm.exception.msg,
-        "QueryTemplates may not be defined by 'COUNT...' queries for consistency reasons.")
+    assert (cm.value.get_errors()[0].msg ==
+            "QueryTemplates may not be defined by 'COUNT...' queries for consistency reasons.")
 
 
 @with_setup(setup, teardown)
 def test_update_failure_select_query_not_allowed():
     q = test_insertion_success()
     q.query = "SELECT TestAnimal FROM TestExperiment WHICH HAS A TestAnimal = Pig"
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.update()
-    assert_equal(
-        cm.exception.msg,
-        "QueryTemplates may not be defined by 'SELECT... FROM...' queries for consistency reasons.")
+    assert (cm.value.get_errors()[0].msg ==
+            "QueryTemplates may not be defined by 'SELECT... FROM...' queries for consistency reasons.")
 
 
 @with_setup(setup, teardown)
 def test_update_failure_non_existing():
     q = db.QueryTemplate(id="12342")
     q.query = "FIND NewStuff"
-    with assert_raises(db.TransactionError) as cm:
+    with raises(db.TransactionError) as cm:
         q.update()
-    assert_equal(cm.exception.msg, "Entity does not exist.")
+    assert cm.value.has_error(db.EntityDoesNotExistError)
 
 
 @with_setup(setup, teardown)