diff --git a/tests/test_live_view.py b/tests/test_live_view.py
index e5245e5efe443b36a3af3a1970b5d23c5e9dd612..f77d456b6815bc5ca02a25e9970a3511827ecf16 100644
--- a/tests/test_live_view.py
+++ b/tests/test_live_view.py
@@ -134,6 +134,8 @@ def started(spectrometer, plot_timetrace, in_process, in_gitlab_ci):
         for view in views:
             view.process.terminate()
 
+    plt.close(spectrometer.fig)
+
 
 @pytest.fixture
 def stopped(started: list[LiveViewT], in_process: bool):
diff --git a/tests/test_serialization.py b/tests/test_serialization.py
index ae664a3fb8878a43e844286868c0071188c6c1e1..645393bb530af2946409e5c1960d2f09f21df27d 100644
--- a/tests/test_serialization.py
+++ b/tests/test_serialization.py
@@ -6,6 +6,8 @@ import time
 from tempfile import mkdtemp
 
 import pytest
+from matplotlib import pyplot as plt
+
 from python_spectrometer import Spectrometer, daq
 from qutil.plotting import is_using_mpl_gui_backend
 
@@ -55,28 +57,28 @@ def spectrometer(monkeypatch, relative_paths: bool, threaded_acquisition: bool):
                          relative_paths=relative_paths)
     speck.savepath.mkdir(parents=True, exist_ok=True)
 
-    try:
-        os.chdir(speck.savepath)
+    os.chdir(speck.savepath)
+
+    # XXX: need to block to avoid timing issues when running tests
+    speck.take('foo', progress=False)
+    speck.block_until_ready()
+    if threaded_acquisition:
+        # Advance two frames in headless mode, otherwise data is not saved.
+        advance_frames(speck, 2)
 
-        # XXX: need to block to avoid timing issues when running tests
-        speck.take('foo', progress=False)
-        speck.block_until_ready()
-        if threaded_acquisition:
-            # Advance two frames in headless mode, otherwise data is not saved.
-            advance_frames(speck, 2)
+    speck.take('baz', fs=1e3, nperseg=400, progress=False)
+    speck.block_until_ready()
+    if threaded_acquisition:
+        advance_frames(speck, 2)
 
-        speck.take('baz', fs=1e3, nperseg=400, progress=False)
-        speck.block_until_ready()
-        if threaded_acquisition:
-            advance_frames(speck, 2)
+    yield speck
 
-        yield speck
-    finally:
-        for file in speck.files:
-            remove_file_if_exists(file)
-        remove_dir_if_exists(speck.savepath)
+    for file in speck.files:
+        remove_file_if_exists(file)
+    remove_dir_if_exists(speck.savepath)
 
-        os.chdir(cwd)
+    os.chdir(cwd)
+    plt.close(speck.fig)
 
 
 @pytest.fixture
@@ -84,18 +86,19 @@ def serialized(done_saving: Spectrometer):
     spectrometer = done_saving
     stem = ''.join(random.choices(string.ascii_letters, k=10))
 
-    try:
-        spectrometer.serialize_to_disk(stem)
+    spectrometer.serialize_to_disk(stem)
 
-        yield spectrometer.savepath / stem
-    finally:
-        exts = ['_files.txt']
-        if (spectrometer.savepath / stem).is_file():
-            remove_file_if_exists(spectrometer.savepath / stem)
-        else:
-            exts.extend(['.bak', '.dat', '.dir'])
-        for ext in exts:
-            remove_file_if_exists(spectrometer.savepath / f'{stem}{ext}')
+    yield spectrometer.savepath / stem
+
+    exts = ['_files.txt']
+    if (spectrometer.savepath / stem).is_file():
+        remove_file_if_exists(spectrometer.savepath / stem)
+    else:
+        exts.extend(['.bak', '.dat', '.dir'])
+    for ext in exts:
+        remove_file_if_exists(spectrometer.savepath / f'{stem}{ext}')
+
+    plt.close(spectrometer.fig)
 
 
 @pytest.fixture