| <!DOCTYPE html> | |
| <html lang="en"> | |
| <!-- Global site tag (gtag.js) - Google Analytics --> | |
| <script async src="https://www.googletagmanager.com/gtag/js?id=UA-112407000-2"></script> | |
| <script> | |
| window.dataLayer = window.dataLayer || []; | |
| function gtag() { | |
| dataLayer.push(arguments); | |
| } | |
| gtag('js', new Date()); | |
| gtag('config', 'UA-112407000-2'); | |
| </script> | |
| <!-- Google Tag Manager --> | |
| <script> | |
| (function (w, d, s, l, i) { | |
| w[l] = w[l] || []; | |
| w[l].push({ | |
| 'gtm.start': new Date().getTime(), | |
| event: 'gtm.js' | |
| }); | |
| var f = d.getElementsByTagName(s)[0], | |
| j = d.createElement(s), | |
| dl = l != 'dataLayer' ? '&l=' + l : ''; | |
| j.async = true; | |
| j.src = | |
| 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; | |
| f.parentNode.insertBefore(j, f); | |
| })(window, document, 'script', 'dataLayer', 'GTM-KS8HHSF'); | |
| </script> | |
| <!-- End Google Tag Manager --> | |
| <head> | |
| <base href="/codewind/" /> | |
| <title>Performance testing your project | Codewind</title> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <meta name="description" content="Performance testing"> | |
| <meta name="keywords" content="using, coding, code, edit, log, App monitor, test plan, performance, run load, metrics, load test directory, load tester, payload, endpoint, passing a payloa..."/> | |
| <link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png"> | |
| <link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png"> | |
| <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:300,400,600&display=swap" rel="stylesheet"> | |
| <!-- Bootstrap CSS CDN --> | |
| <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" | |
| integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> | |
| <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> | |
| <link rel="stylesheet" href="css/styles.css"> | |
| <link rel="stylesheet" href="css/docs.css"> | |
| </head> | |
| <body data-spy="scroll" data-target="#toc"> | |
| <!-- Google Tag Manager (noscript) --> | |
| <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KS8HHSF" | |
| height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> | |
| <!-- End Google Tag Manager (noscript) --> | |
| <div class="main"> | |
| <!-- Bootstrap NavBar --> | |
| <nav class="navbar navbar-expand-lg navbar-light cw-banner fixed-top"> | |
| <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" | |
| data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" | |
| aria-label="Toggle navigation"> | |
| <span class="navbar-toggler-icon"></span> | |
| </button> | |
| <a class="navbar-brand" href=""> | |
| <img src="images/header-logo.svg" class="cw-header-logo" alt=""> | |
| </a> | |
| <div class="collapse navbar-collapse justify-content-end cw-navbar-padding" id="navbarNavDropdown"> | |
| <ul class="navbar-nav cw-navbar-nav"> | |
| <li class="nav-item cw-navbar-item cw-header-link"> | |
| <a class="nav-link cw-nav-link" href="docindex.html">Docs</a> | |
| </li> | |
| <!-- li class="nav-item cw-navbar-item" id="download-li"> | |
| <button onClick="window.location.href='https://microclimate.dev/download/codewind';" type="button" class="btn cw-download-button">Download</button> | |
| <a href="https://microclimate.dev/download/codewind" class="nav-link cw-nav-link cw-download-link" href="#">Download</a> | |
| </li> --> | |
| <li class="nav-item cw-navbar-item" id="github-stars-button"> | |
| <!-- Place this tag where you want the button to render. --> | |
| <a class="github-button" href="https://github.com/eclipse/codewind" data-size="large" | |
| data-show-count="true" aria-label="Star eclipse/codewind on GitHub">Star</a> | |
| </li> | |
| <!-- Smaller devices menu END --> | |
| </ul> | |
| </div> | |
| </nav> | |
| <!-- NavBar END --> | |
| <!-- Bootstrap row --> | |
| <div class="row" id="body-row"> | |
| <!-- Sidebar --> | |
| <div id="sidebar-container" class="bg-light"> | |
| <!-- Bootstrap List Group --> | |
| <ul class="list-group sticky-top bg-light cw-sticky-offset"> | |
| <!-- Separator with title --> | |
| <li class="list-group-item cw-sidebar-separator-title cw-text-gray d-flex bg-light align-items-center menu-collapsed"> | |
| <small class="badge badge-success cw-margin-auto">DOCUMENTS</small> | |
| </li> | |
| <!-- /END Separator --> | |
| <!-- Hard coded TOC --> | |
| <a href="#install_on_cloud" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Installing and Using Codewind on Cloud</span> | |
| <span class="submenu-icon ml-auto"></span> | |
| </div> | |
| </a> | |
| <div id="install_on_cloud" class="cw-sidebar-div cw-sidebar-submenu collapse" style=""> | |
| <a href="installoncloud" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Installing and Using Codewind on Kubernetes</span> | |
| </div> | |
| </a> | |
| <a href="supportingmultipleusers" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Support for multiple users</span> | |
| </div> | |
| </a> | |
| <a href="viewkibanalogs" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Viewing logs using Kibana in IBM Cloud Private</span> | |
| </div> | |
| </a> | |
| </div> | |
| <a href="installlocally" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Installing Codewind locally</span> | |
| </div> | |
| </a> | |
| <a href="#codewind_for_eclipse" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Codewind for Eclipse</span> | |
| <span class="submenu-icon ml-auto"></span> | |
| </div> | |
| </a> | |
| <div id="codewind_for_eclipse" class="cw-sidebar-div cw-sidebar-submenu collapse" style=""> | |
| <a href="mdteclipseoverview" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Overview</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipsegettingstarted" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Installation and Getting Started</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipsemanagingprojects" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Managing Codewind projects</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipsebuildproject" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Building Codewind projects</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipsedebugproject" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Debugging Codewind projects</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipsetroubleshooting" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Troubleshooting</span> | |
| </div> | |
| </a> | |
| <a href="mdteclipseuninstall" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Uninstalling</span> | |
| </div> | |
| </a> | |
| </div> | |
| <a href="#codewind_for_vscode" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Codewind for VS Code</span> | |
| <span class="submenu-icon ml-auto"></span> | |
| </div> | |
| </a> | |
| <div id="codewind_for_vscode" class="cw-sidebar-div cw-sidebar-submenu collapse" style=""> | |
| <a href="mdt-vsc-overview" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Overview</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-getting-started" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Getting started</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-tutorial" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Tutorial</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-commands-overview" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Commands overview</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-commands-project" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Project commands</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-commands-restart-and-debug" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Restart and debug commands</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-troubleshooting" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Troubleshooting</span> | |
| </div> | |
| </a> | |
| <a href="mdt-vsc-uninstall" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Uninstalling</span> | |
| </div> | |
| </a> | |
| </div> | |
| <a href="#configuring_codewind" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Configuring Codewind</span> | |
| <span class="submenu-icon ml-auto"></span> | |
| </div> | |
| </a> | |
| <div id="configuring_codewind" class="cw-sidebar-div cw-sidebar-submenu collapse" style=""> | |
| <a href="usingadifferenttemplate" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Using a template repository of your own</span> | |
| </div> | |
| </a> | |
| </div> | |
| <a href="guide_performance" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Guide: Monitoring applications with the performance dashboard</span> | |
| </div> | |
| </a> | |
| <a href="uninstall" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Uninstalling Codewind</span> | |
| </div> | |
| </a> | |
| <a href="troubleshooting" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Troubleshooting</span> | |
| </div> | |
| </a> | |
| <a href="limitations" | |
| class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Limitations</span> | |
| </div> | |
| </a> | |
| <!-- END hard coded TOC --> | |
| <!-- Separator without title --> | |
| <li class="list-group-item cw-sidebar-separator-title bg-light cw-text-gray d-flex align-items-center menu-collapsed"> | |
| <small class="badge badge-success cw-margin-auto">HELPFUL | |
| LINKS</small> | |
| </li> | |
| <!-- /END Separator --> | |
| <a href="https://projects.eclipse.org/proposals/eclipse-codewind" class="bg-light list-group-item list-group-item-action"> | |
| <div class="d-flex w-100 justify-content-start align-items-center"> | |
| <span class="menu-collapsed">Eclipse Codewind project page</span> | |
| </div> | |
| </a> | |
| <!-- Logo --> | |
| <li class="list-group-item cw-logo-separator bg-light d-flex justify-content-center"> | |
| <img src="images/header-logo.svg"> | |
| </li> | |
| </ul> | |
| <!-- List Group END--> | |
| </div> | |
| <!-- sidebar-container END --> | |
| <!-- MAIN --> | |
| <div id="content-container" class="py-5 px-5"> | |
| <div role="main"><h1 id="performance-testing-your-project">Performance testing your project</h1> | |
| <p>Microclimate has a built in load tester that lets you drive data through your application to test its performance. When you first run the load tester, Microclimate generates a basic configuration for you. You can then customize this configuration for your application.</p> | |
| <p>Follow the steps to edit and test your code:</p> | |
| <ol> | |
| <li>Select a project or generate a new project.</li> | |
| <li>To generate the initial test plan, click the <strong>App monitor</strong> tab, and then click the <strong>Run load</strong> button. You start to see the graphs on the screen indicating that the run load test is running. To cancel the run load test, click <strong>Cancel load</strong>.</li> | |
| <li> | |
| <p>Click the <strong>Edit code</strong> tab and expand your project directory. From the directory, you can access <code class="highlighter-rouge">load-test</code>><code class="highlighter-rouge">config.json</code> and edit the code in the <code class="highlighter-rouge">config.json</code> file. For example, you can add your own endpoints or change the number of threads that are running. The default <code class="highlighter-rouge">config.json</code> contains the following information:</p> | |
| <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | |
| </span><span class="s2">"path"</span><span class="p">:</span><span class="s2">"/"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"requestsPerSecond"</span><span class="p">:</span><span class="s2">"100"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"concurrency"</span><span class="p">:</span><span class="s2">"20"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"maxSeconds"</span><span class="p">:</span><span class="s2">"120"</span><span class="w"> | |
| </span><span class="p">}</span><span class="w"> | |
| </span></code></pre></div> </div> | |
| <p>Where:</p> | |
| <p><code class="highlighter-rouge">path</code> is the endpoint of the application to test.</p> | |
| <p><code class="highlighter-rouge">requestsPerSecond</code> is the number of requests to send to the endpoint every second.</p> | |
| <p><code class="highlighter-rouge">concurrency</code> is the number of multiple users to simulate hitting the endpoint.</p> | |
| <p><code class="highlighter-rouge">maxSeconds</code> is how long to run the test for.</p> | |
| <p>This default configuration performs a <code class="highlighter-rouge">GET</code> request on the <code class="highlighter-rouge">/</code> endpoint, <code class="highlighter-rouge">100</code> times a second, for <code class="highlighter-rouge">20</code> users, for <code class="highlighter-rouge">120</code> seconds.</p> | |
| </li> | |
| </ol> | |
| <h2 id="passing-a-payload-to-an-endpoint">Passing a payload to an endpoint</h2> | |
| <p>To modify the configuration to pass an object to endpoint, include the following additional fields:</p> | |
| <p><code class="highlighter-rouge">method</code> is the method to use: POST, PUT. The default is GET.</p> | |
| <p><code class="highlighter-rouge">contentType</code> is the MIME type to use for the body. The default content type is text/plain.</p> | |
| <p><code class="highlighter-rouge">body</code> is the contents to send in the body of the message for POST or PUT requests; this can be a string or an object which is converted to JSON.</p> | |
| <p>For example, the following <code class="highlighter-rouge">config.json</code> sends the json object to the <code class="highlighter-rouge">/api/v1/hello</code> endpoint for <code class="highlighter-rouge">5</code> seconds.</p> | |
| <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | |
| </span><span class="s2">"method"</span><span class="p">:</span><span class="s2">"POST"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"contentType"</span><span class="p">:</span><span class="s2">"application/JSON"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"body"</span><span class="p">:{</span><span class="s2">"message"</span><span class="p">:</span><span class="s2">"microclimate"</span><span class="p">},</span><span class="w"> | |
| </span><span class="s2">"path"</span><span class="p">:</span><span class="s2">"/api/v1/hello"</span><span class="p">,</span><span class="w"> | |
| </span><span class="s2">"maxSeconds"</span><span class="p">:</span><span class="s2">"5"</span><span class="w"> | |
| </span><span class="p">}</span><span class="w"> | |
| </span></code></pre></div></div> | |
| <p>Where the json object is defined as:</p> | |
| <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> </span><span class="s2">"message"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"microclimate"</span><span class="p">}</span><span class="w"> | |
| </span></code></pre></div></div> | |
| <p>For a full list of options, see the <a href="https://www.npmjs.com/package/loadtest">loadtest module documentation</a>.</p> | |
| <p>To pass a payload to an endpoint:</p> | |
| <ol> | |
| <li>Edit the <code class="highlighter-rouge">config.json</code>, and then save your changes.</li> | |
| <li>Click <strong>App monitor</strong>, and then click the <strong>Run load</strong> button. A text box appears that states <code class="highlighter-rouge">**Run load** The request to start the process has been sent</code>.</li> | |
| <li>Wait for the test to run. You can watch the test metrics while the test is running.</li> | |
| <li>When the test is complete, navigate back to the <strong>Edit code</strong> tab to see the result of the latest run. An entry appears under the <code class="highlighter-rouge">load-test</code> directory with a time stamp containing a summary of the run.</li> | |
| </ol> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Main Col END --> | |
| <!-- footer row --> | |
| <footer> | |
| <div class="row" id="footer-div"> | |
| <div class="col-lg-3 col-md-3 footer-col text-center"> | |
| <div> | |
| <div> | |
| <a href="https://twitter.com/EclipseCodewind"><img src="images/twitter-logo.svg" class="cw-logo" /></a> | |
| </div> | |
| <div>@EclipseCodewind</div> | |
| </div> | |
| </div> | |
| <div class="col-lg-3 col-md-3 footer-col text-center"> | |
| <div> | |
| <div> | |
| <a href="https://github.com/eclipse/codewind"><img src="images/github-logo.svg" | |
| class="cw-logo" /></a> | |
| </div> | |
| <div>@Codewind</div> | |
| </div> | |
| </div> | |
| <div class="col-lg-3 col-md-3 footer-col text-center"> | |
| <div> | |
| <div> | |
| <a href="mailto:codewind-dev@eclipse.org"><img src="images/email-icon.svg" class="cw-logo" /></a> | |
| </div> | |
| <div>@Codewind</div> | |
| </div> | |
| </div> | |
| <div class="col-lg-3 col-md-3 footer-col text-center"> | |
| <div class="cw-logo-mm" > | |
| <div class="cw-logo-mm" > | |
| <a href="mailto:codewind-dev@eclipse.org"><img src="images/mattermost-logo.png" class="cw-logo-mm" /></a> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </footer> | |
| <!-- footer row END --> <!-- Jquery --> | |
| <script | |
| src="https://code.jquery.com/jquery-3.4.1.min.js" | |
| integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" | |
| crossorigin="anonymous"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" | |
| integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"> | |
| </script> | |
| <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" | |
| integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"> | |
| </script> | |
| <!-- Font Awesome JS --> | |
| <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/solid.js" | |
| integrity="sha384-tzzSw1/Vo+0N5UhStP3bvwWPq+uvzCMfrN1fEFe+xBmv1C/AtVX5K0uZtmcHitFZ" crossorigin="anonymous"> | |
| </script> | |
| <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/fontawesome.js" | |
| integrity="sha384-6OIrr52G08NpOFSZdxxz1xdNSndlD4vdcf/q2myIUVO0VsqaGHJsB0RaBE01VTOY" crossorigin="anonymous"> | |
| </script> | |
| <!-- Place this tag in your head or just before your close body tag. --> | |
| <script async defer src="https://buttons.github.io/buttons.js"></script> | |
| <script src="js/jquery.matchHeight-min.js"></script> | |
| <script src="js/index.js"></script> | |
| <script src="js/docs.js"></script> | |
| </div> | |
| </body> | |
| </html> |