CINXE.COM
Manual:PHP unit testing/Running the tests - MediaWiki
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref--excluded vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Manual:PHP unit testing/Running the tests - MediaWiki</title> <script>(function(){var className="client-js vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref--excluded vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )mediawikiwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"44e45b0c-f075-4dd6-9e0a-0288b1f1dbe0","wgCanonicalNamespace":"Manual","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":100,"wgPageName":"Manual:PHP_unit_testing/Running_the_tests","wgTitle":"PHP unit testing/Running the tests","wgCurRevisionId":6580065,"wgRevisionId":6580065,"wgArticleId":78134,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Manual:PHP_unit_testing/Running_the_tests","wgRelevantArticleId":78134,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"mediawiki","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true, "wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":10000,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"personal","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready", "ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.checkUser.clientHints"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="MediaWiki"> <meta property="og:title" content="Manual:PHP unit testing/Running the tests - MediaWiki"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//m.mediawiki.org/wiki/Manual:PHP_unit_testing/Running_the_tests"> <link rel="alternate" type="application/x-wiki" title="Edit" href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/mediawiki.png"> <link rel="icon" href="/static/favicon/mediawiki.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="MediaWiki (en)"> <link rel="EditURI" type="application/rsd+xml" href="//www.mediawiki.org/w/api.php?action=rsd"> <link rel="canonical" href="https://www.mediawiki.org/wiki/Manual:PHP_unit_testing/Running_the_tests"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="MediaWiki Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-100 ns-subject mw-editable page-Manual_PHP_unit_testing_Running_the_tests rootpage-Manual_PHP_unit_testing skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/MediaWiki" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-mw-download" class="mw-list-item"><a href="/wiki/Download"><span>Get MediaWiki</span></a></li><li id="n-mw-extensions" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Category:Extensions"><span>Get extensions</span></a></li><li id="n-blog-text" class="mw-list-item"><a href="https://techblog.wikimedia.org/"><span>Tech blog</span></a></li><li id="n-mw-contribute" class="mw-list-item"><a href="/wiki/Special:MyLanguage/How_to_contribute"><span>Contribute</span></a></li> </ul> </div> </div> <div id="p-support" class="vector-menu mw-portlet mw-portlet-support" > <div class="vector-menu-heading"> Support </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Help:Contents" title="The place to find out"><span>User help</span></a></li><li id="n-mw-faq" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:FAQ"><span>FAQ</span></a></li><li id="n-mw-manual" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:Contents"><span>Technical manual</span></a></li><li id="n-mw-supportdesk" class="mw-list-item"><a href="/wiki/Project:Support_desk"><span>Support desk</span></a></li><li id="n-mw-communication" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Communication"><span>Communication</span></a></li> </ul> </div> </div> <div id="p-development" class="vector-menu mw-portlet mw-portlet-development" > <div class="vector-menu-heading"> Development </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mw-developerportal" class="mw-list-item"><a href="https://developer.wikimedia.org/"><span>Developer portal</span></a></li><li id="n-svn-statistics" class="mw-list-item"><a href="/wiki/Development_statistics"><span>Code statistics</span></a></li> </ul> </div> </div> <div id="p-mediawiki.org" class="vector-menu mw-portlet mw-portlet-mediawiki_org" > <div class="vector-menu-heading"> mediawiki.org </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Project:Help" title="About the project, what you can do, where to find things"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-mw-translate" class="mw-list-item"><a href="/wiki/Special:LanguageStats"><span>Translate content</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x"><span>Random page</span></a></li><li id="n-mw-discussion" class="mw-list-item"><a href="/wiki/Project:Village_Pump"><span>Village pump</span></a></li><li id="n-Sandboxlink-portlet-label" class="mw-list-item"><a href="/wiki/Project:Sandbox"><span>Sandbox</span></a></li> </ul> </div> </div> <div id="p-lang" class="vector-menu mw-portlet mw-portlet-lang" > <div class="vector-menu-heading"> In other languages </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Test_Anything_Protocol" title="Test Anything Protocol – English" lang="en" hreflang="en" data-title="Test Anything Protocol" data-language-autonym="English" data-language-local-name="English" class="interlanguage-link-target"><span>English</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-add wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:NewItem?site=mediawikiwiki&page=Manual%3APHP+unit+testing%2FRunning+the+tests" title="Add interlanguage links" class="wbc-editpage">Add links</a></span></div> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/MediaWiki" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/mediawikiwiki.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="MediaWiki" src="/static/images/mobile/copyright/mediawikiwiki-wordmark.svg" style="width: 7.5em; height: 1.125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search MediaWiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search MediaWiki" aria-label="Search MediaWiki" autocapitalize="sentences" title="Search MediaWiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Manual%3APHP+unit+testing%2FRunning+the+tests" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Manual%3APHP+unit+testing%2FRunning+the+tests" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Manual%3APHP+unit+testing%2FRunning+the+tests" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Manual%3APHP+unit+testing%2FRunning+the+tests" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Entrypoints_for_running_the_tests" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Entrypoints_for_running_the_tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Entrypoints for running the tests</span> </div> </a> <button aria-controls="toc-Entrypoints_for_running_the_tests-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Entrypoints for running the tests subsection</span> </button> <ul id="toc-Entrypoints_for_running_the_tests-sublist" class="vector-toc-list"> <li id="toc-All_tests" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#All_tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>All tests</span> </div> </a> <ul id="toc-All_tests-sublist" class="vector-toc-list"> <li id="toc-Error_"Cannot_access_the_database:_Unknown_database"" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Error_"Cannot_access_the_database:_Unknown_database""> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1.1</span> <span>Error "Cannot access the database: Unknown database"</span> </div> </a> <ul id="toc-Error_"Cannot_access_the_database:_Unknown_database"-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-The_"--filter"_option_does_not_exist" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#The_"--filter"_option_does_not_exist"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1.2</span> <span>The "--filter" option does not exist</span> </div> </a> <ul id="toc-The_"--filter"_option_does_not_exist-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Integration_tests" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Integration_tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>Integration tests</span> </div> </a> <ul id="toc-Integration_tests-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Unit_tests" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Unit_tests"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>Unit tests</span> </div> </a> <ul id="toc-Unit_tests-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Linter_and_code_style" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Linter_and_code_style"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Linter and code style</span> </div> </a> <ul id="toc-Linter_and_code_style-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Select_by_directory_or_file" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Select_by_directory_or_file"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Select by directory or file</span> </div> </a> <ul id="toc-Select_by_directory_or_file-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Select_by_test_name" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Select_by_test_name"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Select by test name</span> </div> </a> <ul id="toc-Select_by_test_name-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Select_by_group" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Select_by_group"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Select by group</span> </div> </a> <ul id="toc-Select_by_group-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Output_format" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Output_format"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Output format</span> </div> </a> <ul id="toc-Output_format-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-How_it_works" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#How_it_works"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>How it works</span> </div> </a> <button aria-controls="toc-How_it_works-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle How it works subsection</span> </button> <ul id="toc-How_it_works-sublist" class="vector-toc-list"> <li id="toc-Database" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Database"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Database</span> </div> </a> <ul id="toc-Database-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Manual</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">PHP unit testing/Running the tests</span></h1> <div class="mw-indicators"> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-manual" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Manual:PHP_unit_testing/Running_the_tests" title="View the subject page [c]" accesskey="c"><span>Manual</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Manual_talk:PHP_unit_testing/Running_the_tests" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Manual:PHP_unit_testing/Running_the_tests"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Manual:PHP_unit_testing/Running_the_tests"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Manual:PHP_unit_testing/Running_the_tests" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Manual:PHP_unit_testing/Running_the_tests" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&oldid=6580065" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Manual%3APHP_unit_testing%2FRunning_the_tests&id=6580065&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FManual%3APHP_unit_testing%2FRunning_the_tests"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FManual%3APHP_unit_testing%2FRunning_the_tests"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&bookcmd=book_creator&referer=Manual%3APHP+unit+testing%2FRunning+the+tests"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Manual%3APHP_unit_testing%2FRunning_the_tests&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects emptyPortlet" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div id="siteSub" class="noprint">From mediawiki.org</div> </div> <div id="contentSub"><div id="mw-content-subtitle"><div class="subpages">< <bdi dir="ltr"><a href="/wiki/Manual:PHP_unit_testing" title="Manual:PHP unit testing">Manual:PHP unit testing</a></bdi></div></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div style="float:right; background:#f9f9f9; margin-left:2em; margin-bottom:1em; padding:0; border:1px solid #aaa; width:17em"> <div style="font-size:105%; line-height:120%; padding:0.4em; background-color:#eee; border-bottom:1px solid #aaa"> <figure class="mw-halign-right" typeof="mw:File"><a href="/wiki/File:Tournesol.png" class="mw-file-description" title="MediaWiki Flower"><img alt="MediaWiki Flower" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Tournesol.png/32px-Tournesol.png" decoding="async" width="32" height="32" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Tournesol.png/48px-Tournesol.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Tournesol.png/64px-Tournesol.png 2x" data-file-width="488" data-file-height="493" /></a><figcaption>MediaWiki Flower</figcaption></figure> <a href="/wiki/Special:MyLanguage/Manual:Unit_testing" title="Special:MyLanguage/Manual:Unit testing">« Unit testing</a><span style="display:none"><a href="/wiki/Manual:Unit_testing" title="Manual:Unit testing"> </a></span><br /><b>PHPUnit testing</b> </div> <div style="background:#fff; padding:0.4em; font-size:95%"> <p><b>Contents</b> </p> <ul><li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Running_the_unit_tests" title="Special:MyLanguage/Manual:PHP unit testing/Running the unit tests">Running the tests</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Running_the_unit_tests" class="mw-redirect" title="Manual:PHP unit testing/Running the unit tests"> </a></span> <ul><li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/PostgreSQL" title="Special:MyLanguage/Manual:PHP unit testing/PostgreSQL">PostgreSQL</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/PostgreSQL" title="Manual:PHP unit testing/PostgreSQL"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Oracle" title="Special:MyLanguage/Manual:PHP unit testing/Oracle">Oracle</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Oracle" title="Manual:PHP unit testing/Oracle"> </a></span></li></ul></li> <li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Code_coverage" title="Special:MyLanguage/Manual:PHP unit testing/Code coverage">Generate code coverage</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Code_coverage" title="Manual:PHP unit testing/Code coverage"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Manual:Writing_testable_PHP_code" title="Special:MyLanguage/Manual:Writing testable PHP code">Writing testable PHP code</a><span style="display:none"><a href="/wiki/Manual:Writing_testable_PHP_code" title="Manual:Writing testable PHP code"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Writing_unit_tests" title="Special:MyLanguage/Manual:PHP unit testing/Writing unit tests">Writing tests</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Writing_unit_tests" title="Manual:PHP unit testing/Writing unit tests"> </a></span> <ul><li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Writing_unit_tests_for_extensions" title="Special:MyLanguage/Manual:PHP unit testing/Writing unit tests for extensions">...for extensions</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Writing_unit_tests_for_extensions" title="Manual:PHP unit testing/Writing unit tests for extensions"> </a></span></li></ul></li> <li><a href="/wiki/Special:MyLanguage/Continuous_integration" title="Special:MyLanguage/Continuous integration">Continuous integration</a><span style="display:none"><a href="/wiki/Continuous_integration" title="Continuous integration"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Continuous_integration/Understanding_build_failures" title="Special:MyLanguage/Continuous integration/Understanding build failures">Understanding build failures</a><span style="display:none"><a href="/wiki/Continuous_integration/Understanding_build_failures" title="Continuous integration/Understanding build failures"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Manual:PHP_unit_testing/Appendix" title="Special:MyLanguage/Manual:PHP unit testing/Appendix">Appendix</a><span style="display:none"><a href="/wiki/Manual:PHP_unit_testing/Appendix" title="Manual:PHP unit testing/Appendix"> </a></span><br />(how to help, resources..)</li></ul> <hr /> <p><b>Tools</b> </p> <ul><li><a href="https://en.wikipedia.org/wiki/PHPUnit" class="extiw" title="w:PHPUnit">PHPUnit</a></li></ul> </div> </div> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Entrypoints_for_running_the_tests">Entrypoints for running the tests</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=1" title="Edit section: Entrypoints for running the tests"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>We use composer to run PHPUnit tests. If you have not already, run <code>composer update</code> in the root of the MediaWiki core repository. </p> <div class="mw-heading mw-heading3"><h3 id="All_tests">All tests</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=2" title="Edit section: All tests"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The entry point for running all tests at once is the <code>composer phpunit:entrypoint</code> command, that must be run in the MediaWiki directory: </p> <pre>$ composer phpunit:entrypoint -- path/to/my/test </pre> <div class="mw-heading mw-heading4"><h4 id="Error_"Cannot_access_the_database:_Unknown_database""><span id="Error_.22Cannot_access_the_database:_Unknown_database.22"></span>Error "Cannot access the database: Unknown database"</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=3" title="Edit section: Error "Cannot access the database: Unknown database""><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div><p> If you get this error you may need to set the environment variable <code>PHPUNIT_WIKI</code>, e.g:</p><div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>$<span class="w"> </span><span class="nv">PHPUNIT_WIKI</span><span class="o">=</span>wiki<span class="w"> </span>composer<span class="w"> </span>phpunit:entrypoint<span class="w"> </span>--<span class="w"> </span>path/to/my/test </pre></div> <div class="mw-heading mw-heading4"><h4 id="The_"--filter"_option_does_not_exist"><span id="The_.22--filter.22_option_does_not_exist"></span>The "--filter" option does not exist</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=4" title="Edit section: The "--filter" option does not exist"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>This and similar errors can occur if you omit the <code>--</code> when invoking the Composer script. Make sure to always use the double dash when running the Composer script, to separate Composer and PHPUnit arguments. </p> <div class="mw-heading mw-heading3"><h3 id="Integration_tests">Integration tests</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=5" title="Edit section: Integration tests"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div><p> These are tests that are contained in <code>tests/phpunit/integration</code> folders.</p><pre>$ composer phpunit:integration -- path/to/my/test </pre> <div class="mw-heading mw-heading3"><h3 id="Unit_tests">Unit tests</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=6" title="Edit section: Unit tests"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>These are tests that are contained in <code>tests/phpunit/unit</code> folders. </p><p>Run only the pure "unit" tests for MediaWiki core and all extensions and skins: </p> <style data-mw-deduplicate="TemplateStyles:r4760063">.mw-parser-output .tpl-terminal{background-color:#222}.mw-parser-output .tpl-terminal-title{color:#fff;padding:0.5em 1em}.mw-parser-output .tpl-terminal-content{margin-top:0;border:0;border-top:1px solid #bbb;background-color:#111;padding:1em;color:#eee;overflow:auto}</style><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style="max-height: 36em;">$ composer phpunit:unit > phpunit --colors=always --testsuite=core:unit,extensions:unit,skins:unit PHPUnit 8.5.8 by Sebastian Bergmann and contributors. ............................................................. 61 / 8977 ( 0%) ............................................................. 122 / 8977 ( 1%) ............................................................. 183 / 8977 ( 2%) ............................................................. 244 / 8977 ( 2%) ............................................................. 305 / 8977 ( 3%) </pre></div> <p>To run specific pure "unit" tests only, use the PHPUnit entrypoint located at <code>vendor/bin/phpunit</code> </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ vendor/bin/phpunit --help PHPUnit 8.5.8 by Sebastian Bergmann and contributors. Usage: phpunit [options] UnitTest [UnitTest.php] phpunit [options] <directory> </pre></div> <style data-mw-deduplicate="TemplateStyles:r6651107">.mw-parser-output .note{background-position:left 7px top 50%;padding:0.5em 0.5em 0.5em 40px;margin:0.5em 0;overflow:hidden;background-color:#f8f9fa;color:#333;background-repeat:no-repeat;border:1px solid #ddd}.mw-parser-output .note-inline{display:inline-block;vertical-align:middle}.mw-parser-output .note-info{background-color:#eaf3ff;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg");background-size:25px;border-color:#a3caff;padding-left:40px;min-height:25px}.mw-parser-output .note-reminder{background-color:#fff9ea;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg");background-size:25px;border-color:#fc3;min-height:25px}.mw-parser-output .note-warn{background-color:#fff9ea;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg");background-size:25px;border-color:#fc3;min-height:25px}.mw-parser-output .note-error{background-color:#fee7e6;color:#333;background-image:url("https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg");background-size:25px;border-color:#c33;min-height:25px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .note{background-color:transparent;color:inherit}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .note{background-color:transparent;color:inherit}}</style><div role="note" class="note note-info">This documentation assumes that you are running tests in a local development environment. Do not run tests on a real website, bad things will happen!</div> <style data-mw-deduplicate="TemplateStyles:r6651108">.mw-parser-output table.ombox{margin:4px 10%;border-collapse:collapse;border:1px solid #a2a9b1;background-color:#f8f9fa;color:#333;box-sizing:border-box}.mw-parser-output .ombox td.mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox th.mbox-text,.mw-parser-output .ombox td.mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox td.mbox-image{border:none;text-align:center;padding:2px 0 2px 0.9em}.mw-parser-output .ombox td.mbox-imageright{border:none;text-align:center;padding:2px 0.9em 2px 0}.mw-parser-output table.ombox-notice{border-color:#a2a9b1}.mw-parser-output table.ombox-speedy{background-color:#fee7e6;color:#333}.mw-parser-output table.ombox-speedy,.mw-parser-output table.ombox-delete{border-color:#b32424;border-width:2px}.mw-parser-output table.ombox-content{border-color:#f28500}.mw-parser-output table.ombox-style{border-color:#fc3}.mw-parser-output table.ombox-move{border-color:#9932cc}.mw-parser-output table.ombox-protection{border-color:#a2a9b1;border-width:2px}html body.mediawiki .mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;box-sizing:border-box;width:238px;font-size:88%;line-height:1.25em}@media screen{html.skin-theme-clientpref-night .mw-parser-output table.ombox{background-color:transparent;color:inherit}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output table.ombox{background-color:transparent;color:inherit}}</style><table class="ombox ombox-content plainlinks" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/OOjs_UI_icon_notice-warning.svg/40px-OOjs_UI_icon_notice-warning.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/OOjs_UI_icon_notice-warning.svg/60px-OOjs_UI_icon_notice-warning.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4c/OOjs_UI_icon_notice-warning.svg/80px-OOjs_UI_icon_notice-warning.svg.png 2x" data-file-width="20" data-file-height="20" /></span></span></td><td class="mbox-text">Some of the integration tests are destructive. Although they are supposed to use a copy of the database, there are most probably a few bugs in the system and may modify live data. <b>Do not run the tests on a production wiki</b>.</td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Linter_and_code_style">Linter and code style</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=7" title="Edit section: Linter and code style"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>To check PHP code style in a file you can run: </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>composer<span class="w"> </span>lint<span class="w"> </span>./some/path/SomeFile.php composer<span class="w"> </span>phpcs<span class="w"> </span>./some/path/SomeFile.php </pre></div> <p>To run auto-fixes execute PHPCBF (PHP Code Beautifier and Fixer) like so: </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>vendor/bin/phpcbf<span class="w"> </span>./some/path/SomeFile.php </pre></div> <p>All of these commands take a file or directory as a parameter. If you modified a few files in different folders, you can temporarily add your commands to the <code>scripts</code> section in <code>composer.json</code> (just to run the commands quicker). </p> <div class="mw-heading mw-heading2"><h2 id="Select_by_directory_or_file">Select by directory or file</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=8" title="Edit section: Select by directory or file"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Running all tests from all core components and installed extensions may take a while. During development you may want to focus on just a particular test suite or directory of test suites. Pass the directory or file to the phpunit command. </p><p>For example, if you're working on a patch that modifies <code>includes/ResourceLoader</code>, with a test covering it under <code>unit/includes/ResourceLoader/</code>, then you might run the tests like so: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- tests/phpunit/unit/includes/ResourceLoader/ PHPUnit by Sebastian Bergmann. ........................................................... 59 / 59 (100%) Time: 1.78 seconds, Memory: 22.00 MB <span style="background-color:green; color:black;">OK (59 tests, 80 assertions)</span> </pre></div> <p>To run tests for a specific extension or skin: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- extensions/EventLogging/tests/phpunit/ ........................................................... 59 / 59 (100%) </pre></div> <div class="mw-heading mw-heading2"><h2 id="Select_by_test_name">Select by test name</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=9" title="Edit section: Select by test name"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>If you're debugging a specific test case and are adding breakpoints or var_dump statements, it may be useful to filter even more closely than by the file, so as to skip past all other invocations of the same underlying code. To do this, use the <code>--filter</code> option to match substrings of the test name. For example, given a test suite like the following: </p> <div class="mw-highlight mw-highlight-lang-php mw-content-ltr" dir="ltr"><pre><span></span><span class="k">namespace</span> <span class="nx">MediaWiki\Tests\ResourceLoader</span><span class="p">;</span> <span class="k">class</span> <span class="nc">FileModuleTest</span> <span class="k">extends</span> <span class="nx">MediaWikiIntegrationTestCase</span> <span class="p">{</span> <span class="k">protected</span> <span class="k">function</span> <span class="nf">setUp</span><span class="p">()</span><span class="o">:</span> <span class="nx">void</span> <span class="p">{</span> <span class="k">parent</span><span class="o">::</span><span class="na">setUp</span><span class="p">();</span> <span class="c1">// ...</span> <span class="p">}</span> <span class="k">public</span> <span class="k">function</span> <span class="nf">testLessCompiler</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// ...</span> <span class="p">}</span> <span class="k">public</span> <span class="k">function</span> <span class="nf">testGetScriptPackageFiles</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// ...</span> <span class="p">}</span> <span class="k">public</span> <span class="k">function</span> <span class="nf">testGetVersionHash</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// ...</span> <span class="p">}</span> <span class="p">}</span> </pre></div><p>You can combine the directory selection with <code>--filter</code> to run only the second <code>testGetScriptPackageFiles</code> test case, like so: <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"></p><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- --filter Package tests/phpunit/includes/ResourceLoader/FileModuleTest.php PHPUnit by Sebastian Bergmann. ........................................................... 21 / 21 (100%) Time: 0.17 seconds, Memory: 22.00 MB <span style="background-color:green; color:black;">OK (21 tests, 21 assertions)</span> </pre></div> <p><br /> </p> <div class="mw-heading mw-heading2"><h2 id="Select_by_group">Select by group</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=10" title="Edit section: Select by group"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Each test case can be grouped using the <code>@group</code> annotation in the test case file. The group names may look obscure at first, we will describe them later on in the <a href="/wiki/Manual:PHP_unit_testing/Writing_unit_tests" title="Manual:PHP unit testing/Writing unit tests">Writing unit tests</a> chapter. </p><p>To only run tests in a particular group, use the <code>--group</code> option. </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r6651107"><div role="note" class="note note-info">This may be <b>slow</b> and will be silent for a few seconds before the tests start, because it still requires PHPUnit to load and data-provide all test suites (including extensions) before the group filter is applied. For fast results, select by directory instead.</div><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- --group Cache PHPUnit by Sebastian Bergmann. ................................................<span style="color:yellow">IIIII</span>........ 61 / 2311 ( 2%) ............<span style="color:yellow">I</span>................................................ 122 / 2311 ( 5%) ............................................................. 183 / 2311 ( 7%) ............................................................. 244 / 2311 ( 10%) ............................................................. 305 / 2311 ( 13%) ............................................................. 366 / 2311 ( 15%) ............................................................. 427 / 2311 ( 18%) ............................................................. 488 / 2311 ( 21%) ............................................................. 549 / 2311 ( 23%) .....................<span style="color:yellow">I</span>....................................... 610 / 2311 ( 26%) ............................................................. 671 / 2311 ( 29%) .......................................................S...<span style="color:yellow">II</span> 732 / 2311 ( 31%) <span style="color:yellow">IIIIIIIIIII</span>...<span style="color:yellow">IIIIIIIIIIIIIII</span>................................ 793 / 2311 ( 34%) ............................ Time: 10 seconds, Memory: 97.25Mb There were 35 incomplete tests: [snip] <span style="color:black; background-color:yellow">OK, but incomplete or skipped tests! Tests: 821, Assertions: 78982, Incomplete: 35, Skipped: 1.</span> </pre></div><p>To find all available groups, run <code>$ composer phpunit:entrypoint -- --list-groups</code> to print the available test groups. To run a particular test group, pass it to phpunit, for example: </p><pre>$ composer phpunit:entrypoint -- --group Editing </pre> <div class="mw-heading mw-heading2"><h2 id="Output_format">Output format</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=11" title="Edit section: Output format"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>To see the name of each running test, use the TAP format by passing the <code>--tap</code> option to PHPUnit: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- --tap tests/phpunit/includes/libs/IPTest.php TAP version 13 not ok 1 - Error: IPTest::testisIPAddress ok 2 - IPTest::testisIPv6 ok 3 - IPTest::testisIPv4 ok 4 - IPTest::testValidIPs ^C $ </pre></div> <p>This format is great to filter the output for non passing test. For example with the grep command: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- --tap tests/phpunit/includes/libs/IPTest.php | egrep '^not' not ok 1 - Error: IPTest::testisIPAddress $ </pre></div> <p>phpunit also provide a kind of checklist that give out a great output for people not familiar with tests or shells: the testdox format: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r4760063"><div class="tpl-terminal"> <div class="tpl-terminal-title"><strong>Terminal</strong></div> <pre class="plainlinks tpl-terminal-content" style=";">$ composer phpunit:entrypoint -- --testdox tests/phpunit/includes/specials/ PHPUnit by Sebastian Bergmann. Configuration read from /srv/trunk/tests/phpunit/suite.xml QueryAllSpecialPages [x] Querypage sql query SpecialRecentchanges [x] Rc ns filter [x] Rc ns filter inversion [ ] Rc ns filter association [x] Rc ns filter association with inversion SpecialSearch [x] Profile and namespace loading </pre></div> <p>An unchecked box (<code>[ ]</code>), means the test failed, such as the one named « RC ns filter association » above. </p> <div class="mw-heading mw-heading2"><h2 id="How_it_works">How it works</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=12" title="Edit section: How it works"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Database">Database</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&action=edit&section=13" title="Edit section: Database"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Integration tests that involve a database are automatically run against a temporary clone of your current wiki's database (the one configured in LocalSettings.php). </p><p>Because of this, it is important that the MediaWiki installation being tested has an up to date and correct database, or error messages (such as "TestUser.php: Can't create user on real database") will result. </p> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐gtx6v Cached time: 20241122232702 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.125 seconds Real time usage: 0.326 seconds Preprocessor visited node count: 898/1000000 Post‐expand include size: 16710/2097152 bytes Template argument size: 8049/2097152 bytes Highest expansion depth: 12/100 Expensive parser function count: 5/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 10641/5000000 bytes Lua time usage: 0.038/10.000 seconds Lua memory usage: 1048480/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 282.646 1 -total 21.13% 59.726 1 Manual:PHP_unit_testing/navigation 12.43% 35.138 1 Template:Warn 11.98% 33.875 11 Template:Ll 11.71% 33.107 1 Template:Mbox 10.52% 29.728 2 Template:Note 10.50% 29.687 14 Template:Pagelang 8.28% 23.402 22 Template:Translatable 5.88% 16.613 3 Template:Dir 3.65% 10.313 9 Template:Terminal --> <!-- Saved in parser cache with key mediawikiwiki:pcache:idhash:78134-0!canonical and timestamp 20241122232702 and revision id 6580065. Rendering was triggered because: diff-page --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://www.mediawiki.org/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&oldid=6580065">https://www.mediawiki.org/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&oldid=6580065</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 14 June 2024, at 22:23.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. Text in <a class="external text" href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">the Help: namespace</a> is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons CC0 License</a>. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Project:About">About mediawiki.org</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Project:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/www.mediawiki.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//m.mediawiki.org/w/index.php?title=Manual:PHP_unit_testing/Running_the_tests&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-rqr4k","wgBackendResponseTime":111,"wgPageParseReport":{"limitreport":{"cputime":"0.125","walltime":"0.326","ppvisitednodes":{"value":898,"limit":1000000},"postexpandincludesize":{"value":16710,"limit":2097152},"templateargumentsize":{"value":8049,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":5,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":10641,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 282.646 1 -total"," 21.13% 59.726 1 Manual:PHP_unit_testing/navigation"," 12.43% 35.138 1 Template:Warn"," 11.98% 33.875 11 Template:Ll"," 11.71% 33.107 1 Template:Mbox"," 10.52% 29.728 2 Template:Note"," 10.50% 29.687 14 Template:Pagelang"," 8.28% 23.402 22 Template:Translatable"," 5.88% 16.613 3 Template:Dir"," 3.65% 10.313 9 Template:Terminal"]},"scribunto":{"limitreport-timeusage":{"value":"0.038","limit":"10.000"},"limitreport-memusage":{"value":1048480,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-gtx6v","timestamp":"20241122232702","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>