Skip to content
Snippets Groups Projects
Verified Commit fd1bcbe5 authored by Théodore Biadala's avatar Théodore Biadala
Browse files

Issue #3463351 by catch, heddn: Consolidate Umami performance tests

(cherry picked from commit 27fcad90)
parent be2804a4
Branches
Tags
5 merge requests!122353526426-warning-for-missing,!11958Issue #3490507 by alexpott, smustgrave: Fix bogus mocking in...,!11769Issue #3517987: Add option to contextual filters to encode slashes in query parameter.,!11185Issue #3477324 by andypost, alexpott: Fix usage of str_getcsv() and fgetcsv() for PHP 8.4,!9944Issue #3483353: Consider making the createCopy config action optionally fail...
Pipeline #234158 passed with warnings
Pipeline: drupal

#234162

    ...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
    namespace Drupal\Tests\demo_umami\FunctionalJavascript; namespace Drupal\Tests\demo_umami\FunctionalJavascript;
    use Drupal\Core\Cache\Cache;
    use Drupal\FunctionalJavascriptTests\PerformanceTestBase; use Drupal\FunctionalJavascriptTests\PerformanceTestBase;
    /** /**
    ...@@ -20,10 +21,19 @@ class OpenTelemetryFrontPagePerformanceTest extends PerformanceTestBase { ...@@ -20,10 +21,19 @@ class OpenTelemetryFrontPagePerformanceTest extends PerformanceTestBase {
    */ */
    protected $profile = 'demo_umami'; 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. * 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 // @todo Chromedriver doesn't collect tracing performance logs for the very
    // first request in a test, so warm it up. // first request in a test, so warm it up.
    // https://www.drupal.org/project/drupal/issues/3379750 // https://www.drupal.org/project/drupal/issues/3379750
    ...@@ -40,7 +50,7 @@ public function testFrontPageColdCache(): void { ...@@ -40,7 +50,7 @@ public function testFrontPageColdCache(): void {
    * *
    * Hot here means that all possible caches are warmed. * 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 // Request the page twice so that asset aggregates and image derivatives are
    // definitely cached in the browser cache. The first response builds the // definitely cached in the browser cache. The first response builds the
    // file and serves from PHP with private, no-store headers. The second // file and serves from PHP with private, no-store headers. The second
    ...@@ -76,10 +86,10 @@ public function testFrontPageHotCache(): void { ...@@ -76,10 +86,10 @@ public function testFrontPageHotCache(): void {
    * Cool here means that 'global' site caches are warm but anything * Cool here means that 'global' site caches are warm but anything
    * specific to the front page is cold. * 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. // First of all visit the front page to ensure the image style exists.
    $this->drupalGet('<front>'); $this->drupalGet('<front>');
    $this->rebuildAll(); $this->clearCaches();
    // Now visit a different page to warm non-route-specific caches. // Now visit a different page to warm non-route-specific caches.
    $this->drupalGet('user/login'); $this->drupalGet('user/login');
    $this->collectPerformanceData(function () { $this->collectPerformanceData(function () {
    ...@@ -87,4 +97,13 @@ public function testFrontPageCoolCache(): void { ...@@ -87,4 +97,13 @@ public function testFrontPageCoolCache(): void {
    }, 'umamiFrontPageCoolCache'); }, 'umamiFrontPageCoolCache');
    } }
    /**
    * Clear caches.
    */
    protected function clearCaches(): void {
    foreach (Cache::getBins() as $bin) {
    $bin->deleteAll();
    }
    }
    } }
    ...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
    namespace Drupal\Tests\demo_umami\FunctionalJavascript; namespace Drupal\Tests\demo_umami\FunctionalJavascript;
    use Drupal\Core\Cache\Cache;
    use Drupal\FunctionalJavascriptTests\PerformanceTestBase; use Drupal\FunctionalJavascriptTests\PerformanceTestBase;
    /** /**
    ...@@ -20,10 +21,20 @@ class OpenTelemetryNodePagePerformanceTest extends PerformanceTestBase { ...@@ -20,10 +21,20 @@ class OpenTelemetryNodePagePerformanceTest extends PerformanceTestBase {
    */ */
    protected $profile = 'demo_umami'; 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. * 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 // @todo Chromedriver doesn't collect tracing performance logs for the very
    // first request in a test, so warm it up. // first request in a test, so warm it up.
    // https://www.drupal.org/project/drupal/issues/3379750 // https://www.drupal.org/project/drupal/issues/3379750
    ...@@ -40,7 +51,7 @@ public function testNodePageColdCache(): void { ...@@ -40,7 +51,7 @@ public function testNodePageColdCache(): void {
    * *
    * Hot here means that all possible caches are warmed. * 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 // Request the page twice so that asset aggregates are definitely cached in
    // the browser cache. // the browser cache.
    $this->drupalGet('node/1'); $this->drupalGet('node/1');
    ...@@ -64,10 +75,10 @@ public function testNodePageHotCache(): void { ...@@ -64,10 +75,10 @@ public function testNodePageHotCache(): void {
    * Cool here means that 'global' site caches are warm but anything * Cool here means that 'global' site caches are warm but anything
    * specific to the route or path is cold. * 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. // First of all visit the node page to ensure the image style exists.
    $this->drupalGet('node/1'); $this->drupalGet('node/1');
    $this->rebuildAll(); $this->clearCaches();
    // Now visit a non-node page to warm non-route-specific caches. // Now visit a non-node page to warm non-route-specific caches.
    $this->drupalGet('user/login'); $this->drupalGet('user/login');
    $this->collectPerformanceData(function () { $this->collectPerformanceData(function () {
    ...@@ -82,10 +93,10 @@ public function testNodePageCoolCache(): void { ...@@ -82,10 +93,10 @@ public function testNodePageCoolCache(): void {
    * Warm here means that 'global' site caches and route-specific caches are * Warm here means that 'global' site caches and route-specific caches are
    * warm but caches specific to this particular node/path are not. * 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. // First of all visit the node page to ensure the image style exists.
    $this->drupalGet('node/1'); $this->drupalGet('node/1');
    $this->rebuildAll(); $this->clearCaches();
    // Now visit a different node page to warm non-path-specific caches. // Now visit a different node page to warm non-path-specific caches.
    $this->drupalGet('node/2'); $this->drupalGet('node/2');
    $this->collectPerformanceData(function () { $this->collectPerformanceData(function () {
    ...@@ -94,4 +105,13 @@ public function testNodePageWarmCache(): void { ...@@ -94,4 +105,13 @@ public function testNodePageWarmCache(): void {
    $this->assertSession()->pageTextContains('quiche'); $this->assertSession()->pageTextContains('quiche');
    } }
    /**
    * Clear caches.
    */
    protected function clearCaches(): void {
    foreach (Cache::getBins() as $bin) {
    $bin->deleteAll();
    }
    }
    } }
    <?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());
    }
    }
    ...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
    * Stark is used as the default theme so that this test is not Olivero specific. * Stark is used as the default theme so that this test is not Olivero specific.
    * *
    * @group Common * @group Common
    * @group #slow
    * @requires extension apcu * @requires extension apcu
    */ */
    class StandardPerformanceTest extends PerformanceTestBase { class StandardPerformanceTest extends PerformanceTestBase {
    ......
    ...@@ -111,7 +111,6 @@ public function collectPerformanceData(callable $callable, ?string $service_name ...@@ -111,7 +111,6 @@ public function collectPerformanceData(callable $callable, ?string $service_name
    $session = $this->getSession(); $session = $this->getSession();
    $session->getDriver()->getWebDriverSession()->log('performance'); $session->getDriver()->getWebDriverSession()->log('performance');
    $collection = \Drupal::keyValue('performance_test');
    $collection->deleteAll(); $collection->deleteAll();
    $return = $callable(); $return = $callable();
    $performance_data = $this->processChromeDriverPerformanceLogs($service_name); $performance_data = $this->processChromeDriverPerformanceLogs($service_name);
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment