diff --git a/meta-python/recipes-devtools/python/python3-filelock/run-ptest b/meta-python/recipes-devtools/python/python3-filelock/run-ptest
index 88654deb70..fd1ddc5896 100644
--- a/meta-python/recipes-devtools/python/python3-filelock/run-ptest
+++ b/meta-python/recipes-devtools/python/python3-filelock/run-ptest
@@ -3,4 +3,6 @@
 # Some tests require non-root
 useradd tester || echo test user exists already
 
-su tester -c "pytest --automake"
+# tester can't write pytest's cache dir under the read-only-to-them
+# /usr/lib/python3-filelock/ptest install path; disable it, it's not needed
+su tester -c "pytest --automake -p no:cacheprovider"
diff --git a/meta-python/recipes-devtools/python/python3-filelock_3.32.4.bb b/meta-python/recipes-devtools/python/python3-filelock_3.32.4.bb
index 63ebb08b6e..e3642b2087 100644
--- a/meta-python/recipes-devtools/python/python3-filelock_3.32.4.bb
+++ b/meta-python/recipes-devtools/python/python3-filelock_3.32.4.bb
@@ -28,6 +28,15 @@ RDEPENDS:${PN} += " \
 RDEPENDS:${PN}-ptest += " \
     python3-pytest-asyncio \
     python3-pytest-mock \
+    python3-pytest-timeout \
     python3-virtualenv \
     python3-discovery \
 "
+
+# tests/ imports itself as "tests.*" and pulls in "capabilities" from the
+# sibling tasks/ dir; pyproject.toml's [tool.pytest] pythonpath=[".", "tasks"]
+# is what upstream relies on to make both resolve.
+do_install_ptest:append() {
+    cp -rf ${S}/tasks ${D}${PTEST_PATH}/
+    cp -f ${S}/pyproject.toml ${D}${PTEST_PATH}/
+}
