class NodePerformanceTest
Tests the performance of node functionality including cache invalidation.
This test focuses on node cache invalidation scenarios and the promoted content view performance. Stark is used as the default theme so that this test is not theme-specific.
Attributes
#[Group('node')]
#[Group('#slow')]
#[RequiresPhpExtension('apcu')]
#[RunTestsInSeparateProcesses]
Hierarchy
- class \Drupal\Tests\DrupalTestCase uses \Drupal\Tests\DrupalTestCaseTrait extends \PHPUnit\Framework\TestCase
- 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\user\Traits\UserCreationTrait, \Drupal\Tests\XdebugRequestTrait, \Drupal\Tests\ExtensionListTestTrait extends \Drupal\Tests\DrupalTestCase
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase extends \Drupal\Tests\BrowserTestBase
- class \Drupal\FunctionalJavascriptTests\PerformanceTestBase uses \Drupal\Tests\PerformanceTestTrait extends \Drupal\FunctionalJavascriptTests\WebDriverTestBase
- class \Drupal\Tests\node\FunctionalJavascript\NodePerformanceTest uses \Drupal\Tests\node\Traits\PromotedContentViewTestTrait extends \Drupal\FunctionalJavascriptTests\PerformanceTestBase
- class \Drupal\FunctionalJavascriptTests\PerformanceTestBase uses \Drupal\Tests\PerformanceTestTrait extends \Drupal\FunctionalJavascriptTests\WebDriverTestBase
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase extends \Drupal\Tests\BrowserTestBase
- 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\user\Traits\UserCreationTrait, \Drupal\Tests\XdebugRequestTrait, \Drupal\Tests\ExtensionListTestTrait extends \Drupal\Tests\DrupalTestCase
Expanded class hierarchy of NodePerformanceTest
File
-
core/
modules/ node/ tests/ src/ FunctionalJavascript/ NodePerformanceTest.php, line 22
Namespace
Drupal\Tests\node\FunctionalJavascriptView source
class NodePerformanceTest extends PerformanceTestBase {
use PromotedContentViewTestTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'views',
'dynamic_page_cache',
'page_cache',
];
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
// Enable the promoted content view and rebuild routes.
$this->enablePromotedContentView();
// Create a test content type.
$this->drupalCreateContentType([
'type' => 'test_content',
'name' => 'Test Content',
]);
// Create a node to be shown on the promoted content view.
$this->drupalCreateNode([
'type' => 'test_content',
'promote' => NodeInterface::PROMOTED,
]);
}
/**
* Tests performance of node-related functionality.
*/
public function testNodePerformance() : void {
$this->testPromotedContentPage();
$this->testPromotedContentCacheInvalidation();
}
/**
* Tests performance for the promoted content page view.
*/
protected function testPromotedContentPage() : void {
// Request the promoted content page, then immediately clear all object
// caches, so that aggregates and image styles are created on disk but
// otherwise caches are empty.
$this->drupalGet('node');
// Give time for big pipe placeholders, asset aggregate requests, and post
// response tasks to finish processing and write to any caches before
// clearing caches again.
sleep(2);
foreach (Cache::getBins() as $bin) {
$bin->deleteAll();
}
// Now visit a different page to warm some caches.
$this->drupalGet('user/login');
// Ensure everything finishes before we collect performance data.
sleep(2);
// Test promoted content page.
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node');
}, 'nodePromotedContentPage');
$this->assertSame(0, $performance_data->getScriptBytes());
$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 "/node" 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" ) AND "number_parts" >= 1',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "views.view.promoted_content" )',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "views.settings" )',
'SELECT "config"."name" AS "name" FROM "config" "config" WHERE ("collection" = "") AND ("name" LIKE "core.entity_view_mode.%" ESCAPE ' . "'\\\\'" . ') ORDER BY "collection" ASC, "name" ASC',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "core.entity_view_mode.node.full", "core.entity_view_mode.node.rss", "core.entity_view_mode.node.teaser", "core.entity_view_mode.user.compact", "core.entity_view_mode.user.full" )',
'SELECT "name", "value" FROM "key_value" WHERE "name" IN ( "views.view_route_names" ) AND "collection" = "state"',
'SELECT "name", "route" FROM "router" WHERE "name" IN ( "view.promoted_content.feed_1" )',
'SELECT "name", "value" FROM "key_value" WHERE "name" IN ( "router.path_roots" ) AND "collection" = "state"',
'SELECT 1 AS "expression" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/rss.xml%" ESCAPE ' . "'\\\\'" . ') LIMIT 1 OFFSET 0',
'SELECT COUNT(*) AS "expression" FROM (SELECT 1 AS "expression" FROM "node_field_data" "node_field_data" WHERE ("node_field_data"."promote" = 1) AND ("node_field_data"."status" = 1)) "subquery"',
'SELECT "node_field_data"."sticky" AS "node_field_data_sticky", "node_field_data"."created" AS "node_field_data_created", "node_field_data"."nid" AS "nid" FROM "node_field_data" "node_field_data" WHERE ("node_field_data"."promote" = 1) AND ("node_field_data"."status" = 1) ORDER BY "node_field_data_sticky" DESC, "node_field_data_created" DESC LIMIT 10 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 (1)',
'SELECT "node_field_data".*, "node_field_data"."langcode" AS "node_field_data__langcode", "node__body"."body_value" AS "body_value", "node__body"."body_format" AS "body_format" FROM "node_field_data" "node_field_data" LEFT OUTER JOIN "node__body" "node__body" ON "node__body"."entity_id" = "node_field_data"."nid" AND "node__body"."langcode" = "node_field_data"."langcode" AND "node__body"."deleted" = 0 WHERE "node_field_data"."nid" IN (1)',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "core.entity_view_display.node.test_content.teaser", "core.entity_view_display.node.test_content.default" )',
'SELECT "config"."name" AS "name" FROM "config" "config" WHERE ("collection" = "") AND ("name" LIKE "node.type.%" ESCAPE ' . "'\\\\'" . ') ORDER BY "collection" ASC, "name" ASC',
'SELECT "base"."uid" AS "uid", "base"."uuid" AS "uuid", "base"."langcode" AS "langcode" FROM "users" "base" WHERE "base"."uid" IN (0)',
'SELECT "users_field_data".*, "users_field_data"."langcode" AS "users_field_data__langcode" FROM "users_field_data" "users_field_data" WHERE "users_field_data"."uid" IN (0)',
'SELECT "user__roles"."entity_id" AS "id", "user__roles"."langcode" AS "langcode", "user__roles"."roles_target_id" AS "roles_target_id", "user__roles"."delta" AS "roles_delta" FROM "user__roles" "user__roles" WHERE ("user__roles"."entity_id" IN (0)) AND ("user__roles"."deleted" = 0) ORDER BY "user__roles"."delta" ASC',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "core.date_format.medium" )',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "core.date_format.long" )',
'SELECT "name", "route" FROM "router" WHERE "name" IN ( "entity.node.canonical" )',
'SELECT 1 AS "expression" FROM "path_alias" "base_table" WHERE ("base_table"."status" = 1) AND ("base_table"."path" LIKE "/node%" ESCAPE ' . "'\\\\'" . ') LIMIT 1 OFFSET 0',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "core.entity_view_display.user.user.compact", "core.entity_view_display.user.user.default" )',
'SELECT "name", "data" FROM "config" WHERE "collection" = "" AND "name" IN ( "filter.format.plain_text" )',
'SELECT "name", "route" FROM "router" WHERE "name" IN ( "view.promoted_content.page_1" )',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("state:Drupal\\Core\\Cache\\CacheCollector", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "state:Drupal\\Core\\Cache\\CacheCollector") AND ("value" = "LOCK_ID")',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("theme_registry:runtime:stark:Drupal\\Core\\Cache\\CacheCollector", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "theme_registry:runtime:stark:Drupal\\Core\\Cache\\CacheCollector") AND ("value" = "LOCK_ID")',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("library_info:stark:Drupal\\Core\\Cache\\CacheCollector", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "library_info:stark:Drupal\\Core\\Cache\\CacheCollector") AND ("value" = "LOCK_ID")',
'INSERT INTO "semaphore" ("name", "value", "expire") VALUES ("path_alias_prefix_list:Drupal\\Core\\Cache\\CacheCollector", "LOCK_ID", "EXPIRE")',
'DELETE FROM "semaphore" WHERE ("name" = "path_alias_prefix_list:Drupal\\Core\\Cache\\CacheCollector") AND ("value" = "LOCK_ID")',
];
$recorded_queries = $performance_data->getQueries();
$this->assertSame($expected_queries, $recorded_queries);
$expected = [
'QueryCount' => 34,
'CacheGetCount' => 82,
'CacheGetCountByBin' => [
'page' => 1,
'config' => 18,
'data' => 3,
'discovery' => 31,
'bootstrap' => 11,
'dynamic_page_cache' => 1,
'render' => 5,
'default' => 5,
'routes' => 4,
'entity' => 2,
'file_parsing' => 1,
],
'CacheSetCount' => 41,
'CacheSetCountByBin' => [
'data' => 3,
'config' => 8,
'discovery' => 11,
'default' => 2,
'routes' => 3,
'entity' => 2,
'render' => 6,
'dynamic_page_cache' => 2,
'page' => 1,
'bootstrap' => 3,
],
'CacheDeleteCount' => 0,
'CacheTagInvalidationCount' => 0,
'CacheTagLookupQueryCount' => 6,
'CacheTagGroupedLookups' => [
[
'route_match',
'access_policies',
'routes',
'router',
'entity_types',
'entity_field_info',
'entity_bundles',
'local_task',
'library_info',
'http_response',
],
[
'config:core.extension',
'views_data',
],
[
'config:views.view.promoted_content',
'node:1',
'node_list',
],
[
'rendered',
'user:0',
'user_view',
],
[
'config:filter.format.plain_text',
'node_view',
],
[
'config:user.role.anonymous',
],
],
'StylesheetCount' => 2,
'StylesheetBytes' => 1450,
];
$this->assertMetrics($expected, $performance_data);
$expected_default_cache_cids = [
'views_data:node_field_data:en',
'views_data:en',
'views_data:views:en',
'views_data:node:en',
'theme_registry:stark',
];
$this->assertSame($expected_default_cache_cids, $performance_data->getCacheOperations()['get']['default']);
}
/**
* Tests the impact of node cache invalidation on the promoted content view.
*/
protected function testPromotedContentCacheInvalidation() : void {
// Create a new node, this invalidates the node_list cache tag. Need to reset
// the cache tag checksum service as it did not register a need to
// invalidate that again.
\Drupal::service('cache_tags.invalidator.checksum')->reset();
$this->drupalCreateNode([
'type' => 'test_content',
'title' => 'new page 2',
]);
// Visit the promoted content page again.
$performance_data = $this->collectPerformanceData(function () {
$this->drupalGet('node');
}, 'nodePromotedContentAfterInvalidation');
$expected_queries = [
'SELECT COUNT(*) AS "expression" FROM (SELECT 1 AS "expression" FROM "node_field_data" "node_field_data" WHERE ("node_field_data"."promote" = 1) AND ("node_field_data"."status" = 1)) "subquery"',
'SELECT "node_field_data"."sticky" AS "node_field_data_sticky", "node_field_data"."created" AS "node_field_data_created", "node_field_data"."nid" AS "nid" FROM "node_field_data" "node_field_data" WHERE ("node_field_data"."promote" = 1) AND ("node_field_data"."status" = 1) ORDER BY "node_field_data_sticky" DESC, "node_field_data_created" DESC LIMIT 10 OFFSET 0',
];
$recorded_queries = $performance_data->getQueries();
$this->assertSame($expected_queries, $recorded_queries);
$expected = [
'QueryCount' => 2,
'CacheGetCount' => 57,
'CacheGetCountByBin' => [
'page' => 1,
'config' => 10,
'data' => 3,
'discovery' => 20,
'bootstrap' => 8,
'dynamic_page_cache' => 2,
'render' => 6,
'default' => 3,
'routes' => 3,
'entity' => 1,
],
'CacheSetCount' => 5,
'CacheSetCountByBin' => [
'data' => 1,
'render' => 2,
'dynamic_page_cache' => 1,
'page' => 1,
],
'CacheDeleteCount' => 0,
'CacheTagInvalidationCount' => 0,
'CacheTagLookupQueryCount' => 3,
'CacheTagGroupedLookups' => [
[
'config:filter.format.plain_text',
'config:user.role.anonymous',
'config:views.view.promoted_content',
'http_response',
'node:1',
'node_list',
'node_view',
'rendered',
'user:0',
'user_view',
],
[
'route_match',
'access_policies',
'routes',
'router',
'entity_types',
'entity_field_info',
'entity_bundles',
'local_task',
'library_info',
],
[
'config:core.extension',
'views_data',
],
],
'StylesheetCount' => 2,
'StylesheetBytes' => 1300,
];
$this->assertMetrics($expected, $performance_data);
$expected_default_cache_cids = [
'views_data:node_field_data:en',
'views_data:views:en',
'views_data:node:en',
];
$this->assertSame($expected_default_cache_cids, $performance_data->getCacheOperations()['get']['default']);
}
}
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::$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::$profile | protected | property | The profile to install as a basis for testing. | 44 | |||
| 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::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::setUpAppRoot | Deprecated | 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::__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 | ||
| DrupalTestCase::$root | protected | property | The Drupal root directory. | ||||
| DrupalTestCase::getDrupalRoot | Deprecated | protected | function | Returns the Drupal root directory. | 1 | ||
| DrupalTestCase::setUpRoot | final protected | function | Ensure that the $root property is set initially. | ||||
| DrupalTestCase::skipTestWithAttribute | final protected | function | Supports skipping tests with the Skip attribute. | ||||
| DrupalTestCaseTrait::checkErrorHandlerOnTearDown | public | function | Checks the test error handler after test execution. | 1 | |||
| DrupalTestCaseTrait::checkLegacySymfonyDeprecationHelperEnvVariable | public | function | Checks legacy SYMFONY_DEPRECATIONS_HELPER env variable is not used. | ||||
| DrupalTestCaseTrait::expectExceptionMessageIs | protected | function | Expects an exactly matching exception message. | ||||
| DrupalTestCaseTrait::expectExceptionMessageIsOrContains | protected | function | Expects an exception message containing a specified string. | ||||
| DrupalTestCaseTrait::setDebugDumpHandler | public static | function | Registers the dumper CLI handler when the DebugDump extension is enabled. | ||||
| 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. | 10 | |||
| 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 | |||
| NodePerformanceTest::$defaultTheme | protected | property | The theme to install as the default for testing. | Overrides BrowserTestBase::$defaultTheme | |||
| NodePerformanceTest::$modules | protected static | property | Modules to install. | Overrides PerformanceTestBase::$modules | |||
| NodePerformanceTest::setUp | protected | function | Overrides PerformanceTestBase::setUp | ||||
| NodePerformanceTest::testNodePerformance | public | function | Tests performance of node-related functionality. | ||||
| NodePerformanceTest::testPromotedContentCacheInvalidation | protected | function | Tests the impact of node cache invalidation on the promoted content view. | ||||
| NodePerformanceTest::testPromotedContentPage | protected | function | Tests performance for the promoted content page view. | ||||
| 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 | |||
| 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. | ||||
| PromotedContentViewTestTrait::enablePromotedContentView | protected | function | Enables the promoted_content view and optionally rebuilds the router. | ||||
| 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. | ||||
| 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::$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::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::drupalGet | protected | function | Retrieves a Drupal path or an absolute path. | Overrides UiHelperTrait::drupalGet | 1 | ||
| 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.