diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -1951,8 +1951,14 @@ class TestRunner(object):
             rc = os.path.join(self._testdir, '.coveragerc')
             vlog('# Installing coverage rc to %s' % rc)
             os.environ['COVERAGE_PROCESS_START'] = rc
-            fn = os.path.join(self._installdir, '..', '.coverage')
-            os.environ['COVERAGE_FILE'] = fn
+            covdir = os.path.join(self._installdir, '..', 'coverage')
+            try:
+                os.mkdir(covdir)
+            except OSError, e:
+                if e.errno != errno.EEXIST:
+                    raise
+
+            os.environ['COVERAGE_DIR'] = covdir
 
     def _checkhglib(self, verb):
         """Ensure that the 'mercurial' package imported by python is
@@ -1991,9 +1997,9 @@ class TestRunner(object):
         # chdir is the easiest way to get short, relative paths in the
         # output.
         os.chdir(self._pythondir)
-        covdir = os.path.join(self._installdir, '..')
-        cov = coverage(data_file=os.path.join(covdir, '.coverage'))
-        cov.load()
+        covdir = os.path.join(self._installdir, '..', 'coverage')
+        cov = coverage(data_file=os.path.join(covdir, 'cov'))
+        cov.combine()
 
         omit = [os.path.join(x, '*') for x in [self._bindir, self._testdir]]
         cov.report(ignore_errors=True, omit=omit)
diff --git a/tests/sitecustomize.py b/tests/sitecustomize.py
--- a/tests/sitecustomize.py
+++ b/tests/sitecustomize.py
@@ -1,5 +1,16 @@
-try:
-    import coverage
-    getattr(coverage, 'process_startup', lambda: None)()
-except ImportError:
-    pass
+import os
+
+if os.environ.get('COVERAGE_PROCESS_START'):
+    try:
+        import coverage
+        import random
+
+        # uuid is better, but not available in Python 2.4.
+        covpath = os.path.join(os.environ['COVERAGE_DIR'],
+                               'cov.%s' % random.randrange(0, 1000000000000))
+        cov = coverage.coverage(data_file=covpath, auto_data=True)
+        cov._warn_no_data = False
+        cov._warn_unimported_source = False
+        cov.start()
+    except ImportError:
+        pass