diff --git a/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryFrontPagePerformanceTest.php b/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryFrontPagePerformanceTest.php
index 9cdf35039f7853680a5e24d1aad40b087a89df05..a0a7c558e8a91ccd063da57b6a204d998103f0e2 100644
--- a/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryFrontPagePerformanceTest.php
+++ b/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryFrontPagePerformanceTest.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\Tests\demo_umami\FunctionalJavascript;
 
+use Drupal\Core\Cache\Cache;
 use Drupal\FunctionalJavascriptTests\PerformanceTestBase;
 
 /**
@@ -20,10 +21,19 @@ class OpenTelemetryFrontPagePerformanceTest extends PerformanceTestBase {
    */
   protected $profile = 'demo_umami';
 
+  /**
+   * Tests performance of the Umami demo front page.
+   */
+  public function testFrontPagePerformance(): void {
+    $this->testFrontPageColdCache();
+    $this->testFrontPageCoolCache();
+    $this->testFrontPageHotCache();
+  }
+
   /**
    * Logs front page tracing data with a cold cache.
    */
-  public function testFrontPageColdCache(): void {
+  protected function testFrontPageColdCache(): void {
     // @todo Chromedriver doesn't collect tracing performance logs for the very
     //   first request in a test, so warm it up.
     //   https://www.drupal.org/project/drupal/issues/3379750
@@ -40,7 +50,7 @@ public function testFrontPageColdCache(): void {
    *
    * Hot here means that all possible caches are warmed.
    */
-  public function testFrontPageHotCache(): void {
+  protected function testFrontPageHotCache(): void {
     // Request the page twice so that asset aggregates and image derivatives are
     // definitely cached in the browser cache. The first response builds the
     // file and serves from PHP with private, no-store headers. The second
@@ -76,10 +86,10 @@ public function testFrontPageHotCache(): void {
    * Cool here means that 'global' site caches are warm but anything
    * specific to the front page is cold.
    */
-  public function testFrontPageCoolCache(): void {
+  protected function testFrontPageCoolCache(): void {
     // First of all visit the front page to ensure the image style exists.
     $this->drupalGet('<front>');
-    $this->rebuildAll();
+    $this->clearCaches();
     // Now visit a different page to warm non-route-specific caches.
     $this->drupalGet('user/login');
     $this->collectPerformanceData(function () {
@@ -87,4 +97,13 @@ public function testFrontPageCoolCache(): void {
     }, 'umamiFrontPageCoolCache');
   }
 
+  /**
+   * Clear caches.
+   */
+  protected function clearCaches(): void {
+    foreach (Cache::getBins() as $bin) {
+      $bin->deleteAll();
+    }
+  }
+
 }
diff --git a/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryNodePagePerformanceTest.php b/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryNodePagePerformanceTest.php
index 2e3597ea72946db3496584fc84945d0baac60382..8b9c5df083b14c6c329c945e399ea93ec7dee62e 100644
--- a/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryNodePagePerformanceTest.php
+++ b/core/profiles/demo_umami/tests/src/FunctionalJavascript/OpenTelemetryNodePagePerformanceTest.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\Tests\demo_umami\FunctionalJavascript;
 
+use Drupal\Core\Cache\Cache;
 use Drupal\FunctionalJavascriptTests\PerformanceTestBase;
 
 /**
@@ -20,10 +21,20 @@ class OpenTelemetryNodePagePerformanceTest extends PerformanceTestBase {
    */
   protected $profile = 'demo_umami';
 
+  /**
+   * Test canonical node page performance with various cache permutations.
+   */
+  public function testNodePage(): void {
+    $this->testNodePageColdCache();
+    $this->testNodePageCoolCache();
+    $this->testNodePageWarmCache();
+    $this->testNodePageHotCache();
+  }
+
   /**
    * Logs node page tracing data with a cold cache.
    */
-  public function testNodePageColdCache(): void {
+  protected function testNodePageColdCache(): void {
     // @todo Chromedriver doesn't collect tracing performance logs for the very
     //   first request in a test, so warm it up.
     //   https://www.drupal.org/project/drupal/issues/3379750
@@ -40,7 +51,7 @@ public function testNodePageColdCache(): void {
    *
    * Hot here means that all possible caches are warmed.
    */
-  public function testNodePageHotCache(): void {
+  protected function testNodePageHotCache(): void {
     // Request the page twice so that asset aggregates are definitely cached in
     // the browser cache.
     $this->drupalGet('node/1');
@@ -64,10 +75,10 @@ public function testNodePageHotCache(): void {
    * Cool here means that 'global' site caches are warm but anything
    * specific to the route or path is cold.
    */
-  public function testNodePageCoolCache(): void {
+  protected function testNodePageCoolCache(): void {
     // First of all visit the node page to ensure the image style exists.
     $this->drupalGet('node/1');
-    $this->rebuildAll();
+    $this->clearCaches();
     // Now visit a non-node page to warm non-route-specific caches.
     $this->drupalGet('user/login');
     $this->collectPerformanceData(function () {
@@ -82,10 +93,10 @@ public function testNodePageCoolCache(): void {
    * Warm here means that 'global' site caches and route-specific caches are
    * warm but caches specific to this particular node/path are not.
    */
-  public function testNodePageWarmCache(): void {
+  protected function testNodePageWarmCache(): void {
     // First of all visit the node page to ensure the image style exists.
     $this->drupalGet('node/1');
-    $this->rebuildAll();
+    $this->clearCaches();
     // Now visit a different node page to warm non-path-specific caches.
     $this->drupalGet('node/2');
     $this->collectPerformanceData(function () {
@@ -94,4 +105,13 @@ public function testNodePageWarmCache(): void {
     $this->assertSession()->pageTextContains('quiche');
   }
 
+  /**
+   * Clear caches.
+   */
+  protected function clearCaches(): void {
+    foreach (Cache::getBins() as $bin) {
+      $bin->deleteAll();
+    }
+  }
+
 }
diff --git a/core/profiles/demo_umami/tests/src/FunctionalJavascript/PerformanceTest.php b/core/profiles/demo_umami/tests/src/FunctionalJavascript/PerformanceTest.php
deleted file mode 100644
index aec2ec9115221afa5ed9620cfff9e14742d30a20..0000000000000000000000000000000000000000
--- a/core/profiles/demo_umami/tests/src/FunctionalJavascript/PerformanceTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Drupal\Tests\demo_umami\FunctionalJavascript;
-
-use Drupal\FunctionalJavascriptTests\PerformanceTestBase;
-
-/**
- * Tests demo_umami profile performance.
- *
- * @group Performance
- */
-class PerformanceTest extends PerformanceTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected $profile = 'demo_umami';
-
-  /**
-   * Just load the front page.
-   */
-  public function testPagesAnonymous(): void {
-    $performance_data = $this->collectPerformanceData(function () {
-      $this->drupalGet('<front>');
-    });
-    $this->assertSession()->pageTextContains('Umami');
-    $this->assertSame(2, $performance_data->getStylesheetCount());
-    $this->assertSame(1, $performance_data->getScriptCount());
-
-    $performance_data = $this->collectPerformanceData(function () {
-      $this->drupalGet('node/1');
-    });
-    $this->assertSame(2, $performance_data->getStylesheetCount());
-    $this->assertSame(1, $performance_data->getScriptCount());
-  }
-
-  /**
-   * Load the front page as a user with access to Toolbar.
-   */
-  public function testFrontPagePerformance(): void {
-    $admin_user = $this->drupalCreateUser(['access toolbar']);
-    $this->drupalLogin($admin_user);
-    $performance_data = $this->collectPerformanceData(function () {
-      $this->drupalGet('<front>');
-    });
-    $this->assertSession()->pageTextContains('Umami');
-    $this->assertSame(2, $performance_data->getStylesheetCount());
-    $this->assertSame(2, $performance_data->getScriptCount());
-  }
-
-}
diff --git a/core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php b/core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php
index 4aadd45d5f4f062b581eafee1207e807ac8b5b22..543540dbc84ac92cd5f677edb90212259fe7ba87 100644
--- a/core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php
+++ b/core/profiles/standard/tests/src/FunctionalJavascript/StandardPerformanceTest.php
@@ -16,6 +16,7 @@
  * Stark is used as the default theme so that this test is not Olivero specific.
  *
  * @group Common
+ * @group #slow
  * @requires extension apcu
  */
 class StandardPerformanceTest extends PerformanceTestBase {
diff --git a/core/tests/Drupal/Tests/PerformanceTestTrait.php b/core/tests/Drupal/Tests/PerformanceTestTrait.php
index 014fac12d5fa71f764a7e8e70f3a244918006b05..ed85aafb78d07c6d1d703bd6c30afdbdfca363cb 100644
--- a/core/tests/Drupal/Tests/PerformanceTestTrait.php
+++ b/core/tests/Drupal/Tests/PerformanceTestTrait.php
@@ -111,7 +111,6 @@ public function collectPerformanceData(callable $callable, ?string $service_name
 
     $session = $this->getSession();
     $session->getDriver()->getWebDriverSession()->log('performance');
-    $collection = \Drupal::keyValue('performance_test');
     $collection->deleteAll();
     $return = $callable();
     $performance_data = $this->processChromeDriverPerformanceLogs($service_name);