--- a
+++ b/tests/lib/file_utils.py
@@ -0,0 +1,20 @@
+import csv
+import gzip
+
+from pyarrow.feather import read_table
+
+from ehrql.file_formats import get_file_extension
+
+
+def read_file_as_dicts(filename):
+    extension = get_file_extension(filename)
+    if extension == ".csv":
+        with open(filename, newline="") as f:
+            return list(csv.DictReader(f))
+    elif extension == ".csv.gz":
+        with gzip.open(filename, "rt", newline="") as f:
+            return list(csv.DictReader(f))
+    elif extension == ".arrow":
+        return read_table(str(filename)).to_pylist()
+    else:
+        assert False, f"Unsupported extension: {filename}"