class OpenTelemetryNodePagePerformanceTest
Tests demo_umami profile performance.
Attributes
#[Group('OpenTelemetry')]
#[Group('#slow')]
#[RequiresPhpExtension('apcu')]
#[RunTestsInSeparateProcesses]
Hierarchy
- class \Drupal\Tests\BrowserTestBase uses \Drupal\Core\Test\FunctionalTestSetupTrait, \Drupal\Tests\UiHelperTrait, \Drupal\Core\Test\TestSetupTrait, \Drupal\Tests\block\Traits\BlockCreationTrait, \Drupal\Tests\RandomGeneratorTrait, \Drupal\Tests\node\Traits\NodeCreationTrait, \Drupal\Tests\node\Traits\ContentTypeCreationTrait, \Drupal\Tests\ConfigTestTrait, \Drupal\Tests\TestRequirementsTrait, \Drupal\Tests\user\Traits\UserCreationTrait, \Drupal\Tests\XdebugRequestTrait, \Drupal\Tests\PhpUnitCompatibilityTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait, \Drupal\Tests\ExtensionListTestTrait extends \PHPUnit\Framework\TestCase
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase extends \Drupal\Tests\BrowserTestBase
- class \Drupal\FunctionalJavascriptTests\PerformanceTestBase uses \Drupal\Tests\PerformanceTestTrait extends \Drupal\FunctionalJavascriptTests\WebDriverTestBase
- class \Drupal\Tests\demo_umami\FunctionalJavascript\OpenTelemetryNodePagePerformanceTest extends \Drupal\FunctionalJavascriptTests\PerformanceTestBase
- class \Drupal\FunctionalJavascriptTests\PerformanceTestBase uses \Drupal\Tests\PerformanceTestTrait extends \Drupal\FunctionalJavascriptTests\WebDriverTestBase
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase extends \Drupal\Tests\BrowserTestBase
Expanded class hierarchy of OpenTelemetryNodePagePerformanceTest
File
-
core/
profiles/ demo_umami/ tests/ src/ FunctionalJavascript/ OpenTelemetryNodePagePerformanceTest.php, line 17
Namespace
Drupal\Tests\demo_umami\FunctionalJavascriptView source
class OpenTelemetryNodePagePerformanceTest extends PerformanceTestBase {
/**
* {@inheritdoc}
*/
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.
*/
protected function testNodePageColdCache() : void {
// Request the node page twice then clear caches, this allows asset
// aggregate requests to complete so they are excluded from the performance
// test itself. Including the asset aggregates would lead to
// a non-deterministic test since they happen in parallel and therefore post
// response tasks run in different orders each time.
$this->drupalGet('node/1');
// Allow time for image style and aggregate requests to finish.
sleep(2);
$this->drupalGet('node/1');
$this->clearCaches();
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node/1');
}, 'umamiNodePageColdCache');
$this->assertSession()
->pageTextContains('quiche');
$expected = [
'QueryCount' => 345,
'CacheSetCount' => 361,
'CacheDeleteCount' => 0,
'CacheTagLookupQueryCount' => 26,
'CacheTagInvalidationCount' => 0,
'ScriptCount' => 1,
'ScriptBytes' => 12000,
'StylesheetCount' => 2,
'StylesheetBytes' => 40800,
];
$this->assertMetrics($expected, $performance_data);
}
/**
* Logs node page tracing data with a hot cache.
*
* Hot here means that all possible caches are warmed.
*/
protected function testNodePageHotCache() : void {
// Request the page twice so that asset aggregates are definitely cached in
// the browser cache.
$this->drupalGet('node/1');
$this->drupalGet('node/1');
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node/1');
}, 'umamiNodePageHotCache');
$this->assertSession()
->pageTextContains('quiche');
$expected = [
'QueryCount' => 0,
'CacheGetCount' => 1,
'CacheSetCount' => 0,
'CacheDeleteCount' => 0,
'CacheTagInvalidationCount' => 0,
'CacheTagLookupQueryCount' => 1,
'ScriptCount' => 1,
'ScriptBytes' => 12000,
'StylesheetCount' => 2,
'StylesheetBytes' => 40800,
];
$this->assertMetrics($expected, $performance_data);
}
/**
* Logs node/1 tracing data with a cool cache.
*
* Cool here means that 'global' site caches are warm but anything
* specific to the route or path is cold.
*/
protected function testNodePageCoolCache() : void {
// First of all visit the node page to ensure the image style exists.
$this->drupalGet('node/1');
$this->clearCaches();
// Now visit a non-node page to warm non-route-specific caches.
$this->drupalGet('user/login');
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node/1');
}, 'umamiNodePageCoolCache');
$this->assertSession()
->pageTextContains('quiche');
$expected = [
'QueryCount' => 110,
'CacheGetCount' => 207,
'CacheSetCount' => 64,
'CacheDeleteCount' => 0,
'CacheTagInvalidationCount' => 0,
'CacheTagLookupQueryCount' => 22,
'ScriptCount' => 1,
'ScriptBytes' => 12000,
'StylesheetCount' => 2,
'StylesheetBytes' => 40800,
];
$this->assertMetrics($expected, $performance_data);
}
/**
* Log node/1 tracing data with a warm cache.
*
* Warm here means that 'global' site caches and route-specific caches are
* warm but caches specific to this particular node/path are not.
*/
protected function testNodePageWarmCache() : void {
// First of all visit the node page to ensure the image style exists.
$this->drupalGet('node/1');
// Allow time for the image style and asset aggregate requests to finish.
sleep(1);
$this->clearCaches();
// Now visit a different node page to warm non-path-specific caches.
$this->drupalGet('node/2');
sleep(1);
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node/1');
}, 'umamiNodePageWarmCache');
$this->assertSession()
->pageTextContains('quiche');
// Check the actual queries so that if a change simultaneously adds and
// removes a query the change is detected.
$expected_queries = [
'SELECT "base_table"."id" AS "id", "base_table"."path" AS "path", "base_table"."alias" AS "alias", "base_table"."langcode" AS "langcode" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."alias" LIKE "/recipes/deep-mediterranean-quiche" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "name", "route", "fit" FROM "router" WHERE "pattern_outline" IN ( "/node/1", "/node/%", "/node" ) AND "number_parts" >= 2',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_uid" AS "revision_uid", "revision"."revision_timestamp" AS "revision_timestamp", "revision"."revision_log" AS "revision_log", "revision"."revision_default" AS "revision_default", "base"."nid" AS "nid", "base"."type" AS "type", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "node" "base" INNER JOIN "node_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."nid" IN (1)',
'SELECT "revision".* FROM "node_field_revision" "revision" WHERE ("revision"."nid" IN (1)) AND ("revision"."vid" IN ("76")) ORDER BY "revision"."nid" ASC',
'SELECT "t".* FROM "node__field_cooking_time" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_difficulty" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_ingredients" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_media_image" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_number_of_servings" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_preparation_time" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_recipe_category" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_recipe_instruction" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_summary" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_tags" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__layout_builder__layout" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "revision"."revision_id" AS "revision_id", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."tid" AS "tid", "base"."vid" AS "vid", "base"."uuid" AS "uuid", CASE "base"."revision_id" WHEN "revision"."revision_id" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "taxonomy_term_data" "base" INNER JOIN "taxonomy_term_revision" "revision" ON "revision"."revision_id" = "base"."revision_id" WHERE "base"."tid" IN (31)',
'SELECT "revision".*, "data"."weight" AS "weight" FROM "taxonomy_term_field_revision" "revision" LEFT OUTER JOIN "taxonomy_term_field_data" "data" ON ("revision"."tid" = "data"."tid" AND "revision"."langcode" = "data"."langcode") WHERE ("revision"."tid" IN (31)) AND ("revision"."revision_id" IN ("31")) ORDER BY "revision"."tid" ASC',
'SELECT "t".* FROM "taxonomy_term__parent" "t" WHERE ("entity_id" IN (31)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "revision"."revision_id" AS "revision_id", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."tid" AS "tid", "base"."vid" AS "vid", "base"."uuid" AS "uuid", CASE "base"."revision_id" WHEN "revision"."revision_id" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "taxonomy_term_data" "base" INNER JOIN "taxonomy_term_revision" "revision" ON "revision"."revision_id" = "base"."revision_id" WHERE "base"."tid" IN (22)',
'SELECT "revision".*, "data"."weight" AS "weight" FROM "taxonomy_term_field_revision" "revision" LEFT OUTER JOIN "taxonomy_term_field_data" "data" ON ("revision"."tid" = "data"."tid" AND "revision"."langcode" = "data"."langcode") WHERE ("revision"."tid" IN (22)) AND ("revision"."revision_id" IN ("22")) ORDER BY "revision"."tid" ASC',
'SELECT "t".* FROM "taxonomy_term__parent" "t" WHERE ("entity_id" IN (22)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."mid" AS "mid", "base"."bundle" AS "bundle", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "media" "base" INNER JOIN "media_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."mid" IN (1)',
'SELECT "revision".* FROM "media_field_revision" "revision" WHERE ("revision"."mid" IN (1)) AND ("revision"."vid" IN ("1")) ORDER BY "revision"."mid" ASC',
'SELECT "t".* FROM "media__field_media_image" "t" WHERE ("entity_id" IN (1)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "node_field_data"."created" AS "node_field_data_created", "node_field_data"."nid" AS "nid", "node_field_data"."langcode" AS "node_field_data_langcode" FROM "node_field_data" "node_field_data" LEFT JOIN "node__field_recipe_category" "node__field_recipe_category" ON node_field_data.nid = node__field_recipe_category.entity_id AND node__field_recipe_category.deleted = 0 WHERE (((node_field_data.nid != "1" OR node_field_data.nid IS NULL)) AND ((node__field_recipe_category.field_recipe_category_target_id IN("31", "22", "13")))) AND (("node_field_data"."status" = 1) AND ("node_field_data"."type" IN ("recipe")) AND ("node_field_data"."langcode" IN ("en"))) ORDER BY "node_field_data_created" DESC LIMIT 4 OFFSET 0',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_uid" AS "revision_uid", "revision"."revision_timestamp" AS "revision_timestamp", "revision"."revision_log" AS "revision_log", "revision"."revision_default" AS "revision_default", "base"."nid" AS "nid", "base"."type" AS "type", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "node" "base" INNER JOIN "node_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."nid" IN (10, 7, 6, 3)',
'SELECT "revision".* FROM "node_field_revision" "revision" WHERE ("revision"."nid" IN (3, 6, 7, 10)) AND ("revision"."vid" IN ("72", "66", "64", "58")) ORDER BY "revision"."nid" ASC',
'SELECT "t".* FROM "node__field_cooking_time" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_difficulty" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_ingredients" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_media_image" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_number_of_servings" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_preparation_time" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_recipe_category" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_recipe_instruction" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_summary" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__field_tags" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node__layout_builder__layout" "t" WHERE ("entity_id" IN (3, 6, 7, 10)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/taxonomy/term/31" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/taxonomy/term/22" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/taxonomy/term/13" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base"."fid" AS "fid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode", "base"."uid" AS "uid", "base"."filename" AS "filename", "base"."uri" AS "uri", "base"."filemime" AS "filemime", "base"."filesize" AS "filesize", "base"."status" AS "status", "base"."created" AS "created", "base"."changed" AS "changed" FROM "file_managed" "base" WHERE "base"."fid" IN (1)',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."mid" AS "mid", "base"."bundle" AS "bundle", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "media" "base" INNER JOIN "media_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."mid" IN (21)',
'SELECT "revision".* FROM "media_field_revision" "revision" WHERE ("revision"."mid" IN (21)) AND ("revision"."vid" IN ("21")) ORDER BY "revision"."mid" ASC',
'SELECT "t".* FROM "media__field_media_image" "t" WHERE ("entity_id" IN (21)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node/10" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base"."fid" AS "fid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode", "base"."uid" AS "uid", "base"."filename" AS "filename", "base"."uri" AS "uri", "base"."filemime" AS "filemime", "base"."filesize" AS "filesize", "base"."status" AS "status", "base"."created" AS "created", "base"."changed" AS "changed" FROM "file_managed" "base" WHERE "base"."fid" IN (41)',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."mid" AS "mid", "base"."bundle" AS "bundle", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "media" "base" INNER JOIN "media_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."mid" IN (7)',
'SELECT "revision".* FROM "media_field_revision" "revision" WHERE ("revision"."mid" IN (7)) AND ("revision"."vid" IN ("7")) ORDER BY "revision"."mid" ASC',
'SELECT "t".* FROM "media__field_media_image" "t" WHERE ("entity_id" IN (7)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node/7" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base"."fid" AS "fid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode", "base"."uid" AS "uid", "base"."filename" AS "filename", "base"."uri" AS "uri", "base"."filemime" AS "filemime", "base"."filesize" AS "filesize", "base"."status" AS "status", "base"."created" AS "created", "base"."changed" AS "changed" FROM "file_managed" "base" WHERE "base"."fid" IN (13)',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."mid" AS "mid", "base"."bundle" AS "bundle", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "media" "base" INNER JOIN "media_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."mid" IN (6)',
'SELECT "revision".* FROM "media_field_revision" "revision" WHERE ("revision"."mid" IN (6)) AND ("revision"."vid" IN ("6")) ORDER BY "revision"."mid" ASC',
'SELECT "t".* FROM "media__field_media_image" "t" WHERE ("entity_id" IN (6)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node/6" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base"."fid" AS "fid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode", "base"."uid" AS "uid", "base"."filename" AS "filename", "base"."uri" AS "uri", "base"."filemime" AS "filemime", "base"."filesize" AS "filesize", "base"."status" AS "status", "base"."created" AS "created", "base"."changed" AS "changed" FROM "file_managed" "base" WHERE "base"."fid" IN (11)',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_user" AS "revision_user", "revision"."revision_created" AS "revision_created", "revision"."revision_log_message" AS "revision_log_message", "revision"."revision_default" AS "revision_default", "base"."mid" AS "mid", "base"."bundle" AS "bundle", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "media" "base" INNER JOIN "media_revision" "revision" ON "revision"."vid" = "base"."vid" WHERE "base"."mid" IN (3)',
'SELECT "revision".* FROM "media_field_revision" "revision" WHERE ("revision"."mid" IN (3)) AND ("revision"."vid" IN ("3")) ORDER BY "revision"."mid" ASC',
'SELECT "t".* FROM "media__field_media_image" "t" WHERE ("entity_id" IN (3)) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node/3" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base"."fid" AS "fid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode", "base"."uid" AS "uid", "base"."filename" AS "filename", "base"."uri" AS "uri", "base"."filemime" AS "filemime", "base"."filesize" AS "filesize", "base"."status" AS "status", "base"."created" AS "created", "base"."changed" AS "changed" FROM "file_managed" "base" WHERE "base"."fid" IN (5)',
'SELECT "name", "value" FROM "key_value" WHERE "name" IN ( "theme:umami" ) AND "collection" = "config.entity.key_store.block"',
'SELECT "base_table"."path" AS "path", "base_table"."alias" AS "alias" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node/1" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("es", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "menu_tree"."menu_name" AS "menu_name", "menu_tree"."route_name" AS "route_name", "menu_tree"."route_parameters" AS "route_parameters", "menu_tree"."url" AS "url", "menu_tree"."title" AS "title", "menu_tree"."description" AS "description", "menu_tree"."parent" AS "parent", "menu_tree"."weight" AS "weight", "menu_tree"."options" AS "options", "menu_tree"."expanded" AS "expanded", "menu_tree"."enabled" AS "enabled", "menu_tree"."provider" AS "provider", "menu_tree"."metadata" AS "metadata", "menu_tree"."class" AS "class", "menu_tree"."form_class" AS "form_class", "menu_tree"."id" AS "id" FROM "menu_tree" "menu_tree" WHERE ("route_name" = "entity.node.canonical") AND ("route_param_key" = "node=1") AND ("menu_name" = "account") ORDER BY "depth" ASC, "weight" ASC, "id" ASC',
'SELECT "menu_tree"."menu_name" AS "menu_name", "menu_tree"."route_name" AS "route_name", "menu_tree"."route_parameters" AS "route_parameters", "menu_tree"."url" AS "url", "menu_tree"."title" AS "title", "menu_tree"."description" AS "description", "menu_tree"."parent" AS "parent", "menu_tree"."weight" AS "weight", "menu_tree"."options" AS "options", "menu_tree"."expanded" AS "expanded", "menu_tree"."enabled" AS "enabled", "menu_tree"."provider" AS "provider", "menu_tree"."metadata" AS "metadata", "menu_tree"."class" AS "class", "menu_tree"."form_class" AS "form_class", "menu_tree"."id" AS "id" FROM "menu_tree" "menu_tree" WHERE ("route_name" = "entity.node.canonical") AND ("route_param_key" = "node=1") AND ("menu_name" = "main") ORDER BY "depth" ASC, "weight" ASC, "id" ASC',
'SELECT "menu_tree"."menu_name" AS "menu_name", "menu_tree"."route_name" AS "route_name", "menu_tree"."route_parameters" AS "route_parameters", "menu_tree"."url" AS "url", "menu_tree"."title" AS "title", "menu_tree"."description" AS "description", "menu_tree"."parent" AS "parent", "menu_tree"."weight" AS "weight", "menu_tree"."options" AS "options", "menu_tree"."expanded" AS "expanded", "menu_tree"."enabled" AS "enabled", "menu_tree"."provider" AS "provider", "menu_tree"."metadata" AS "metadata", "menu_tree"."class" AS "class", "menu_tree"."form_class" AS "form_class", "menu_tree"."id" AS "id" FROM "menu_tree" "menu_tree" WHERE ("route_name" = "entity.node.canonical") AND ("route_param_key" = "node=1") AND ("menu_name" = "footer") ORDER BY "depth" ASC, "weight" ASC, "id" ASC',
'SELECT "base_table"."id" AS "id", "base_table"."path" AS "path", "base_table"."alias" AS "alias", "base_table"."langcode" AS "langcode" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."alias" LIKE "/recipes" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base_table"."id" AS "id", "base_table"."path" AS "path", "base_table"."alias" AS "alias", "base_table"."langcode" AS "langcode" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."alias" LIKE "/node" ESCAPE \'\\\\\') AND ("base_table"."langcode" IN ("en", "und")) ORDER BY "base_table"."langcode" ASC, "base_table"."id" DESC',
'SELECT "base_table"."vid" AS "vid", "base_table"."nid" AS "nid" FROM "node_revision" "base_table" INNER JOIN "node_field_data" "node_field_data" ON "node_field_data"."nid" = "base_table"."nid" INNER JOIN "node_field_revision" "node_field_revision" ON "node_field_revision"."vid" = "base_table"."vid" AND "node_field_revision"."langcode" = "en" WHERE ("node_field_data"."nid" = "1") AND ("node_field_revision"."revision_translation_affected" = 1) ORDER BY "base_table"."vid" DESC LIMIT 1 OFFSET 0',
'SELECT "revision"."vid" AS "vid", "revision"."langcode" AS "langcode", "revision"."revision_uid" AS "revision_uid", "revision"."revision_timestamp" AS "revision_timestamp", "revision"."revision_log" AS "revision_log", "revision"."revision_default" AS "revision_default", "base"."nid" AS "nid", "base"."type" AS "type", "base"."uuid" AS "uuid", CASE "base"."vid" WHEN "revision"."vid" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "node" "base" INNER JOIN "node_revision" "revision" ON "revision"."nid" = "base"."nid" AND "revision"."vid" IN (75)',
'SELECT "revision".* FROM "node_field_revision" "revision" WHERE ("revision"."vid" IN (75)) AND ("revision"."vid" IN ("75")) ORDER BY "revision"."vid" ASC',
'SELECT "t".* FROM "node_revision__field_cooking_time" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_difficulty" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_ingredients" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_media_image" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_number_of_servings" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_preparation_time" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_recipe_category" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_recipe_instruction" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_summary" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__field_tags" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "t".* FROM "node_revision__layout_builder__layout" "t" WHERE ("revision_id" IN ("75")) AND ("deleted" = 0) AND ("langcode" IN ("en", "es", "und", "zxx")) ORDER BY "delta" ASC',
'SELECT "base_table"."vid" AS "vid", "base_table"."nid" AS "nid" FROM "node_revision" "base_table" INNER JOIN (SELECT "subquery_base_table"."nid" AS "nid", MAX(subquery_base_table.vid) AS "maximum_revision_id" FROM "node_revision" "subquery_base_table" WHERE "nid" = "1" GROUP BY "subquery_base_table"."nid") "sq_base_table" ON base_table.nid = sq_base_table.nid AND base_table.vid = sq_base_table.maximum_revision_id INNER JOIN "node_field_data" "node_field_data" ON "node_field_data"."nid" = "base_table"."nid" WHERE "node_field_data"."nid" = "1"',
'SELECT "base_table"."revision_id" AS "revision_id", "base_table"."id" AS "id" FROM "content_moderation_state_revision" "base_table" INNER JOIN "content_moderation_state_field_revision" "content_moderation_state_field_revision" ON "content_moderation_state_field_revision"."revision_id" = "base_table"."revision_id" WHERE ("content_moderation_state_field_revision"."content_entity_type_id" LIKE "node" ESCAPE \'\\\\\') AND ("content_moderation_state_field_revision"."content_entity_id" = "1") AND ("content_moderation_state_field_revision"."content_entity_revision_id" = "76") AND ("content_moderation_state_field_revision"."workflow" = "editorial") AND ("content_moderation_state_field_revision"."langcode" = "en") ORDER BY "base_table"."revision_id" DESC',
'SELECT "revision"."revision_id" AS "revision_id", "revision"."langcode" AS "langcode", "revision"."revision_default" AS "revision_default", "base"."id" AS "id", "base"."uuid" AS "uuid", CASE "base"."revision_id" WHEN "revision"."revision_id" THEN 1 ELSE 0 END AS "isDefaultRevision" FROM "content_moderation_state" "base" INNER JOIN "content_moderation_state_revision" "revision" ON "revision"."id" = "base"."id" AND "revision"."revision_id" IN (76)',
'SELECT "revision".* FROM "content_moderation_state_field_revision" "revision" WHERE ("revision"."revision_id" IN (76)) AND ("revision"."revision_id" IN ("76")) ORDER BY "revision"."revision_id" ASC',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("theme_registry:runtime:umami:Drupal\\Core\\Utility\\ThemeRegistry", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "theme_registry:runtime:umami:Drupal\\Core\\Utility\\ThemeRegistry") AND ("value" = "LOCK_ID")',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("active-trail:route:entity.node.canonical:route_parameters:a:1:{s:4:"node";s:1:"1";}:Drupal\\Core\\Cache\\CacheCollector", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "active-trail:route:entity.node.canonical:route_parameters:a:1:{s:4:"node";s:1:"1";}:Drupal\\Core\\Cache\\CacheCollector") AND ("value" = "LOCK_ID")',
];
$recorded_queries = $performance_data->getQueries();
$this->assertSame($expected_queries, $recorded_queries);
$expected = [
'QueryCount' => 91,
'CacheGetCount' => 200,
'CacheGetCountByBin' => [
'page' => 1,
'config' => 66,
'bootstrap' => 12,
'discovery' => 67,
'data' => 6,
'entity' => 21,
'dynamic_page_cache' => 1,
'render' => 21,
'default' => 3,
'menu' => 2,
],
'CacheSetCount' => 42,
'CacheDeleteCount' => 0,
'CacheTagInvalidationCount' => 0,
'CacheTagLookupQueryCount' => 22,
'CacheTagGroupedLookups' => [
[
'entity_types',
'route_match',
'access_policies',
'routes',
'router',
'entity_field_info',
'entity_bundles',
'local_task',
'library_info',
],
[
'config:core.extension',
'views_data',
],
[
'config:views.view.related_recipes',
'node:10',
'node:3',
'node:6',
'node:7',
'node_list',
],
[
'breakpoints',
],
[
'config:core.entity_view_display.media.image.responsive_3x2',
'config:image.style.large_3_2_2x',
'config:image.style.large_3_2_768x512',
'config:image.style.medium_3_2_2x',
'config:image.style.medium_3_2_600x400',
'config:responsive_image.styles.3_2_image',
'media:1',
'media_view',
'rendered',
],
[
'media:21',
],
[
'config:core.entity_view_display.node.recipe.card',
'node_view',
'user:6',
],
[
'media:7',
],
[
'media:6',
],
[
'media:3',
],
[
'config:core.entity_view_display.node.recipe.full',
'config:filter.format.basic_html',
'node:1',
'taxonomy_term:13',
'taxonomy_term:22',
'taxonomy_term:31',
],
[
'CACHE_MISS_IF_UNCACHEABLE_HTTP_METHOD:form',
'block_view',
'config:block.block.umami_search',
],
[
'config:block.block.umami_branding',
'config:system.site',
],
[
'config:block.block.umami_messages',
],
[
'config:block.block.umami_help',
],
[
'block_content:1',
'block_content:2',
'config:block.block.umami_account_menu',
'config:block.block.umami_banner_home',
'config:block.block.umami_banner_recipes',
'config:block.block.umami_breadcrumbs',
'config:block.block.umami_content',
'config:block.block.umami_disclaimer',
'config:block.block.umami_footer',
'config:block.block.umami_footer_promo',
'config:block.block.umami_languageswitcher',
'config:block.block.umami_local_tasks',
'config:block.block.umami_main_menu',
'config:block.block.umami_page_title',
'config:block.block.umami_views_block__articles_aside_block_1',
'config:block.block.umami_views_block__promoted_items_block_1',
'config:block.block.umami_views_block__recipe_collections_block',
'config:block_list',
'config:configurable_language_list',
'http_response',
],
[
'config:system.menu.footer',
],
[
'config:system.menu.account',
'block_content_view',
'config:core.entity_view_display.block_content.footer_promo_block.default',
'config:core.entity_view_display.media.image.medium_8_7',
'config:image.style.medium_8_7',
'file:37',
'media:19',
'config:system.menu.main',
'config:views.view.recipe_collections',
'taxonomy_term:1',
'taxonomy_term:10',
'taxonomy_term:11',
'taxonomy_term:12',
'taxonomy_term:14',
'taxonomy_term:15',
'taxonomy_term:16',
'taxonomy_term:2',
'taxonomy_term:3',
'taxonomy_term:4',
'taxonomy_term:5',
'taxonomy_term:6',
'taxonomy_term:7',
'taxonomy_term:8',
'taxonomy_term:9',
'taxonomy_term_list',
],
[
'node:1:revisions',
],
[
'content_moderation_state:1:revisions',
],
[
'config:workflows.workflow.editorial',
],
[
'config:user.role.anonymous',
],
],
'ScriptCount' => 1,
'ScriptBytes' => 12000,
'StylesheetCount' => 2,
'StylesheetBytes' => 40500,
];
$this->assertMetrics($expected, $performance_data);
}
/**
* Clear caches.
*/
protected function clearCaches() : void {
foreach (Cache::getBins() as $bin) {
$bin->deleteAll();
}
}
}
Members
| Title Sort descending | Deprecated | Modifiers | Object type | Summary | Member alias | Overriden Title | Overrides |
|---|---|---|---|---|---|---|---|
| BlockCreationTrait::placeBlock | protected | function | Creates a block instance based on default settings. | Aliased as: drupalPlaceBlock | |||
| BodyFieldCreationTrait::createBodyField | protected | function | Creates a field of an body field storage on the specified bundle. | ||||
| BrowserHtmlDebugTrait::$htmlOutputBaseUrl | protected | property | The Base URI to use for links to the output files. | ||||
| BrowserHtmlDebugTrait::$htmlOutputClassName | protected | property | Class name for HTML output logging. | ||||
| BrowserHtmlDebugTrait::$htmlOutputCounter | protected | property | Counter for HTML output logging. | ||||
| BrowserHtmlDebugTrait::$htmlOutputCounterStorage | protected | property | Counter storage for HTML output logging. | ||||
| BrowserHtmlDebugTrait::$htmlOutputDirectory | protected | property | Directory name for HTML output logging. | ||||
| BrowserHtmlDebugTrait::$htmlOutputEnabled | protected | property | HTML output enabled. | ||||
| BrowserHtmlDebugTrait::$htmlOutputTestId | protected | property | HTML output test ID. | ||||
| BrowserHtmlDebugTrait::formatHtmlOutputHeaders | protected | function | Formats HTTP headers as string for HTML output logging. | ||||
| BrowserHtmlDebugTrait::getResponseLogHandler | protected | function | Provides a Guzzle middleware handler to log every response received. | ||||
| BrowserHtmlDebugTrait::htmlOutput | protected | function | Logs a HTML output message in a text file. | ||||
| BrowserHtmlDebugTrait::initBrowserOutputFile | protected | function | Creates the directory to store browser output. | ||||
| BrowserTestBase::$baseUrl | protected | property | The base URL. | ||||
| BrowserTestBase::$configImporter | protected | property | The config importer that can be used in a test. | ||||
| BrowserTestBase::$defaultTheme | protected | property | The theme to install as the default for testing. | 1543 | |||
| BrowserTestBase::$mink | protected | property | Mink session manager. | ||||
| BrowserTestBase::$minkDefaultDriverArgs | protected | property | Mink default driver params. | ||||
| BrowserTestBase::$originalShutdownCallbacks | protected | property | The original array of shutdown function callbacks. | ||||
| BrowserTestBase::$timeLimit | protected | property | Time limit in seconds for the test. | ||||
| BrowserTestBase::cleanupEnvironment | protected | function | Clean up the test environment. | ||||
| BrowserTestBase::config | protected | function | Configuration accessor for tests. Returns non-overridden configuration. | ||||
| BrowserTestBase::filePreDeleteCallback | public static | function | Ensures test files are deletable. | ||||
| BrowserTestBase::getDefaultDriverInstance | protected | function | Gets an instance of the default Mink driver. | ||||
| BrowserTestBase::getHttpClient | protected | function | Obtain the HTTP client for the system under test. | ||||
| BrowserTestBase::getOptions | Deprecated | protected | function | Helper function to get the options of select field. | |||
| BrowserTestBase::getSession | public | function | Returns Mink session. | ||||
| BrowserTestBase::getSessionCookies | protected | function | Get session cookies from current session. | ||||
| BrowserTestBase::getTestMethodCaller | protected | function | Retrieves the current calling line in the class under test. | Overrides BrowserHtmlDebugTrait::getTestMethodCaller | |||
| BrowserTestBase::installDrupal | public | function | Installs Drupal into the test site. | 2 | |||
| BrowserTestBase::registerSessions | protected | function | Registers additional Mink sessions. | ||||
| BrowserTestBase::setDebugDumpHandler | public static | function | Registers the dumper CLI handler when the DebugDump extension is enabled. | ||||
| BrowserTestBase::setUpAppRoot | protected | function | Sets up the root application path. | ||||
| BrowserTestBase::translatePostValues | protected | function | Transforms a nested array into a flat array suitable for submitForm(). | ||||
| BrowserTestBase::xpath | protected | function | Performs an xpath search on the contents of the internal browser. | ||||
| BrowserTestBase::__construct | public | function | 1 | ||||
| BrowserTestBase::__sleep | public | function | Prevents serializing any properties. | ||||
| ConfigTestTrait::configImporter | protected | function | Returns a ConfigImporter object to import test configuration. | ||||
| ConfigTestTrait::copyConfig | protected | function | Copies configuration objects from source storage to target storage. | ||||
| ContentTypeCreationTrait::createContentType | protected | function | Creates a custom content type based on default settings. | Aliased as: drupalCreateContentType | 1 | ||
| ExpectDeprecationTrait::expectDeprecation | public | function | Adds an expected deprecation. | ||||
| ExpectDeprecationTrait::setUpErrorHandler | public | function | Sets up the test error handler. | ||||
| ExpectDeprecationTrait::tearDownErrorHandler | public | function | Tears down the test error handler. | ||||
| ExtensionListTestTrait::getModulePath | protected | function | Gets the path for the specified module. | ||||
| ExtensionListTestTrait::getThemePath | protected | function | Gets the path for the specified theme. | ||||
| FunctionalTestSetupTrait::$apcuEnsureUniquePrefix | protected | property | The flag to set 'apcu_ensure_unique_prefix' setting. | 1 | |||
| FunctionalTestSetupTrait::$classLoader | protected | property | The class loader to use for installation and initialization of setup. | ||||
| FunctionalTestSetupTrait::$rootUser | protected | property | The "#1" admin user. | ||||
| FunctionalTestSetupTrait::$usesSuperUserAccessPolicy | protected | property | Set to TRUE to make user 1 a super user. | ||||
| FunctionalTestSetupTrait::doInstall | protected | function | Execute the non-interactive installer. | 1 | |||
| FunctionalTestSetupTrait::initConfig | protected | function | Initialize various configurations post-installation. | 1 | |||
| FunctionalTestSetupTrait::initKernel | protected | function | Initializes the kernel after installation. | ||||
| FunctionalTestSetupTrait::initSettings | protected | function | Initialize settings created during install. | ||||
| FunctionalTestSetupTrait::initUserSession | protected | function | Initializes user 1 for the site to be installed. | ||||
| FunctionalTestSetupTrait::installDefaultThemeFromClassProperty | protected | function | Installs the default theme defined by `static::$defaultTheme` when needed. | 1 | |||
| FunctionalTestSetupTrait::installParameters | protected | function | Returns the parameters that will be used when the test installs Drupal. | 8 | |||
| FunctionalTestSetupTrait::prepareRequestForGenerator | protected | function | Creates a mock request and sets it on the generator. | ||||
| FunctionalTestSetupTrait::prepareSettings | protected | function | Prepares site settings and services before installation. | 5 | |||
| FunctionalTestSetupTrait::rebuildAll | protected | function | Resets and rebuilds the environment after setup. | ||||
| FunctionalTestSetupTrait::rebuildContainer | protected | function | Rebuilds \Drupal::getContainer(). | ||||
| FunctionalTestSetupTrait::resetAll | protected | function | Resets all data structures after having enabled new modules. | ||||
| FunctionalTestSetupTrait::setContainerParameter | protected | function | Changes parameters in the services.yml file. | ||||
| FunctionalTestSetupTrait::setupBaseUrl | protected | function | Sets up the base URL based upon the environment variable. | ||||
| FunctionalTestSetupTrait::writeSettings | protected | function | Rewrites the settings.php file of the test site. | 1 | |||
| NodeCreationTrait::createNode | protected | function | Creates a node based on default settings. | Aliased as: drupalCreateNode | |||
| NodeCreationTrait::getNodeByTitle | public | function | Get a node from the database based on its title. | Aliased as: drupalGetNodeByTitle | |||
| OpenTelemetryNodePagePerformanceTest::$profile | protected | property | The profile to install as a basis for testing. | Overrides BrowserTestBase::$profile | |||
| OpenTelemetryNodePagePerformanceTest::clearCaches | protected | function | Clear caches. | ||||
| OpenTelemetryNodePagePerformanceTest::testNodePage | public | function | Test canonical node page performance with various cache permutations. | ||||
| OpenTelemetryNodePagePerformanceTest::testNodePageColdCache | protected | function | Logs node page tracing data with a cold cache. | ||||
| OpenTelemetryNodePagePerformanceTest::testNodePageCoolCache | protected | function | Logs node/1 tracing data with a cool cache. | ||||
| OpenTelemetryNodePagePerformanceTest::testNodePageHotCache | protected | function | Logs node page tracing data with a hot cache. | ||||
| OpenTelemetryNodePagePerformanceTest::testNodePageWarmCache | protected | function | Log node/1 tracing data with a warm cache. | ||||
| PerformanceTestBase::$modules | protected static | property | Modules to install. | Overrides BrowserTestBase::$modules | 1 | ||
| PerformanceTestBase::getMinkDriverArgs | protected | function | Gets the Mink driver args from an environment variable. | Overrides WebDriverTestBase::getMinkDriverArgs | |||
| PerformanceTestBase::installModulesFromClassProperty | protected | function | Install modules defined by `static::$modules`. | Overrides WebDriverTestBase::installModulesFromClassProperty | |||
| PerformanceTestBase::prepareEnvironment | protected | function | Prepares the current environment for running the test. | Overrides FunctionalTestSetupTrait::prepareEnvironment | |||
| PerformanceTestBase::setUp | protected | function | Overrides BrowserTestBase::setUp | 2 | |||
| PerformanceTestTrait::assertCountBetween | protected | function | Asserts that a count is between a min and max inclusively. | ||||
| PerformanceTestTrait::assertMetrics | protected | function | Assert metrics from a performance data value object. | ||||
| PerformanceTestTrait::collectNetworkData | private | function | Prepares data for assertions. | ||||
| PerformanceTestTrait::collectPerformanceData | public | function | Executes a callable and collects performance data. | ||||
| PerformanceTestTrait::doGetMinkDriverArgs | private | function | Helper for ::getMinkDriverArgs(). | ||||
| PerformanceTestTrait::doInstallModulesFromClassProperty | private | function | Helper for ::installModulesFromClassProperty(). | ||||
| PerformanceTestTrait::doSetUpTasks | private | function | Helper for ::setUp(). | ||||
| PerformanceTestTrait::getMetrics | protected | function | Get metrics from a performance data value object. | ||||
| PerformanceTestTrait::isDatabaseCache | protected static | function | Checks whether a database event is from the database cache implementation. | ||||
| PerformanceTestTrait::logQuery | protected static | function | Logs a query in the performance data. | ||||
| PerformanceTestTrait::normalizeQuery | protected static | function | Normalizes a query by removing the database prefix and newlines. | ||||
| PerformanceTestTrait::openTelemetryTracing | private | function | Sends metrics to OpenTelemetry. | ||||
| PerformanceTestTrait::processChromeDriverPerformanceLogs | protected | function | Gets the chromedriver performance log and extracts metrics from it. | ||||
| PerformanceTestTrait::quoteQueryArgs | protected static | function | Wraps query arguments in double quotes if they're a string. | ||||
| RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | ||||
| RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | ||||
| RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | ||||
| RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | ||||
| RefreshVariablesTrait::refreshVariables | protected | function | Refreshes in-memory configuration and state information. | 2 | |||
| SessionTestTrait::$sessionName | protected | property | The name of the session cookie. | ||||
| SessionTestTrait::generateSessionName | protected | function | Generates a session cookie name. | ||||
| SessionTestTrait::getSessionName | protected | function | Returns the session name in use on the child site. | ||||
| StorageCopyTrait::replaceStorageContents | protected static | function | Copy the configuration from one storage to another and remove stale items. | ||||
| TestRequirementsTrait::getDrupalRoot | protected static | function | Returns the Drupal root directory. | ||||
| TestSetupTrait::$configSchemaCheckerExclusions | protected static | property | An array of config object names that are excluded from schema checking. | 4 | |||
| TestSetupTrait::$databasePrefix | protected | property | The database prefix of this test run. | ||||
| TestSetupTrait::$kernel | protected | property | The DrupalKernel instance used in the test. | ||||
| TestSetupTrait::$originalSite | protected | property | The site directory of the original parent site. | ||||
| TestSetupTrait::$privateContainer | private | property | Stores the container in case it is set before available with \Drupal. | ||||
| TestSetupTrait::$privateFilesDirectory | protected | property | The private file directory for the test environment. | ||||
| TestSetupTrait::$publicFilesDirectory | protected | property | The public file directory for the test environment. | ||||
| TestSetupTrait::$root | protected | property | The app root. | ||||
| TestSetupTrait::$siteDirectory | protected | property | The site directory of this test run. | ||||
| TestSetupTrait::$strictConfigSchema | protected | property | Set to TRUE to strict check all configuration saved. | 4 | |||
| TestSetupTrait::$tempFilesDirectory | protected | property | The temporary file directory for the test environment. | ||||
| TestSetupTrait::$testId | protected | property | The test run ID. | ||||
| TestSetupTrait::changeDatabasePrefix | protected | function | Changes the database connection to the prefixed one. | ||||
| TestSetupTrait::getConfigSchemaExclusions | protected | function | Gets the config schema exclusions for this test. | ||||
| TestSetupTrait::prepareDatabasePrefix | protected | function | Generates a database prefix for running tests. | 1 | |||
| TestSetupTrait::__get | public | function | Implements the magic method for getting object properties. | ||||
| TestSetupTrait::__set | public | function | Implements the magic method for setting object properties. | ||||
| UiHelperTrait::$loggedInUser | protected | property | The current user logged in using the Mink controlled browser. | ||||
| UiHelperTrait::$maximumMetaRefreshCount | protected | property | The number of meta refresh redirects to follow, or NULL if unlimited. | ||||
| UiHelperTrait::$metaRefreshCount | protected | property | The number of meta refresh redirects followed during ::drupalGet(). | ||||
| UiHelperTrait::$useOneTimeLoginLinks | protected | property | Use one-time login links instead of submitting the login form. | 3 | |||
| UiHelperTrait::buildUrl | protected | function | Builds an absolute URL from a system path or a URL object. | ||||
| UiHelperTrait::checkForMetaRefresh | protected | function | Checks for meta refresh tag and if found call drupalGet() recursively. | ||||
| UiHelperTrait::click | protected | function | Clicks the element with the given CSS selector. | ||||
| UiHelperTrait::clickLink | protected | function | Follows a link by complete name. | ||||
| UiHelperTrait::cssSelect | protected | function | Searches elements using a CSS selector in the raw content. | ||||
| UiHelperTrait::cssSelectToXpath | protected | function | Translates a CSS expression to its XPath equivalent. | ||||
| UiHelperTrait::drupalGet | protected | function | Retrieves a Drupal path or an absolute path. | 3 | |||
| UiHelperTrait::drupalLogin | protected | function | Logs in a user using the Mink controlled browser. | ||||
| UiHelperTrait::drupalLogout | protected | function | Logs a user out of the Mink controlled browser and confirms. | ||||
| UiHelperTrait::drupalResetSession | protected | function | Resets the current active session back to Anonymous session. | ||||
| UiHelperTrait::drupalUserIsLoggedIn | protected | function | Returns whether a given user account is logged in. | ||||
| UiHelperTrait::getAbsoluteUrl | protected | function | Takes a path and returns an absolute path. | ||||
| UiHelperTrait::getTextContent | protected | function | Retrieves the plain-text content from the current page. | ||||
| UiHelperTrait::getUrl | protected | function | Get the current URL from the browser. | ||||
| UiHelperTrait::isTestUsingGuzzleClient | protected | function | Determines if test is using DrupalTestBrowser. | ||||
| UiHelperTrait::prepareRequest | protected | function | Prepare for a request to testing site. | 1 | |||
| UiHelperTrait::submitForm | protected | function | Fills and submits a form. | ||||
| UserCreationTrait::checkPermissions | protected | function | Checks whether a given list of permission names is valid. | ||||
| UserCreationTrait::createAdminRole | protected | function | Creates an administrative role. | ||||
| UserCreationTrait::createRole | protected | function | Creates a role with specified permissions. | Aliased as: drupalCreateRole | |||
| UserCreationTrait::createUser | protected | function | Create a user with a given set of permissions. | Aliased as: drupalCreateUser | 1 | ||
| UserCreationTrait::grantPermissions | protected | function | Grant permissions to a user role. | ||||
| UserCreationTrait::setCurrentUser | protected | function | Switch the current logged in user. | ||||
| UserCreationTrait::setUpCurrentUser | protected | function | Creates a random user account and sets it as current user. | ||||
| WebDriverTestBase::$disableCssAnimations | protected | property | Disables CSS animations in tests for more reliable testing. | ||||
| WebDriverTestBase::$failOnJavascriptConsoleErrors | protected | property | Determines if a test should fail on JavaScript console errors. | 2 | |||
| WebDriverTestBase::$minkDefaultDriverClass | protected | property | Mink class for the default driver to use. | Overrides BrowserTestBase::$minkDefaultDriverClass | |||
| WebDriverTestBase::assertJsCondition | protected | function | Waits for the given time or until the given JS condition becomes TRUE. | ||||
| WebDriverTestBase::assertSession | public | function | Returns WebAssert object. | Overrides UiHelperTrait::assertSession | |||
| WebDriverTestBase::createScreenshot | protected | function | Creates a screenshot. | ||||
| WebDriverTestBase::failOnJavaScriptErrors | protected | function | Triggers a test failure if a JavaScript error was encountered. | ||||
| WebDriverTestBase::getDrupalSettings | protected | function | Gets the current Drupal javascript settings and parses into an array. | Overrides BrowserTestBase::getDrupalSettings | |||
| WebDriverTestBase::getHtmlOutputHeaders | protected | function | Returns headers in HTML output format. | Overrides BrowserHtmlDebugTrait::getHtmlOutputHeaders | |||
| WebDriverTestBase::initFrontPage | protected | function | Visits the front page when initializing Mink. | Overrides BrowserTestBase::initFrontPage | |||
| WebDriverTestBase::initMink | protected | function | Initializes Mink sessions. | Overrides BrowserTestBase::initMink | |||
| WebDriverTestBase::tearDown | protected | function | Overrides BrowserTestBase::tearDown | 1 | |||
| XdebugRequestTrait::extractCookiesFromRequest | protected | function | Adds xdebug cookies, from request setup. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.