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);