<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>VOLTTEST PHP SDK Blog</title>
        <link>https://php.volt-test.com/blog</link>
        <description>VOLTTEST PHP SDK Blog</description>
        <lastBuildDate>Sat, 29 Nov 2025 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Load Testing Laravel Applications with PHPUnit and Volt-test]]></title>
            <link>https://php.volt-test.com/blog/laravel-load-testing-with-phpunit</link>
            <guid>https://php.volt-test.com/blog/laravel-load-testing-with-phpunit</guid>
            <pubDate>Sat, 29 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to run realistic performance and load tests in your Laravel application using PHPUnit and Volt-Test — no extra scripts, no new syntax.]]></description>
            <content:encoded><![CDATA[<p>With Volt-Test 1.2.0, you can now run load tests directly inside PHPUnit — no external scripts or configuration required.</p>
<p>Volt-Test was built to make load testing simple and native for PHP developers,
and this new release takes it one step further.
You can now test your Laravel APIs under load using the same PHPUnit environment you already use for your feature and unit tests.</p>
<p><img decoding="async" loading="lazy" alt="Load Testing Laravel Applications with PHPUnit and Volt-test" src="https://php.volt-test.com/assets/images/volt-test-laravel-phpunit-d1272d2cd3a17c034ce989040b1d1f63.png" width="1129" height="630" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-phpunit-integration-matters">Why PHPUnit Integration Matters<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#why-phpunit-integration-matters" class="hash-link" aria-label="Direct link to Why PHPUnit Integration Matters" title="Direct link to Why PHPUnit Integration Matters" translate="no">​</a></h2>
<p>Most Laravel developers already rely on PHPUnit for testing logic and features.
Now, you can also measure your app’s behavior under load without leaving that familiar workflow.</p>
<p><strong>This means:</strong></p>
<ul>
<li>No switching to external tools or YAML scripts.</li>
<li>Run load tests in your CI/CD pipeline.</li>
<li>Catch performance regressions automatically.</li>
<li>Keep your load testing code version-controlled alongside your application tests.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installation">Installation<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation" translate="no">​</a></h2>
<p>If you already use the package, update it:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer update</span><br></span></code></pre></div></div>
<p>or install fresh</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer require volt-test/laravel-performance-testing</span><br></span></code></pre></div></div>
<p>you can check the package configuration options and how you can use in the blog post <a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk" target="_blank" rel="noopener noreferrer">Effortless Laravel Performance Testing with Volt Test PHP SDK</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="configure-phpunit">Configure PHPUnit<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#configure-phpunit" class="hash-link" aria-label="Direct link to Configure PHPUnit" title="Direct link to Configure PHPUnit" translate="no">​</a></h2>
<p>In your <code>phpunit.xml</code> file, add a new testsuite for performance tests:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">testsuites</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    ....</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">testsuite</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">Performance</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">directory</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">tests/Performance</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;/</span><span class="token tag" style="color:rgb(78, 201, 176)">directory</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;/</span><span class="token tag" style="color:rgb(78, 201, 176)">testsuite</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;/</span><span class="token tag" style="color:rgb(78, 201, 176)">testsuites</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><br></span></code></pre></div></div>
<p>This tells PHPUnit to look for performance tests in the <code>tests/Performance</code> directory.
Additionally, you can set environment variables for Volt-Test in the <code>phpunit.xml</code> file:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">php</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">env</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">VOLTTEST_BASE_PATH</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">.</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">env</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">VOLTTEST_SERVER_PORT</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">8009</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">env</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">VOLTTEST_ENABLE_SERVER_MANAGEMENT</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">true</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">env</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">VOLTTEST_DEBUG_FOR_SERVER_MANAGEMENT</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">true</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;/</span><span class="token tag" style="color:rgb(78, 201, 176)">php</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><br></span></code></pre></div></div>
<p>Environment variables Explanation:</p>
<ul>
<li><code>VOLTTEST_BASE_PATH</code>: The base path for your Laravel application. (usually <code>.</code>)</li>
<li><code>VOLTTEST_SERVER_PORT</code>: The Preferred port where your Laravel app will run during tests.</li>
<li><code>VOLTTEST_ENABLE_SERVER_MANAGEMENT</code>: Enables automatic server management during tests without run you server (usually using this during you writing the test ).</li>
<li><code>VOLTTEST_DEBUG_FOR_SERVER_MANAGEMENT</code>: Enables debug logs for server management (useful for troubleshooting).</li>
</ul>
<p>Alternatively, you can set these variables in your system environment or <code>.env</code> or <code>.env.testing</code> file.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">VOLTTEST_BASE_PATH=.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">VOLTTEST_SERVER_PORT=8009</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">VOLTTEST_ENABLE_SERVER_MANAGEMENT=true</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">VOLTTEST_DEBUG_FOR_SERVER_MANAGEMENT=true</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="writing-load-tests-with-phpunit-and-volt-test">Writing Load Tests with PHPUnit and Volt-Test<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#writing-load-tests-with-phpunit-and-volt-test" class="hash-link" aria-label="Direct link to Writing Load Tests with PHPUnit and Volt-Test" title="Direct link to Writing Load Tests with PHPUnit and Volt-Test" translate="no">​</a></h2>
<p>Once installed and configure, you can create a new test file inside your Laravel app’s tests/Performance directory:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token delimiter important">&lt;?php</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">namespace</span><span class="token plain"> </span><span class="token package">Tests</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Performance</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Testing</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">PerformanceTestCase</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name-definition class-name" style="color:rgb(78, 201, 176)">HomePageLoadTest</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">PerformanceTestCase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">protected</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">static</span><span class="token plain"> </span><span class="token keyword type-declaration" style="color:rgb(86, 156, 214)">bool</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$enableServerManagement</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function-definition function" style="color:rgb(220, 220, 170)">testHomePageUnderLoad</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Run a load test on the home page with 50 virtual users</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">loadTestUrl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'virtual_users'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">50</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Assert that the success rate is above 99%</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTSuccessful</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">99</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Assert that the 95th percentile response time is below 150ms</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTP95ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">150</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre></div></div>
<p>In this example:</p>
<ul>
<li>We create a <code>HomePageLoadTest</code> class that extends <code>PerformanceTestCase</code>.</li>
<li>We enable server management by setting the static property <code>$enableServerManagement</code> to <code>true</code>.
So Volt-Test will automatically start and stop your Laravel server during the test.</li>
<li>We define a test method <code>testHomePageUnderLoad</code> that runs a load test on the home page (<code>/</code>) with 50 virtual users.</li>
<li>We use assertions to verify that the success rate is above 99% and that the 95th percentile response time is below or equal 150 milliseconds.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="running-your-load-tests">Running Your Load Tests<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#running-your-load-tests" class="hash-link" aria-label="Direct link to Running Your Load Tests" title="Direct link to Running Your Load Tests" translate="no">​</a></h2>
<p>To execute your load tests, run PHPUnit with the performance testsuite:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">vendor/bin/phpunit --testsuite Performance</span><br></span></code></pre></div></div>
<p>This command will run all tests in the <code>tests/Performance</code> directory, including your load tests.
You can also run a specific test file:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">vendor/bin/phpunit tests/Performance/HomePageLoadTest.php</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-output">Example Output<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#example-output" class="hash-link" aria-label="Direct link to Example Output" title="Direct link to Example Output" translate="no">​</a></h3>
<p>PHPUnit interleaves Volt-Test performance reports with your regular assertions—for example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">$ vendor/bin/phpunit --testsuite Performance</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">PHPUnit 11.5.44 by Sebastian Bergmann and contributors.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Runtime:       PHP 8.4.15</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Configuration: /path/to/app/phpunit.xml</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  Performance Report: testHomePageUnderLoad</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  Total Requests:      50</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  Success Rate:        100.00%</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  Requests/Sec (RPS):  346.19</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  Avg Latency:         74.2426ms</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  ----------------------------------------------------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                                                                 1 / 1 (100%)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Time: 00:01.524, Memory: 30.00 MB</span><br></span></code></pre></div></div>
<p>if you have set up your CI/CD pipeline to run PHPUnit tests, your load tests will automatically be included in the test suite.</p>
<p>if you need to run the test to you staging or production environment, you can set the <code>VOLTTEST_BASE_URL</code> environment variable before running PHPUnit:</p>
<p>As normal phpunit if assertion of the load test failed the test will be marked as failed.
so it can help you to catch performance regressions early in your development process.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="advanced-load-testing-scenarios-reusing-existing-volttest-classes">Advanced Load Testing Scenarios (Reusing Existing VoltTest Classes)<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#advanced-load-testing-scenarios-reusing-existing-volttest-classes" class="hash-link" aria-label="Direct link to Advanced Load Testing Scenarios (Reusing Existing VoltTest Classes)" title="Direct link to Advanced Load Testing Scenarios (Reusing Existing VoltTest Classes)" translate="no">​</a></h2>
<p>If you've already created load tests using Volt-Test's native syntax (covered in <a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk" target="_blank" rel="noopener noreferrer">Effortless Laravel Performance Testing with Volt Test PHP SDK</a>), you can now reuse those classes inside your PHPUnit tests.</p>
<p>Here is an example:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">app/VoltTests/RegisterAndCheckoutTest.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token delimiter important">&lt;?php</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">namespace</span><span class="token plain"> </span><span class="token package">App</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTests</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Contracts</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTestCase</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTestManager</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name-definition class-name" style="color:rgb(78, 201, 176)">RegisterAndCheckoutTest</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">VoltTestCase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$manager</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'EcommerceAPITest'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">dataSource</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'registration_users.csv'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'sequential'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 1 : Api.register</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Api.register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/api/v1/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'name'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${name}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'email'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${email}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'password'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${password}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'password_confirmation'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${password}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractJson</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'token.access_token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Extract the token for subsequent requests</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">expectStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">201</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 2 : Api.products.index</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Api.products.index'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/api/v1/products'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Authorization'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Bearer ${token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractJson</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'id'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'data[0].id'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Extract the first product ID</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">expectStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 4 : Api.cart.add</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Api.cart.add'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/api/v1/cart/add'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'product_id'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${id}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Use the extracted product ID</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'quantity'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set a default quantity</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Authorization'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Bearer ${token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">expectStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 6 : Api.orders.checkout</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Api.orders.checkout'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/api/v1/orders/checkout'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token comment" style="color:rgb(106, 153, 85)">// No Body needed for checkout</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Authorization'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Bearer ${token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">expectStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">201</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre></div></div>
<p>This Volt-Test class simulates user registration, product browsing, adding to cart, and checkout using a CSV data source for user details.</p>
<p>You can then create a PHPUnit test that runs this Volt-Test class under load to measure its performance and can also verify data integrity:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">tests/Performance/RegisterAndCheckoutTest.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token delimiter important">&lt;?php</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">namespace</span><span class="token plain"> </span><span class="token package">Tests</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Performance</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">App</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTests</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">RegisterAndCheckout</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Testing</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">PerformanceTestCase</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">App</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Models</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Product</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name-definition class-name" style="color:rgb(78, 201, 176)">RegisterAndCheckoutTest</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">PerformanceTestCase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function-definition function" style="color:rgb(220, 220, 170)">testPerformanceFromExistingClass</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token keyword return-type" style="color:rgb(86, 156, 214)">void</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Create a product with initial quantity 100</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token class-name static-context" style="color:rgb(78, 201, 176)">Product</span><span class="token operator" style="color:rgb(212, 212, 212)">::</span><span class="token function" style="color:rgb(220, 220, 170)">query</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">create</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'name'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Test Product'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'quantity'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">100</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">runVoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">EcomerceAPITest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'virtual_users'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">10</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTSuccessful</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">100</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTErrorRate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTMinResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">100</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTAverageResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTP95ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertVTP99ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// check the remain product in the inventory after test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$this</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">assertEquals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">90</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token class-name static-context" style="color:rgb(78, 201, 176)">Product</span><span class="token operator" style="color:rgb(212, 212, 212)">::</span><span class="token function" style="color:rgb(220, 220, 170)">query</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">first</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token property">quantity</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Product quantity should be 90 after 10 registrations."</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre></div></div>
<p>When you run this PHPUnit test, it will execute the <code>RegisterAndCheckout</code> Volt-Test class with 10 virtual users and report the performance metrics alongside your other PHPUnit tests.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./vendor/bin/phpunit --testsuite=Performance</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-output-1">Example Output<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#example-output-1" class="hash-link" aria-label="Direct link to Example Output" title="Direct link to Example Output" translate="no">​</a></h3>
<p>The output will look like this:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain"> ./vendor/bin/phpunit --testsuite=Performance</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">PHPUnit 11.5.44 by Sebastian Bergmann and contributors.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Runtime:       PHP 8.4.15</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Configuration: path/to/app/phpunit.xml</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">----------------------------------------------------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Performance Report: testPerformanceFromExistingClass</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">----------------------------------------------------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Total Requests:      40</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Success Rate:        100.00%</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Requests/Sec (RPS):  162.91</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Avg Latency:         52.854091ms</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">P95 Latency:         72.748667ms</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">P99 Latency:         78.206542ms</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">----------------------------------------------------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">.                                                                   1 / 1 (100%)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Time: 00:00.787, Memory: 28.00 MB</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">OK (1 test, 13 assertions)</span><br></span></code></pre></div></div>
<p>In this PHPUnit test:</p>
<ul>
<li>We create a <code>RegistrationPerformanceTest</code> class that extends <code>PerformanceTestCase</code>.</li>
<li>We define a test method <code>testPerformanceFromExistingClass</code> that runs the <code>RegistrationTest</code> Volt-Test class with 10 virtual users.</li>
<li>We use various assertions to validate the performance metrics of the test.</li>
</ul>
<p>This approach allows you to leverage existing Volt-Test classes while integrating them seamlessly into your PHPUnit test suite.</p>
<p>This tests can catch <strong>race conditions</strong> and data integrity issues under load, ensuring your application behaves correctly even during high traffic scenarios.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="integration-benefits">Integration Benefits<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#integration-benefits" class="hash-link" aria-label="Direct link to Integration Benefits" title="Direct link to Integration Benefits" translate="no">​</a></h2>
<p>By integrating Volt-Test with PHPUnit, you gain several advantages:</p>
<ul>
<li><strong>Unified Testing Workflow</strong>: Manage all your tests—unit, feature, and performance—in one place.</li>
<li><strong>Automated Performance Regression Detection</strong>: Catch performance issues early in your development cycle</li>
<li><strong>Reusable Test Logic</strong>: Leverage existing Volt-Test classes in your PHPUnit tests for consistency and code reuse.</li>
<li><strong>CI/CD Integration</strong>: Seamlessly include load tests in your continuous integration pipelines.</li>
<li><strong>Comprehensive Reporting</strong>: Get detailed performance metrics alongside your regular test results.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-volt-test-cloud">What's Next: Volt-Test Cloud<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#whats-next-volt-test-cloud" class="hash-link" aria-label="Direct link to What's Next: Volt-Test Cloud" title="Direct link to What's Next: Volt-Test Cloud" translate="no">​</a></h2>
<p>The PHPUnit integration is just one part of Volt-Test's vision for simplifying performance testing.
In the near future, we plan to introduce <strong>Volt-Test Cloud</strong>—a hosted service that
enables you to run large-scale load tests without managing infrastructure.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Closed Beta</div><div class="admonitionContent_BuS1"><p>VoltTest Cloud is now in <strong>closed beta</strong>. Sign up to join the waitlist — we review and approve access in waves.</p><div class="card vt-waitlist-card"><div class="card__body" style="text-align:center;padding:2rem 1.5rem"><span class="badge badge--warning" style="margin-bottom:1rem;display:inline-block;font-size:0.75rem">CLOSED BETA</span><h3 style="margin-bottom:0.5rem">Join Early Access</h3><p style="color:var(--ifm-color-emphasis-600);margin-bottom:0.75rem;line-height:1.6">Sign up to join the waitlist. We review and approve access in waves.</p><div class="alert alert--warning" style="text-align:left;margin-bottom:1.5rem;font-size:0.85rem">VoltTest is currently in <strong>closed beta</strong>. After signing up, your account will be reviewed and you'll be notified once approved.</div><div style="display:flex;flex-direction:column;gap:0.75rem;align-items:center"><a href="https://volt-test.com/register" target="_blank" rel="noopener noreferrer" class="button button--primary button--lg vt-waitlist-btn" style="width:100%;max-width:320px;text-align:center">Join Waitlist →</a><small style="color:var(--ifm-color-emphasis-500)">Already have an account?<!-- --> <a href="https://volt-test.com/login" target="_blank" rel="noopener noreferrer">Sign in</a></small></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Running load tests directly within PHPUnit using Volt-Test simplifies performance testing for Laravel applications.
It allows developers to maintain a consistent testing workflow, catch performance regressions early, and ensure their applications can handle real-world traffic.
By leveraging existing Volt-Test classes, you can also ensure data integrity under load, making your tests
more robust and reliable.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="learn-more">Learn More<a href="https://php.volt-test.com/blog/laravel-load-testing-with-phpunit#learn-more" class="hash-link" aria-label="Direct link to Learn More" title="Direct link to Learn More" translate="no">​</a></h2>
<ul>
<li><a href="https://github.com/volt-test/laravel-performance-testing/releases/tag/1.2.0" target="_blank" rel="noopener noreferrer">GitHub Release Notes →</a></li>
<li><a href="https://github.com/volt-test/laravel-performance-testing/blob/main/docs/PHPUNIT_INTEGRATION.md" target="_blank" rel="noopener noreferrer">Full PHPUnit Integration Docs →</a></li>
<li><a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk" target="_blank" rel="noopener noreferrer">Previous Article: Effortless Laravel Load Testing with Volt-Test PHP SDK →</a></li>
<li><a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui" target="_blank" rel="noopener noreferrer">Stress Testing Laravel with the Volt-Test Web UI →</a></li>
</ul>
<hr>
<p>⭐ <strong>Star the repository on GitHub:</strong> <a href="https://github.com/volt-test/laravel-performance-testing" target="_blank" rel="noopener noreferrer">volt-test/laravel-performance-testing</a></p>
<p>💬 <strong>Follow updates on X:</strong> <a href="https://x.com/VT_Developers" target="_blank" rel="noopener noreferrer">@VoltTest</a></p>
<hr>]]></content:encoded>
            <category>Laravel</category>
            <category>PHPUnit</category>
            <category>Performance Testing</category>
            <category>Load Testing</category>
            <category>Volt-Test</category>
        </item>
        <item>
            <title><![CDATA[Effortless Laravel Performance Testing with Volt Test PHP SDK]]></title>
            <link>https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk</link>
            <guid>https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk</guid>
            <pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Discover how to seamlessly integrate Volt Test PHP SDK into your Laravel applications for efficient performance testing. Learn to create, run, and analyze tests with ease.]]></description>
            <content:encoded><![CDATA[<p>When your Laravel app hits real traffic, will it <em>fly</em>… or will it <em>fall over</em>?</p>
<p>Most load-testing tools make you jump through hoops — learn a new scripting language, spin up external services, or fight with configs that feel like they belong to another ecosystem.</p>
<p>That’s why I built the <strong>Laravel Performance Testing package</strong>:<br>
<!-- -->a native, PHP-first way to run <strong>load</strong> and <strong>stress tests</strong> right inside your Laravel project — powered by the <a href="https://php.volt-test.com/" target="_blank" rel="noopener noreferrer">Volt Test PHP SDK</a>.</p>
<p>You write your tests in plain PHP, keep them version-controlled with your codebase, and run them with a single Artisan command. No context-switching. No external scripts. Just Laravel, PHP, and the performance insights you need before your users find the bottlenecks.</p>
<p><img decoding="async" loading="lazy" alt="Effortless Laravel Performance Testing with Volt Test PHP SDK" src="https://php.volt-test.com/assets/images/Effortless-Laravel-Performance-Testing-with-Volt-Test-PHP-SDK-7b4efe463d40fdd05705ee5891f609c3.png" width="2400" height="1260" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-i-created-this-package">Why I Created This Package<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#why-i-created-this-package" class="hash-link" aria-label="Direct link to Why I Created This Package" title="Direct link to Why I Created This Package" translate="no">​</a></h2>
<p>About a month ago, I released this package to make performance testing in Laravel:</p>
<ul>
<li><strong>Easier</strong> – no external scripts or frameworks to learn.</li>
<li><strong>Native</strong> – tests live inside your Laravel project.</li>
<li><strong>Flexible</strong> – from simple single-URL load tests to complex multi-step scenarios.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-features">✨ Features<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-features" class="hash-link" aria-label="Direct link to ✨ Features" title="Direct link to ✨ Features" translate="no">​</a></h2>
<ul>
<li><strong>Laravel-friendly integration</strong> – Works seamlessly with routes, middleware, and config.</li>
<li><strong>Artisan commands</strong> – Generate and run tests directly from the CLI.</li>
<li><strong>Automatic route discovery</strong> – Quickly build test scenarios from your existing routes.</li>
<li><strong>Variable extraction</strong> – Reuse cookies, headers, JSON fields, and HTML values between steps.</li>
<li><strong>Data-driven testing</strong> – Feed test data from CSV files for realistic simulations.</li>
<li><strong>Detailed metrics</strong> – Success rate, RPS, average latency, P95 latency, and more.</li>
<li><strong>Report storage</strong> – Save test results for later analysis.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-installation">🚀 Installation<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-installation" class="hash-link" aria-label="Direct link to 🚀 Installation" title="Direct link to 🚀 Installation" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer require volt-test/laravel-performance-testing</span><br></span></code></pre></div></div>
<p>Publish the configuration file:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan vendor:publish --tag=volttest-config</span><br></span></code></pre></div></div>
<p>This creates <code>config/volttest.php</code> where you can tweak settings like default virtual users, duration, and report paths.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-quick-start">⚡ Quick Start<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-quick-start" class="hash-link" aria-label="Direct link to ⚡ Quick Start" title="Direct link to ⚡ Quick Start" translate="no">​</a></h2>
<p>You can run a quick performance test without writing any code:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:run https://example.com/api/login --users=100 --method=POST --body='{"email":"test@example.com","password":"secret"}'</span><br></span></code></pre></div></div>
<p>Or, you can create a reusable test class:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ExampleTest</span><br></span></code></pre></div></div>
<p>This generates <code>app/VoltTests/ExampleTest.php</code>:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">namespace</span><span class="token plain"> </span><span class="token package">App</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTests</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Contracts</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTestCase</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">Laravel</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTestManager</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">class</span><span class="token plain"> </span><span class="token class-name-definition class-name" style="color:rgb(78, 201, 176)">ExampleTest</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">VoltTestCase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function-definition function" style="color:rgb(220, 220, 170)">define</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token class-name type-declaration" style="color:rgb(78, 201, 176)">VoltTestManager</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$manager</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token keyword return-type" style="color:rgb(86, 156, 214)">void</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token variable" style="color:rgb(156, 220, 254)">$manager</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'ExampleTest'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Home Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://example.com'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre></div></div>
<p>Run it with:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:run ExampleTest --users=50 --duration=30</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-route-based-test-generation">🎯 Route-Based Test Generation<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-route-based-test-generation" class="hash-link" aria-label="Direct link to 🎯 Route-Based Test Generation" title="Direct link to 🎯 Route-Based Test Generation" translate="no">​</a></h2>
<p>Skip manual coding by letting the package generate tests from your Laravel routes.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain"># Include all routes</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ApiTest --routes</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"># Filter by pattern</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ApiTest --routes --filter="api/*"</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"># Only GET routes</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ApiTest --routes --method=GET</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"># Only authenticated routes</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ApiTest --routes --auth</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"># Interactive selection</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">php artisan volttest:make ApiTest --routes --select</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-data-driven-testing">📊 Data-Driven Testing<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-data-driven-testing" class="hash-link" aria-label="Direct link to 📊 Data-Driven Testing" title="Direct link to 📊 Data-Driven Testing" translate="no">​</a></h2>
<p>Simulate realistic usage with CSV files:</p>
<p><strong>users.csv</strong></p>
<div class="language-csv codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csv codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">name,email,password</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">John Doe,user1@example.com,password123</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Jane Smith,user2@example.com,password456</span><br></span></code></pre></div></div>
<p><strong>Test definition:</strong></p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$manager</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'RegisterTest'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">dataSource</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'users.csv'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Register User'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'name'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${name}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'email'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${email}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'password'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${password}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-extract--reuse-values">🔍 Extract &amp; Reuse Values<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-extract--reuse-values" class="hash-link" aria-label="Direct link to 🔍 Extract &amp; Reuse Values" title="Direct link to 🔍 Extract &amp; Reuse Values" translate="no">​</a></h2>
<p>You can capture values from responses and reuse them in later steps.</p>
<p><strong>CSRF token from HTML</strong></p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get Login Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractCsrfToken</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'csrf_token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Submit Login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'_token'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'${csrf_token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'email'</span><span class="token plain">  </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'user@example.com'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'password'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'secret'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<p><strong>JSON field</strong></p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get User'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/api/user'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractJson</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'user_id'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'data.id'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<p><strong>Header</strong></p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get Token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/auth'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractHeader</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Authorization'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Bearer ${token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-analyzing-results">📈 Analyzing Results<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-analyzing-results" class="hash-link" aria-label="Direct link to 📈 Analyzing Results" title="Direct link to 📈 Analyzing Results" translate="no">​</a></h2>
<p>After running a test, you’ll see metrics such as:</p>
<ul>
<li>✅ Success rate</li>
<li>⚡ Requests per second (RPS)</li>
<li>⏱ Average &amp; P95 latency</li>
<li>⌛ Duration</li>
<li>❌ Errors</li>
</ul>
<p>If <code>save_reports</code> is enabled, you’ll find detailed reports in:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">storage/volttest/reports</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="-conclusion">🏁 Conclusion<a href="https://php.volt-test.com/blog/effortless-laravel-performance-testing-with-volt-test-php-sdk#-conclusion" class="hash-link" aria-label="Direct link to 🏁 Conclusion" title="Direct link to 🏁 Conclusion" translate="no">​</a></h2>
<p>With <strong>Laravel Performance Testing</strong> powered by the <strong>Volt Test PHP SDK</strong>, you can:</p>
<ul>
<li>Keep performance tests right inside your Laravel project.</li>
<li>Run them with one simple Artisan command.</li>
<li>Get detailed, actionable performance metrics before your users ever notice a slowdown.</li>
</ul>
<p>No separate scripting language. No complex setup. Just <strong>Laravel, PHP, and the truth about your app’s performance</strong>.</p>
<p>📚 <strong>Docs:</strong> <a href="https://github.com/volt-test/laravel-performance-testing" target="_blank" rel="noopener noreferrer">Laravel Performance Testing on GitHub</a><br>
<!-- -->📦 <strong>Volt Test PHP SDK:</strong> <a href="https://php.volt-test.com/" target="_blank" rel="noopener noreferrer">php.volt-test.com</a></p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Pro Tip</div><div class="admonitionContent_BuS1"><p>Integrate Volt-Test into your CI pipeline to catch performance regressions before they hit production.</p></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Closed Beta</div><div class="admonitionContent_BuS1"><p>VoltTest Cloud is now in <strong>closed beta</strong>. Sign up to join the waitlist — we review and approve access in waves.</p><div class="card vt-waitlist-card"><div class="card__body" style="text-align:center;padding:2rem 1.5rem"><span class="badge badge--warning" style="margin-bottom:1rem;display:inline-block;font-size:0.75rem">CLOSED BETA</span><h3 style="margin-bottom:0.5rem">Join Early Access</h3><p style="color:var(--ifm-color-emphasis-600);margin-bottom:0.75rem;line-height:1.6">Sign up to join the waitlist. We review and approve access in waves.</p><div class="alert alert--warning" style="text-align:left;margin-bottom:1.5rem;font-size:0.85rem">VoltTest is currently in <strong>closed beta</strong>. After signing up, your account will be reviewed and you'll be notified once approved.</div><div style="display:flex;flex-direction:column;gap:0.75rem;align-items:center"><a href="https://volt-test.com/register" target="_blank" rel="noopener noreferrer" class="button button--primary button--lg vt-waitlist-btn" style="width:100%;max-width:320px;text-align:center">Join Waitlist →</a><small style="color:var(--ifm-color-emphasis-500)">Already have an account?<!-- --> <a href="https://volt-test.com/login" target="_blank" rel="noopener noreferrer">Sign in</a></small></div></div></div></div></div>]]></content:encoded>
            <category>Laravel</category>
            <category>Performance Testing</category>
            <category>Load Testing</category>
            <category>Stress Testing</category>
            <category>Volt-Test</category>
            <category>PHP SDK</category>
        </item>
        <item>
            <title><![CDATA[Performance Testing: Types and Differences with Examples]]></title>
            <link>https://php.volt-test.com/blog/performance-testing-types</link>
            <guid>https://php.volt-test.com/blog/performance-testing-types</guid>
            <pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn about different types of performance testing with examples and differences between them. By understanding these types, you can choose the right tests to conduct based on your application's requirements.]]></description>
            <content:encoded><![CDATA[<p>Performance testing is an essential process in software development that evaluates a system's responsiveness,
stability, and scalability under different conditions. It helps identify bottlenecks and ensures applications meet performance expectations before deployment.
There are several types of performance testing,
each serving a different purpose.
By understanding these types, you can choose the right tests to conduct based on your application's requirements.
In this article, we will explore these types, their differences, and provide practical examples.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="load-testing">Load Testing<a href="https://php.volt-test.com/blog/performance-testing-types#load-testing" class="hash-link" aria-label="Direct link to Load Testing" title="Direct link to Load Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Load testing measures a system's behavior under <code>expected</code> user loads.
It ensures that the system can handle a specified number of users or transactions simultaneously without degradation in performance.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A SaaS-based school management system is expected to support 10,000 concurrent students during exam submission.
A load test simulates these 10,000 users submitting their answers within a short period to evaluate how the system handles the load.
So Here You know the expected load, you are testing the system under that load.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stress-testing">Stress Testing<a href="https://php.volt-test.com/blog/performance-testing-types#stress-testing" class="hash-link" aria-label="Direct link to Stress Testing" title="Direct link to Stress Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-1">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-1" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Stress testing evaluates a system's behavior under extreme conditions, often <code>beyond its normal operational capacity</code>.
It helps determine the breaking point and whether the system fails gracefully.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-1">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-1" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A cloud-based e-commerce platform is expected to handle 100,000 users during peak shopping hours.
A stress test increases the load gradually to 200,000 users to observe if the system crashes or recovers after failure.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="spike-testing">Spike Testing<a href="https://php.volt-test.com/blog/performance-testing-types#spike-testing" class="hash-link" aria-label="Direct link to Spike Testing" title="Direct link to Spike Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-2">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-2" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Spike testing analyzes how a system handles sudden and extreme increases in load.
It helps identify whether the system scales effectively or crashes under sudden traffic spikes.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-2">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-2" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A ticket booking system for a concert sees an abrupt spike in traffic when tickets go on sale.
A spike test simulates a rapid increase from 1,000 to 50,000 users within a minute to test system stability.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="endurance-testing">Endurance Testing<a href="https://php.volt-test.com/blog/performance-testing-types#endurance-testing" class="hash-link" aria-label="Direct link to Endurance Testing" title="Direct link to Endurance Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-3">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-3" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Endurance testing evaluates a system's performance over an extended period under normal expected loads.
It detects memory leaks, slowdowns, and other long-term performance issues.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-3">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-3" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A banking application undergoes endurance testing by simulating
<code>5,000 users performing transactions continuously over 24 hours</code> to ensure <code>there are no memory leaks</code> or <code>performance degradation</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="scalability-testing">Scalability Testing<a href="https://php.volt-test.com/blog/performance-testing-types#scalability-testing" class="hash-link" aria-label="Direct link to Scalability Testing" title="Direct link to Scalability Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-4">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-4" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Scalability testing assesses a system's ability to handle increased loads by adding resources.
It helps determine how the system scales vertically or horizontally to accommodate more users or transactions.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-4">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-4" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A cloud-based video streaming platform scales horizontally by adding more servers to handle increased user traffic during peak hours.
Or it scales vertically by upgrading server resources to improve performance. then downgrades the resources when the traffic decreases.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="volume-testing">Volume Testing<a href="https://php.volt-test.com/blog/performance-testing-types#volume-testing" class="hash-link" aria-label="Direct link to Volume Testing" title="Direct link to Volume Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-5">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-5" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Volume testing measures how the system performs with a large volume of data.
It helps identify database performance issues, indexing problems, and storage limitations.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-5">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-5" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A CRM system undergoes volume testing by loading <code>1 million customer records</code> to evaluate how the system handles the data volume.
It checks if the system slows down, crashes, or maintains performance with the large dataset.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="latency-testing">Latency Testing<a href="https://php.volt-test.com/blog/performance-testing-types#latency-testing" class="hash-link" aria-label="Direct link to Latency Testing" title="Direct link to Latency Testing" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="definition-6">Definition<a href="https://php.volt-test.com/blog/performance-testing-types#definition-6" class="hash-link" aria-label="Direct link to Definition" title="Direct link to Definition" translate="no">​</a></h3>
<p>Latency testing evaluates a system's response time under different network conditions.
It helps identify delays in data transmission, network congestion, and server processing times.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-6">Example<a href="https://php.volt-test.com/blog/performance-testing-types#example-6" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<p>A real-time multiplayer game undergoes latency testing to measure the time it takes for player actions to reflect on other players' screens.
It simulates high latency, packet loss, and network congestion to observe how the game performs under these conditions.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="differences-between-performance-testing-types">Differences Between Performance Testing Types<a href="https://php.volt-test.com/blog/performance-testing-types#differences-between-performance-testing-types" class="hash-link" aria-label="Direct link to Differences Between Performance Testing Types" title="Direct link to Differences Between Performance Testing Types" translate="no">​</a></h2>
<ul>
<li><strong>Load Testing vs. Stress Testing</strong>: Load testing evaluates a system under expected loads, while stress testing pushes the system beyond its limits.</li>
<li><strong>Spike Testing vs. Endurance Testing</strong>: Spike testing simulates sudden load spikes, while endurance testing evaluates long-term performance.</li>
<li><strong>Scalability Testing vs. Volume Testing</strong>: Scalability testing assesses the system's ability to scale, while volume testing measures performance with large data volumes.</li>
<li><strong>Latency Testing</strong>: Latency testing evaluates response times under different network conditions.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://php.volt-test.com/blog/performance-testing-types#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Performance testing is crucial for ensuring software applications meet performance expectations and deliver a seamless user experience.
By understanding the different types of performance testing and their purposes, you can identify the right tests to conduct based on your application's requirements.
Whether you need to evaluate expected loads, extreme conditions, scalability, or latency, performance testing helps you optimize your system for peak performance.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Stress Testing Laravel Applications with VoltTest (Web UI Flow)]]></title>
            <link>https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui</link>
            <guid>https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui</guid>
            <pubDate>Fri, 28 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This tutorial walks you through setting up and executing stress tests on a Laravel application using the VoltTest PHP SDK. You will learn how to simulate real user interactions such as visiting the home page, registering a new user, and accessing the dashboard, ensuring your application can handle concurrent traffic efficiently.]]></description>
            <content:encoded><![CDATA[<p>In this tutorial, we will explore how to perform stress testing on a Laravel application using the VoltTest PHP SDK. You will learn how to:</p>
<ul>
<li>Simulate multiple users interacting with your Laravel application.</li>
<li>Test user registration and authentication workflows.</li>
<li>Measure application performance under load.</li>
<li>Extract dynamic values like CSRF tokens during test execution.</li>
<li>Use a CSV file as a data source for testing.</li>
<li>Analyze and optimize performance bottlenecks.</li>
</ul>
<p>By the end of this guide, you will be able to confidently run automated performance tests to ensure your Laravel app is scalable and resilient.</p>
<p><img decoding="async" loading="lazy" alt="Stress Testing Laravel Applications with VoltTest" src="https://php.volt-test.com/assets/images/stress-testing-laravel-web-ui-9fba25ff85906a67db7e909ee80eeb7c.png" width="4800" height="2700" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<p>Ensure you have the following:</p>
<ul>
<li>A running Laravel application</li>
<li>PHP 8.0 or higher</li>
<li>Composer installed</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-volttest-php-sdk">Installing VoltTest PHP SDK<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#installing-volttest-php-sdk" class="hash-link" aria-label="Direct link to Installing VoltTest PHP SDK" title="Direct link to Installing VoltTest PHP SDK" translate="no">​</a></h2>
<p>First, install the VoltTest PHP SDK via Composer in your Laravel project:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Terminal</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer require volt-test/php-sdk</span><br></span></code></pre></div></div>
<p>Or clone the repository:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Terminal</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">git clone https://github.com/volt-test/php-sdk.git</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">cd php-sdk</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer install</span><br></span></code></pre></div></div>
<p><strong>For <em>Windows</em> users,</strong> Visit the installation guide <a href="https://php.volt-test.com/docs/installation#running-on-windows" target="_blank" rel="noopener noreferrer">here</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-test-data">Creating Test Data<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#creating-test-data" class="hash-link" aria-label="Direct link to Creating Test Data" title="Direct link to Creating Test Data" translate="no">​</a></h2>
<p>For a realistic test, create a CSV file (<code>users.csv</code>) with test user data:</p>
<div class="language-csv codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">users.csv</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csv codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">email,password</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">user1@example.com,password123</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">user2@example.com,password123</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">user3@example.com,password123</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">user4@example.com,password123</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">user5@example.com,password123</span><br></span></code></pre></div></div>
<p>Place this file in your project directory.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="writing-the-stress-test">Writing the Stress Test<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#writing-the-stress-test" class="hash-link" aria-label="Direct link to Writing the Stress Test" title="Direct link to Writing the Stress Test" translate="no">​</a></h2>
<p>Create a file named <code>laravel_stress_test.php</code> in your project root and add the following script (or you can use the laravel's command):</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token delimiter important">&lt;?php</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">require</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'vendor/autoload.php'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">DataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Define test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">VoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Laravel User Flow'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Tests home page visit, user registration, and dashboard access'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Configure test parameters</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setVirtualUsers</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">5</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'60s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Optional: Set test duration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setRampUp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'10s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Optional: Set ramp-up time</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setHttpDebug</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Enable HTTP debug logging for checking requests before sending the all requests</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Create test scenario</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'User Registration Flow'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">autoHandleCookies</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Automatically handle cookies without extract them</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Set up data source</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">DataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">__Dir__ </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/users.csv'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'unique'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Load data from CSV file, should be the full path</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 1: Visit home page</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Home Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'home_page_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'2s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 2: Visit register page and extract CSRF token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Register Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractFromHtml</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'csrf_token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'input[name="_token"]'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'value'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'register_page_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'2s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 3: Submit registration form</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Submit Registration'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'_token=${csrf_token}&amp;name=Test User&amp;email=${email}&amp;password=${password}&amp;password_confirmation=${password}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/x-www-form-urlencoded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'registration_successful'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">302</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'1s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Step 4: Access dashboard</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Dashboard'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/dashboard'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'dashboard_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'3s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Run test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">run</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// true enables real-time progress output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Display results summary in case you turned off the real-time progress output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n\nTest Results Summary:\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"====================\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Total Requests: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getTotalRequests</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Success Rate: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getSuccessRate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"%\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Requests/second: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getRequestsPerSecond</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Min Response Time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getMinResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Max Response Time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getMaxResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Avg Response Time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getAvgResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"P95 Response Time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getP95ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="code-explanation">Code Explanation<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#code-explanation" class="hash-link" aria-label="Direct link to Code Explanation" title="Direct link to Code Explanation" translate="no">​</a></h3>
<p>The stress test script simulates multiple users interacting with a Laravel web application. Here’s how it works:</p>
<ol>
<li><strong>Initialize VoltTest</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">VoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Laravel User Flow'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Tests home page visit, user registration, and dashboard access'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Creates a new test instance with a descriptive name.</li>
</ul>
<ol start="2">
<li><strong>Configure test parameters</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setVirtualUsers</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">5</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'60s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setRampUp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'10s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setHttpDebug</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li><strong>5 virtual users</strong>: Simulate 5 concurrent users.</li>
<li><strong>Running the test for 60 seconds</strong>: Optional - you can remove this line to run the test and finish when all virtual users finish their scenarios.</li>
<li><strong>Ramping up over 10 seconds</strong>: Optional - you can remove this line to start all virtual users at the same time.</li>
<li><strong>Enables HTTP debug logging</strong>: Optional - Inspect requests while sending them.</li>
</ul>
<ol start="3">
<li><strong>Create a test scenario</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'User Registration Flow'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">autoHandleCookies</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Creates a scenario for user registration flow.</li>
<li><strong>autoHandleCookies()</strong>: Automatically handles cookies without extracting them.</li>
</ul>
<ol start="4">
<li><strong>Set up data source</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">DataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">__Dir__ </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'/users.csv'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'unique'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Loads user data from <code>users.csv</code> file. To simulate different users for each virtual user.</li>
</ul>
<ol start="5">
<li><strong>Define test steps</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Home Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'home_page_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'2s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li><strong>Visit Home Page</strong>: Sends a GET request to the home page.</li>
<li><strong>Accept header</strong>: Optional - Specifies the expected response content type.</li>
<li><strong>Validate Status</strong>: Optional - Checks if the response status is 200.</li>
<li><strong>Think Time</strong>: Optional -  Simulates user thinking time before the next step, so the virtual user will wait 2s before execute the next request.</li>
</ul>
<ol start="6">
<li><strong>Extract CSRF token from registration page</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Register Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractFromHtml</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'csrf_token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'input[name="_token"]'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'value'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'register_page_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'2s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Visits the registration page.</li>
<li>Extracts the CSRF token from the HTML response. The token is stored in the variable <code>${csrf_token}</code>.<!-- -->
<ul>
<li>The way to extract the token is by using the <code>extractFromHtml</code> method, which takes the token name, the selector, and the attribute name.</li>
</ul>
</li>
</ul>
<ol start="7">
<li><strong>Submit registration form</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Submit Registration'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/register'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'_token=${csrf_token}&amp;name=Test User&amp;email=${email}&amp;password=${password}&amp;password_confirmation=${password}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/x-www-form-urlencoded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'registration_successful'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">302</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'1s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Submits the registration form with the extracted CSRF token and user data.</li>
<li>Validates the response status code.</li>
<li>Sets a 1-second think time before the next step.</li>
<li>The <code>${email}</code> and <code>${password}</code> variables are replaced with values from the CSV file.</li>
<li>The <code>${csrf_token}</code> variable is replaced with the extracted CSRF token.</li>
<li>The <code>validateStatus</code> method checks if the response status is 302 (redirect).</li>
<li>The <code>setThinkTime</code> method simulates user thinking time before the next step.</li>
</ul>
<ol start="8">
<li><strong>Access dashboard</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$userFlowScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Visit Dashboard'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'http://localhost:8000/dashboard'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Accept'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'text/html'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'dashboard_loaded'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setThinkTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'3s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<p>Ensures successful login by verifying dashboard access.</p>
<ol start="9">
<li><strong>Run the test</strong>:</li>
</ol>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">laravel_stress_test.php</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">run</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<ul>
<li>Executes the test with real-time progress output.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="running-the-test">Running the Test<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#running-the-test" class="hash-link" aria-label="Direct link to Running the Test" title="Direct link to Running the Test" translate="no">​</a></h2>
<p>Execute the script:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">php laravel_stress_test.php</span><br></span></code></pre></div></div>
<p>You'll see real-time progress, followed by a summary of test results.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="analyzing-results">Analyzing Results<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#analyzing-results" class="hash-link" aria-label="Direct link to Analyzing Results" title="Direct link to Analyzing Results" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="key-metrics">Key Metrics:<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#key-metrics" class="hash-link" aria-label="Direct link to Key Metrics:" title="Direct link to Key Metrics:" translate="no">​</a></h3>
<ul>
<li><strong>Success Rate</strong>: Should be as close to 100% as possible</li>
<li><strong>Response Times</strong>: Lower is better</li>
<li><strong>Requests per Second</strong>: Higher means better scalability</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="common-issues--fixes">Common Issues &amp; Fixes<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#common-issues--fixes" class="hash-link" aria-label="Direct link to Common Issues &amp; Fixes" title="Direct link to Common Issues &amp; Fixes" translate="no">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="low-success-rate">Low Success Rate<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#low-success-rate" class="hash-link" aria-label="Direct link to Low Success Rate" title="Direct link to Low Success Rate" translate="no">​</a></h3>
<ul>
<li><strong>Possible Cause</strong>: Server overload</li>
<li><strong>Solution</strong>: Reduce virtual users or optimize queries</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="high-response-times">High Response Times<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#high-response-times" class="hash-link" aria-label="Direct link to High Response Times" title="Direct link to High Response Times" translate="no">​</a></h3>
<ul>
<li><strong>Possible Cause</strong>: Database bottlenecks</li>
<li><strong>Solution</strong>: Optimize queries, enable caching</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="csrf-token-extraction-fails">CSRF Token Extraction Fails<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#csrf-token-extraction-fails" class="hash-link" aria-label="Direct link to CSRF Token Extraction Fails" title="Direct link to CSRF Token Extraction Fails" translate="no">​</a></h3>
<ul>
<li><strong>Possible Cause</strong>: HTML structure changes</li>
<li><strong>Solution</strong>: Update the selector</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next Steps<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<ul>
<li>Expand tests to cover more user flows</li>
<li>Test with more virtual users</li>
<li>Automate stress tests in CI/CD pipelines</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Using VoltTest for stress testing helps identify Laravel application bottlenecks before they impact users. Regular testing ensures scalability and reliability.</p>
<p>Stay tuned for our next guide on <strong>Stress Testing Laravel APIs with VoltTest</strong>!</p>
<p>Happy testing!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-in-touch">Get in Touch<a href="https://php.volt-test.com/blog/stress-testing-laravel-with-volt-test-web-ui#get-in-touch" class="hash-link" aria-label="Direct link to Get in Touch" title="Direct link to Get in Touch" translate="no">​</a></h2>
<p>For questions, discussions, or contributions, feel free to open an issue or start a discussion on the Volt-Test GitHub repository:
<a href="https://github.com/volt-test/php-sdk" target="_blank" rel="noopener noreferrer">https://github.com/volt-test/php-sdk</a></p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Closed Beta</div><div class="admonitionContent_BuS1"><p>VoltTest Cloud is now in <strong>closed beta</strong>. Sign up to join the waitlist — we review and approve access in waves.</p><div class="card vt-waitlist-card"><div class="card__body" style="text-align:center;padding:2rem 1.5rem"><span class="badge badge--warning" style="margin-bottom:1rem;display:inline-block;font-size:0.75rem">CLOSED BETA</span><h3 style="margin-bottom:0.5rem">Join Early Access</h3><p style="color:var(--ifm-color-emphasis-600);margin-bottom:0.75rem;line-height:1.6">Sign up to join the waitlist. We review and approve access in waves.</p><div class="alert alert--warning" style="text-align:left;margin-bottom:1.5rem;font-size:0.85rem">VoltTest is currently in <strong>closed beta</strong>. After signing up, your account will be reviewed and you'll be notified once approved.</div><div style="display:flex;flex-direction:column;gap:0.75rem;align-items:center"><a href="https://volt-test.com/register" target="_blank" rel="noopener noreferrer" class="button button--primary button--lg vt-waitlist-btn" style="width:100%;max-width:320px;text-align:center">Join Waitlist →</a><small style="color:var(--ifm-color-emphasis-500)">Already have an account?<!-- --> <a href="https://volt-test.com/login" target="_blank" rel="noopener noreferrer">Sign in</a></small></div></div></div></div></div>]]></content:encoded>
            <category>Laravel</category>
            <category>Performance Testing</category>
            <category>Load Testing</category>
            <category>Volt-Test</category>
            <category>Stress Test</category>
        </item>
        <item>
            <title><![CDATA[Introducing Volt-Test: Stress & Load Testing for PHP Developers]]></title>
            <link>https://php.volt-test.com/blog/introducing-volt-test-php-load-testing</link>
            <guid>https://php.volt-test.com/blog/introducing-volt-test-php-load-testing</guid>
            <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Performance testing is crucial in modern application development, yet many developers skip it due to complex tools that don’t fit into PHP workflows. Today, I'm excited to introduce VoltTest PHP SDK, a powerful load testing tool with a PHP-native interface backed by Go's exceptional performance capabilities.]]></description>
            <content:encoded><![CDATA[<p>Performance testing is crucial in modern application development, yet many developers skip it due to complex tools that don’t fit into PHP workflows. Today, I'm excited to introduce <strong>VoltTest PHP SDK</strong>, a powerful load testing tool with a PHP-native interface backed by Go's exceptional performance capabilities.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="problem">Problem<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#problem" class="hash-link" aria-label="Direct link to Problem" title="Direct link to Problem" translate="no">​</a></h2>
<p>As a PHP developer, I’ve often faced a common challenge: existing performance testing tools often require learning a new language, platform, or configuration syntax. This cognitive overhead leads many teams to defer proper load testing or rely on third-party services, creating additional costs and dependencies.</p>
<p>VoltTest bridges this gap by providing:</p>
<ul>
<li>A <strong>fluent, intuitive PHP API</strong> that feels natural to PHP developers</li>
<li>The <strong>raw power of Go</strong> for generating heavy loads with minimal resources</li>
<li><strong>No additional infrastructure</strong> requirements beyond your existing PHP environment</li>
<li><strong>Comprehensive metrics</strong> to identify bottlenecks and performance issues</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-volttest-works-php-interface-go-engine">How VoltTest Works: PHP Interface, Go Engine<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#how-volttest-works-php-interface-go-engine" class="hash-link" aria-label="Direct link to How VoltTest Works: PHP Interface, Go Engine" title="Direct link to How VoltTest Works: PHP Interface, Go Engine" translate="no">​</a></h2>
<p>VoltTest employs a unique dual-language architecture that delivers the best of both worlds:</p>
<ol>
<li>Your <strong>PHP code</strong> defines test scenarios, configurations, and validation rules</li>
<li>The <strong>SDK</strong> transforms these definitions into a format the Go engine understands</li>
<li>The <strong>Go engine</strong> executes the actual load testing with true concurrency</li>
<li><strong>Results</strong> are streamed back to your PHP application for analysis</li>
</ol>
<p>This architecture allows you to write and maintain tests in familiar PHP syntax while benefiting from Go's exceptional performance characteristics for the load generation.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-features">Key Features<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h2>
<ul>
<li><strong>Fluent API</strong>: Natural, chainable PHP methods for defining test scenarios</li>
<li><strong>Multi-scenario support</strong>: Test different user flows with configurable weight distribution</li>
<li><strong>Variable extraction</strong>: Capture and reuse values from responses (cookies, headers, JSON paths and HTML)</li>
<li><strong>Data-driven testing</strong>: Feed tests with CSV files to simulate realistic user data</li>
<li><strong>Detailed metrics</strong>: Get comprehensive performance insights including response times, throughput, and error rates</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started-with-volttest">Getting Started with VoltTest<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#getting-started-with-volttest" class="hash-link" aria-label="Direct link to Getting Started with VoltTest" title="Direct link to Getting Started with VoltTest" translate="no">​</a></h2>
<p>Let's create a simple performance test to demonstrate VoltTest's capabilities:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token delimiter important">&lt;?php</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">use</span><span class="token plain"> </span><span class="token package">VoltTest</span><span class="token package punctuation" style="color:rgb(212, 212, 212)">\</span><span class="token package">VoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Create a new test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">VoltTest</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'API Performance Test'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Tests our REST API under load'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Configure test parameters</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setVirtualUsers</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">50</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">      </span><span class="token comment" style="color:rgb(106, 153, 85)">// Number of concurrent users</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'30s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">       </span><span class="token comment" style="color:rgb(106, 153, 85)">// Test duration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setRampUp</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'5s'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">          </span><span class="token comment" style="color:rgb(106, 153, 85)">// Gradually ramp up to full load</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setHttpDebug</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain">     </span><span class="token comment" style="color:rgb(106, 153, 85)">// Disable HTTP debug output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Create a test scenario</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$apiScenario</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">scenario</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'API Flow'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setWeight</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">100</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain">           </span><span class="token comment" style="color:rgb(106, 153, 85)">// Full weight (100%) to this scenario</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Define the first step - Get auth token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$apiScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get Token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://api.example.com/auth'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'{"username":"test","password":"test123"}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Content-Type'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'application/json'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractFromJson</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'data.token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Extract token from response</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Define the second step - Use the token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$apiScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get User Data'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://api.example.com/users/me'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">header</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Authorization'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Bearer ${token}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Use extracted token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Run the test</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">run</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// true enables real-time progress output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Display results</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Success Rate: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getSuccessRate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"%\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Requests/sec: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getRequestsPerSecond</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Avg Response: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getAvgResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"P95 Response: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getP95ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="advanced-features-testing-with-real-world-data">Advanced Features: Testing with Real-World Data<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#advanced-features-testing-with-real-world-data" class="hash-link" aria-label="Direct link to Advanced Features: Testing with Real-World Data" title="Direct link to Advanced Features: Testing with Real-World Data" translate="no">​</a></h2>
<p>VoltTest supports data-driven testing with CSV files, allowing you to simulate diverse user behaviors:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// users.csv contains columns: email,password,user_id</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$loginScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">setDataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">DataSourceConfiguration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'users.csv'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'random'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token constant boolean" style="color:rgb(100, 102, 149)">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Now you can reference CSV columns in your requests</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$loginScenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://example.com/login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'email=${email}&amp;password=${password}'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Variables from CSV</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="extracting-and-using-dynamic-values">Extracting and Using Dynamic Values<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#extracting-and-using-dynamic-values" class="hash-link" aria-label="Direct link to Extracting and Using Dynamic Values" title="Direct link to Extracting and Using Dynamic Values" translate="no">​</a></h2>
<p>One of VoltTest's most powerful features is its ability to extract and reuse values from responses:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// Extract CSRF token from HTML response</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Get Login Page'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://example.com/login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">extractFromHtml</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'csrf_token'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'input[name="_token"]'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'value'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">200</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Use the extracted token in the next request</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token variable" style="color:rgb(156, 220, 254)">$scenario</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">step</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'Submit Login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">post</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'https://example.com/login'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'_token=${csrf_token}&amp;email=user@example.com&amp;password=secret'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">validateStatus</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string single-quoted-string" style="color:rgb(206, 145, 120)">'success'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">302</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Expecting a redirect</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-your-results">Understanding Your Results<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#understanding-your-results" class="hash-link" aria-label="Direct link to Understanding Your Results" title="Direct link to Understanding Your Results" translate="no">​</a></h2>
<p>VoltTest provides comprehensive metrics to analyze performance:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$test</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">run</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Access detailed metrics</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Test duration: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getDuration</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Total requests: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getTotalRequests</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Success rate: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getSuccessRate</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"%\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Requests/second: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getRequestsPerSecond</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Min response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getMinResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Max response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getMaxResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Avg response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getAvgResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"Median response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getMedianResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"P95 response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getP95ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">echo</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"P99 response time: "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token variable" style="color:rgb(156, 220, 254)">$result</span><span class="token operator" style="color:rgb(212, 212, 212)">-&gt;</span><span class="token function" style="color:rgb(220, 220, 170)">getP99ResponseTime</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">.</span><span class="token plain"> </span><span class="token string double-quoted-string" style="color:rgb(206, 145, 120)">"\n"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-volttest-created">Why VoltTest Created<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#why-volttest-created" class="hash-link" aria-label="Direct link to Why VoltTest Created" title="Direct link to Why VoltTest Created" translate="no">​</a></h2>
<p>As PHP developers, I’ve often found performance testing to be a challenge. Existing tools like JMeter, Gatling or Locust are powerful but require learning new syntax, languages or complex GUIs. We wanted a tool that would:</p>
<ol>
<li><strong>Feel native to PHP developers</strong> with an intuitive, fluent API</li>
<li><strong>Handle serious load testing</strong> without requiring huge resources</li>
<li><strong>Integrate seamlessly</strong> with PHP codebases and workflows</li>
<li><strong>Provide comprehensive metrics</strong> with minimal configuration</li>
</ol>
<p>VoltTest achieves this through a unique architecture that lets you write your tests in familiar PHP syntax while leveraging Go's exceptional performance capabilities for the actual load generation.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-makes-volttest-different">What Makes VoltTest Different?<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#what-makes-volttest-different" class="hash-link" aria-label="Direct link to What Makes VoltTest Different?" title="Direct link to What Makes VoltTest Different?" translate="no">​</a></h2>
<p>Unlike traditional PHP-based testing tools that struggle with concurrency limitations, VoltTest uses a high-performance Go engine that runs behind the scenes. This gives you:</p>
<ul>
<li><strong>True concurrent users</strong> instead of PHP's process-based concurrency</li>
<li><strong>Minimal resource usage</strong> even when simulating thousands of users</li>
<li><strong>Accurate timing and metrics</strong> collection for detailed analysis</li>
</ul>
<p>VoltTest brings modern stress testing to PHP with an intuitive API and high-performance Go engine. No new languages, no complex setup—just performance insights when you need them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>VoltTest PHP SDK brings enterprise-grade performance testing capabilities to PHP developers with a familiar, easy-to-use API. By combining PHP's developer-friendly syntax with Go's raw performance power, VoltTest enables teams to integrate load testing directly into their development workflows without additional infrastructure or expertise.</p>
<p>Whether you're building APIs, websites, or complex applications, VoltTest gives you the tools to ensure your PHP applications can handle real-world traffic with confidence.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="https://php.volt-test.com/blog/introducing-volt-test-php-load-testing#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>💡 Ready to test your PHP app’s performance? Try Volt-Test today! 🚀</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">composer require volt-test/php-sdk</span><br></span></code></pre></div></div>
<p>For more examples and detailed documentation, visit <a href="https://php.volt-test.com/docs/category/examples" target="_blank" rel="noopener noreferrer">Examples Page in docs</a>.</p>]]></content:encoded>
            <category>Stress Test</category>
            <category>Performance Testing</category>
            <category>PHP</category>
            <category>Load Testing</category>
            <category>Volt-Test</category>
        </item>
    </channel>
</rss>