diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index a901b582f27dac..71ababd19b876a 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -6,6 +6,7 @@
 import signal
 import subprocess
 import sys
+import tempfile
 import threading
 import time
 import traceback
@@ -273,14 +274,16 @@ def _run_process(self, test_name: str, tmp_dir: str) -> tuple[int, str, str]:
             self.current_test_name = None
 
     def _runtest(self, test_name: str) -> MultiprocessResult:
-        if self.ns.use_mp == 1:
+        # Don't check for leaked temporary files and directories if Python is
+        # run on WASI. WASI don't pass environment variables like TMPDIR to
+        # worker processes.
+        if not support.is_wasi:
             # gh-93353: Check for leaked temporary files in the parent process,
             # since the deletion of temporary files can happen late during
             # Python finalization: too late for libregrtest.
-            tmp_dir = os.getcwd() + '_tmpdir'
+            tmp_dir = tempfile.mkdtemp(prefix="test_python_")
             tmp_dir = os.path.abspath(tmp_dir)
             try:
-                os.mkdir(tmp_dir)
                 retcode, stdout = self._run_process(test_name, tmp_dir)
             finally:
                 tmp_files = os.listdir(tmp_dir)
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index 93c0cae1473a0c..a36d18488a5ef7 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -1357,6 +1357,8 @@ def test_cleanup(self):
         for name in names:
             self.assertFalse(os.path.exists(name), name)
 
+    @unittest.skipIf(support.is_wasi,
+                     'checking temp files is not implemented on WASI')
     def test_leak_tmp_file(self):
         code = textwrap.dedent(r"""
             import os.path
@@ -1369,15 +1371,17 @@ def test_leak_tmp_file(self):
                     with open(filename, "wb") as fp:
                         fp.write(b'content')
         """)
-        testname = self.create_test(code=code)
+        testnames = [self.create_test(code=code) for _ in range(3)]
 
-        output = self.run_tests("--fail-env-changed", "-v", "-j1", testname, exitcode=3)
-        self.check_executed_tests(output, [testname],
-                                  env_changed=[testname],
-                                  fail_env_changed=True)
-        self.assertIn(f"Warning -- {testname} leaked temporary "
-                      f"files (1): mytmpfile",
-                      output)
+        output = self.run_tests("--fail-env-changed", "-v", "-j2", *testnames, exitcode=3)
+        self.check_executed_tests(output, testnames,
+                                  env_changed=testnames,
+                                  fail_env_changed=True,
+                                  randomize=True)
+        for testname in testnames:
+            self.assertIn(f"Warning -- {testname} leaked temporary "
+                          f"files (1): mytmpfile",
+                          output)
 
 
 class TestUtils(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst b/Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst
new file mode 100644
index 00000000000000..4e232948f49ee7
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst
@@ -0,0 +1,2 @@
+regrtest now checks if a test leaks temporary files or directories if run
+with -jN option. Patch by Victor Stinner.