diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5041c0001ad726726980824e07b2784e8c5e8177..cbd092e8c4438a036c90186a330173848cb2bd86 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Added (for new features)
 
 * Tests for deeply nested SELECT queries
-- Tests for [#62](https://gitlab.com/caosdb/caosdb-server/-/issues/62)
+* Tests for [#62](https://gitlab.com/caosdb/caosdb-server/-/issues/62)
 * Tests for One-time Authentication Tokens
 * Test for [caosdb-pylib#31](https://gitlab.com/caosdb/caosdb-pylib/-/issues/31)
 * Tests for [caosdb-server#62](https://gitlab.com/caosdb/caosdb-server/-/issues/62)
@@ -18,6 +18,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Changed (for changes in existing functionality)
 
+* `test_recursive_parents.py` now tests inserted entities; set to
+  xfail until
+  [caosdb-pylib#34](https://gitlab.com/caosdb/caosdb-pylib/-/issues/34)
+  is fixed.
+
 ### Deprecated (for soon-to-be removed features)
 
 ### Removed (for now removed features)
diff --git a/tests/test_recursive_parents.py b/tests/test_recursive_parents.py
index d3bb31ab02429f4d78b81ed0e1b06a45df8fc753..01bc489b573b7cec187a90245c8ad188b8fd5c92 100644
--- a/tests/test_recursive_parents.py
+++ b/tests/test_recursive_parents.py
@@ -5,6 +5,8 @@
 #
 # Copyright (C) 2018 Research Group Biomedical Physics,
 # Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+# Copyright (C) 2020 IndiScale GmbH <info@inidscale.com>
+# Copyright (C) 2020 Florian Spreckelsen <f.spreckelsen@indiscale.com>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as
@@ -22,11 +24,31 @@
 # ** end header
 #
 """Created on 2016-01-14.
+
+Test if recursive parents are found correctly.
+
 """
-from nose.tools import (ok_, eq_)
-from caosdb.common.models import (Record, RecordType)
+import caosdb as db
+import pytest
+
+
+def setup_module():
+    """Delete all test entities"""
+    db.execute_query("FIND Test*").delete(
+        raise_exception_on_error=False)
+
+
+def setup():
+    """No further setup required"""
+    setup_module()
+
+
+def teardown():
+    """Delete again"""
+    setup_module()
 
 
+@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
 def test_recursive_parents():
     # inheritance structure:
     #    A
@@ -36,36 +58,37 @@ def test_recursive_parents():
     #    C
     #    |
     #    c
-    A = RecordType(name="A")
-    B = RecordType(name="B").add_parent(A)
-    B2 = RecordType(name="B2").add_parent(A)
-    C = RecordType(name="C").add_parent(B).add_parent(B2)
-    c = Record(name="c").add_parent(C)
+    A = db.RecordType(name="TestTypeA").insert()
+    B = db.RecordType(name="TestTypeB").add_parent(A).insert()
+    B2 = db.RecordType(name="TestTypeB2").add_parent(A).insert()
+    C = db.RecordType(name="TestTypeC").add_parent(B).add_parent(B2).insert()
+    c = db.Record(name="TestRecord").add_parent(C).insert()
 
     parents = C.get_parents_recursively()
-    eq_(len(parents), 3)
-    ok_(A in parents)
-    ok_(B in parents)
-    ok_(B2 in parents)
+    assert len(parents) == 3
+    assert A in parents
+    assert B in parents
+    assert B2 in parents
 
     parents = c.get_parents_recursively()
-    eq_(len(parents), 4)
-    ok_(A in parents)
-    ok_(B in parents)
-    ok_(B2 in parents)
-    ok_(C in parents)
+    assert len(parents) == 4
+    assert A in parents
+    assert B in parents
+    assert B2 in parents
+    assert C in parents
 
     # Now do a time travel and great-grand-parentize yourself...
-    A.add_parent(C)
+    A.add_parent(C).update()
 
     parents = C.get_parents_recursively()
-    eq_(len(parents), 4)
-    ok_(A in parents)
-    ok_(B in parents)
-    ok_(B2 in parents)
-    ok_(C in parents)
+    assert len(parents) == 4
+    assert A in parents
+    assert B in parents
+    assert B2 in parents
+    assert C in parents
 
 
+@pytest.mark.xfail(reason="To be fixed in server and/or pylib")
 def test_entity_has_parent():
     # inheritance structure:
     #    A
@@ -75,48 +98,49 @@ def test_entity_has_parent():
     #    C
     #    |
     #    c
-    A = RecordType(name="A")
-    B = RecordType(name="B").add_parent(A)
-    B2 = RecordType(name="B2", id=42).add_parent(A)
-    C = RecordType(name="C").add_parent(B).add_parent(B2)
-    c = Record(name="c").add_parent(C)
+    A = db.RecordType(name="TestTypeA").insert()
+    B = db.RecordType(name="TestTypeB").add_parent(A).insert()
+    B2 = db.RecordType(name="TestTypeB2").add_parent(A).insert()
+    C = db.RecordType(name="TestTypeC").add_parent(B).add_parent(B2).insert()
+    c = db.Record(name="TestRecord").add_parent(C).insert()
 
-    ok_(C.has_parent(B))
-    ok_(c.has_parent(B))
-    ok_(c.has_parent(A))
+    assert C.has_parent(B)
+    assert c.has_parent(B)
+    assert c.has_parent(A)
 
-    ok_(not C.has_parent(C))
-    ok_(not A.has_parent(C))
-    ok_(not B.has_parent(C))
+    assert not C.has_parent(C)
+    assert not A.has_parent(C)
+    assert not B.has_parent(C)
 
     # Now do a time travel and great-grand-parentize yourself...
-    A.add_parent(C)
+    A.add_parent(C).update()
 
-    ok_(C.has_parent(C))
+    assert C.has_parent(C)
 
     # Non-recursive tests
-    ok_(C.has_parent(B, recursive=False))
-    ok_(not c.has_parent(B, recursive=False))
-    ok_(not c.has_parent(A, recursive=False))
-    ok_(not C.has_parent(C, recursive=False))
+    assert C.has_parent(B, recursive=False)
+    assert not c.has_parent(B, recursive=False)
+    assert not c.has_parent(A, recursive=False)
+    assert not C.has_parent(C, recursive=False)
 
     # Works by name or ID
-    fake_B_name = RecordType(name="B")
-    fake_C_name = RecordType(name="not C")
+    fake_B_name = db.RecordType(name="TestTypeB")
+    fake_C_name = db.RecordType(name="not C")
 
-    ok_(c.has_parent(fake_B_name, check_name=True))
-    ok_(not c.has_parent(fake_C_name, check_name=True))
+    assert c.has_parent(fake_B_name, check_name=True)
+    assert not c.has_parent(fake_C_name, check_name=True)
 
-    fake_B_id = RecordType(id=42)
-    fake_C_id = RecordType(id=23)
+    fake_B_id = db.RecordType(id=B.id)
+    fake_C_id = db.RecordType(id=C.id*5)
 
-    ok_(c.has_parent(fake_B_id, check_name=False, check_id=True))
-    ok_(not c.has_parent(fake_C_id, check_name=False, check_id=True))
+    assert c.has_parent(fake_B_id, check_name=False, check_id=True)
+    assert not c.has_parent(fake_C_id, check_name=False,
+                            check_id=True)
 
-    fake_B_name_id = RecordType(name="B", id=42)
-    fake_C_name_id = RecordType(name="not C", id=23)
+    fake_B_name_id = RecordType(name="TestTypeB", id=B.id)
+    fake_C_name_id = RecordType(name="not C", id=C.id*5)
 
-    ok_(c.has_parent(fake_B_name_id,
-                     check_name=True, check_id=True))
-    ok_(not c.has_parent(fake_C_name_id,
-                         check_name=True, check_id=True))
+    assert c.has_parent(fake_B_name_id, check_name=True,
+                        check_id=True)
+    assert not c.has_parent(fake_C_name_id, check_name=True,
+                            check_id=True)