diff --git a/tests/testutils.py b/tests/testutils.py
index 6fe711e7b8a043fb247abffa581804c896e06f20..e85584b8f051123a42bb0dbce730e30d123874f4 100644
--- a/tests/testutils.py
+++ b/tests/testutils.py
@@ -80,33 +80,56 @@ class BaseTest(unittest.TestCase):
     Base class with some useful test setup.
     """
 
-    def setUp(self) -> None:
-        self.G_TEST_SRCDIR = os.getenv(
+    G_TEST_BUILDDIR = ''
+    G_TEST_SRCDIR = ''
+    artifacts = ''
+    tmpdir = None       # type: tempfile.TemporaryDirectory
+    top_builddir = ''
+    top_srcdir = ''
+
+    @classmethod
+    def setUpClass(cls) -> None:
+        cls.G_TEST_SRCDIR = os.getenv(
             'G_TEST_SRCDIR',
             os.path.abspath(os.path.dirname(__file__)),
         )
-        self.top_srcdir = os.path.dirname(self.G_TEST_SRCDIR)
-        self.G_TEST_BUILDDIR = os.getenv(
+        cls.top_srcdir = os.path.dirname(cls.G_TEST_SRCDIR)
+        cls.G_TEST_BUILDDIR = os.getenv(
             'G_TEST_BUILDDIR',
             os.path.abspath(
                 os.path.join(os.path.dirname(__file__), '..', '_build'),
             ),
         )
-        self.top_builddir = os.path.dirname(self.G_TEST_BUILDDIR)
+        cls.top_builddir = os.path.dirname(cls.G_TEST_BUILDDIR)
 
-        self.tmpdir = tempfile.TemporaryDirectory()
-        self.addCleanup(self.tmpdir.cleanup)
+        cls.tmpdir = tempfile.TemporaryDirectory()
 
         artifacts = os.getenv('AUTOPKGTEST_ARTIFACTS')
 
         if artifacts is not None:
-            self.artifacts = os.path.abspath(artifacts)
+            cls.artifacts = os.path.abspath(artifacts)
         else:
-            self.artifacts = self.tmpdir.name
+            cls.artifacts = cls.tmpdir.name
+
+    def setUp(self) -> None:
+        cls = self.__class__
+        self.G_TEST_BUILDDIR = cls.G_TEST_BUILDDIR
+        self.G_TEST_SRCDIR = cls.G_TEST_SRCDIR
+        self.artifacts = cls.artifacts
+        self.top_builddir = cls.top_builddir
+        self.top_srcdir = cls.top_srcdir
+
+        # Class and each test get separate temp directories
+        self.tmpdir = tempfile.TemporaryDirectory()
+        self.addCleanup(self.tmpdir.cleanup)
 
     def tearDown(self) -> None:
         pass
 
+    @classmethod
+    def tearDownClass(cls) -> None:
+        cls.tmpdir.cleanup()
+
 
 def test_main():
     logging.basicConfig(level=logging.DEBUG)