{"id":54276,"date":"2025-11-30T18:53:51","date_gmt":"2025-11-30T18:53:51","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=54276"},"modified":"2025-11-30T18:53:51","modified_gmt":"2025-11-30T18:53:51","slug":"grafana-k6-oss-demo-lab","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/grafana-k6-oss-demo-lab\/","title":{"rendered":"Grafana k6 OSS: Demo &amp; Lab"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Install k6 on Windows<\/h2>\n\n\n\n<p>You have a few options. I\u2019ll show the two easiest:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Option A \u2013 Using <code>winget<\/code> (recommended if available)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>Windows Terminal \/ PowerShell<\/strong> as <strong>Administrator<\/strong>.<\/li>\n\n\n\n<li>Run: <code>winget install grafana.k6<\/code><\/li>\n\n\n\n<li>After install, verify: <code>k6 version<\/code> You should see something like: <code>k6 v0.xx.x<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Option B \u2013 Using Chocolatey<\/h3>\n\n\n\n<p>If you\u2019re already using <strong>Chocolatey<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>PowerShell (Admin)<\/strong>.<\/li>\n\n\n\n<li>Install: <code>choco install k6<\/code><\/li>\n\n\n\n<li>Verify: <code>k6 version<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Option C \u2013 Portable (ZIP) Binary (no package manager)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to: <code>https:\/\/github.com\/grafana\/k6\/releases<\/code> (in your browser).<\/li>\n\n\n\n<li>Download the latest <strong>Windows x64 .zip<\/strong>.<\/li>\n\n\n\n<li>Extract it to a folder, e.g.: <code>C:\\tools\\k6\\<\/code><\/li>\n\n\n\n<li>Add that folder to your <strong>PATH<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Press <code>Win<\/code> \u2192 search <strong>Environment Variables<\/strong> \u2192 \u201cEdit the system environment variables\u201d.<\/li>\n\n\n\n<li>Click <strong>Environment Variables\u2026<\/strong><\/li>\n\n\n\n<li>Under <strong>User variables<\/strong> or <strong>System variables<\/strong>, select <code>Path<\/code> \u2192 <strong>Edit<\/strong> \u2192 <strong>New<\/strong> \u2192 add: <code>C:\\tools\\k6\\<\/code><\/li>\n\n\n\n<li>Click <strong>OK<\/strong> several times.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Open a <strong>new<\/strong> PowerShell and run: <code>k6 version<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Create a Project Folder<\/h2>\n\n\n\n<p>Let\u2019s keep things clean.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choose a workspace folder, e.g.: <code>mkdir C:\\k6-demo cd C:\\k6-demo<\/code><\/li>\n\n\n\n<li>You\u2019ll put all your k6 scripts here.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Your First \u201cHello World\u201d k6 Script<\/h2>\n\n\n\n<p>We\u2019ll create a very simple script that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sends 1 HTTP GET request to a test URL.<\/li>\n\n\n\n<li>Checks that the response status is 200.<\/li>\n\n\n\n<li>Prints basic stats at the end.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Create the script file<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In <code>C:\\k6-demo<\/code>, create a file named <code>hello-world.js<\/code>.<\/li>\n<\/ol>\n\n\n\n<p>If you like using Notepad:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">notepad<\/span> .\\<span class=\"hljs-selector-tag\">hello-world<\/span><span class=\"hljs-selector-class\">.js<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Paste this code inside:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> http <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6\/http'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { check, sleep } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6'<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">const<\/span> options = {\n  <span class=\"hljs-attr\">vus<\/span>: <span class=\"hljs-number\">1<\/span>,          <span class=\"hljs-comment\">\/\/ number of virtual users<\/span>\n  <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-string\">'10s'<\/span>, <span class=\"hljs-comment\">\/\/ total test duration<\/span>\n};\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-comment\">\/\/ 1) Make a simple GET request<\/span>\n  <span class=\"hljs-keyword\">const<\/span> res = http.get(<span class=\"hljs-string\">'https:\/\/test.k6.io'<\/span>);\n\n  <span class=\"hljs-comment\">\/\/ 2) Validate response<\/span>\n  check(res, {\n    <span class=\"hljs-string\">'status is 200'<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">r<\/span>) =&gt;<\/span> r.status === <span class=\"hljs-number\">200<\/span>,\n  });\n\n  <span class=\"hljs-comment\">\/\/ 3) Small pause between iterations<\/span>\n  sleep(<span class=\"hljs-number\">1<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Save and close the file.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Run the Hello World Test<\/h2>\n\n\n\n<p>From inside the folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">cd<\/span> <span class=\"hljs-selector-tag\">C<\/span>:\\<span class=\"hljs-selector-tag\">k6-demo<\/span>\n<span class=\"hljs-selector-tag\">k6<\/span> <span class=\"hljs-selector-tag\">run<\/span> .\\<span class=\"hljs-selector-tag\">hello-world<\/span><span class=\"hljs-selector-class\">.js<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You will see something like:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">          \/\\      |\u203e\u203e| \/\u203e\u203e\/  \/\u203e\u203e\/\n     \/\\  \/  \\     |  |\/  \/  \/  \/\n    \/  \\\/    \\    |     (  \/  \/\n   \/          \\   |  |\\  \\\/  \/\n  \/ __________ \\  |__| \\____\/\n\n  execution: local\n     script: hello-world.js\n     output: -\n\n  scenarios: (<span class=\"hljs-number\">100.00<\/span>%) <span class=\"hljs-number\">1<\/span> scenario, <span class=\"hljs-number\">1<\/span> max VUs, <span class=\"hljs-number\">10<\/span>s max duration (incl. graceful stop):\n           * <span class=\"hljs-keyword\">default<\/span>: <span class=\"hljs-number\">1<\/span> looping VUs <span class=\"hljs-keyword\">for<\/span> <span class=\"hljs-number\">10<\/span>s (gracefulStop: <span class=\"hljs-number\">30<\/span>s)\n\nrunning (<span class=\"hljs-number\">10.0<\/span>s), <span class=\"hljs-number\">0<\/span>\/<span class=\"hljs-number\">1<\/span> VUs, <span class=\"hljs-number\">10<\/span> complete <span class=\"hljs-keyword\">and<\/span> <span class=\"hljs-number\">0<\/span> interrupted iterations\n<span class=\"hljs-keyword\">default<\/span> \u2713 &#91;======================================] <span class=\"hljs-number\">1<\/span> VUs  <span class=\"hljs-number\">10<\/span>s\n\n     \u2713 status is <span class=\"hljs-number\">200<\/span>\n\n     checks...................: <span class=\"hljs-number\">100.00<\/span>% \u2713 <span class=\"hljs-number\">10<\/span> \u2717 <span class=\"hljs-number\">0<\/span>\n     http_req_duration........: avg=<span class=\"hljs-number\">150<\/span>ms min=<span class=\"hljs-number\">120<\/span>ms max=<span class=\"hljs-number\">200<\/span>ms ...\n     http_reqs................: <span class=\"hljs-number\">10<\/span>  (<span class=\"hljs-number\">1.0<\/span>\/s)\n     vus......................: <span class=\"hljs-number\">1<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Understand the Output<\/h2>\n\n\n\n<p>Important fields to understand:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>checks<\/strong> \u2013 shows how many checks passed\/failed:\n<ul class=\"wp-block-list\">\n<li><code>\u2713 10 \u2717 0<\/code> \u2192 all 10 requests returned status 200.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>http_req_duration<\/strong> \u2013 time it took to complete each HTTP request.\n<ul class=\"wp-block-list\">\n<li><code>avg<\/code>, <code>min<\/code>, <code>max<\/code>, percentiles.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>http_reqs<\/strong> \u2013 total number of HTTP requests (10 here).<\/li>\n\n\n\n<li><strong>vus<\/strong> \u2013 how many virtual users were active (1 here).<\/li>\n<\/ul>\n\n\n\n<p>Since <code>status is 200<\/code> is the only check, if the website failed or returned a different code, you\u2019d see <strong>failed checks<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Slightly More Interesting Example (Hello World with Threshold)<\/h2>\n\n\n\n<p>Now, let\u2019s add a <strong>threshold<\/strong> so the test \u201cfails\u201d if latency is too high.<\/p>\n\n\n\n<p>Create another file: <code>hello-with-threshold.js<\/code><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">notepad .\\hello-<span class=\"hljs-keyword\">with<\/span>-threshold.js\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Paste:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> http <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6\/http'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { check, sleep } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6'<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">const<\/span> options = {\n  <span class=\"hljs-attr\">vus<\/span>: <span class=\"hljs-number\">2<\/span>,\n  <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-string\">'15s'<\/span>,\n  <span class=\"hljs-attr\">thresholds<\/span>: {\n    <span class=\"hljs-comment\">\/\/ 95% of all requests must finish below 500ms<\/span>\n    <span class=\"hljs-attr\">http_req_duration<\/span>: &#91;<span class=\"hljs-string\">'p(95) &lt; 500'<\/span>],\n    <span class=\"hljs-comment\">\/\/ At least 99% of checks must pass<\/span>\n    <span class=\"hljs-attr\">checks<\/span>: &#91;<span class=\"hljs-string\">'rate &gt; 0.99'<\/span>],\n  },\n};\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-keyword\">const<\/span> res = http.get(<span class=\"hljs-string\">'https:\/\/test.k6.io'<\/span>);\n\n  check(res, {\n    <span class=\"hljs-string\">'status is 200'<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">r<\/span>) =&gt;<\/span> r.status === <span class=\"hljs-number\">200<\/span>,\n  });\n\n  sleep(<span class=\"hljs-number\">1<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Run it:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">k6 run .\\hello-<span class=\"hljs-keyword\">with<\/span>-threshold.js\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>At the end, you\u2019ll see something like:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   checks................: 100.00% \u2713 30 \u2717 0\n   http_req_duration.....: p(95)=180ms ...\n   thresholds:\n     * http_req_duration  p(95)<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">500<\/span>       \u2713  <span class=\"hljs-attr\">passed<\/span>\n     * <span class=\"hljs-attr\">checks<\/span>             <span class=\"hljs-attr\">rate<\/span>&gt;<\/span>0.99       \u2713  passed\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you intentionally use a <strong>slow or broken URL<\/strong>, you might see <strong>thresholds marked as failed<\/strong> with <code>\u2717<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7. Running a Quick \u201cSmoke Test\u201d Style Hello World<\/h2>\n\n\n\n<p>If you just want to quickly confirm your script works (like a smoke test):<\/p>\n\n\n\n<p>Create <code>hello-smoke.js<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">notepad<\/span> .\\<span class=\"hljs-selector-tag\">hello-smoke<\/span><span class=\"hljs-selector-class\">.js<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Paste:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> http <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6\/http'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { sleep } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'k6'<\/span>;\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">const<\/span> options = {\n  <span class=\"hljs-attr\">vus<\/span>: <span class=\"hljs-number\">1<\/span>,\n  <span class=\"hljs-attr\">iterations<\/span>: <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-comment\">\/\/ run only once<\/span>\n};\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-keyword\">const<\/span> res = http.get(<span class=\"hljs-string\">'https:\/\/test.k6.io'<\/span>);\n  <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`Response status: <span class=\"hljs-subst\">${res.status}<\/span>`<\/span>);\n  sleep(<span class=\"hljs-number\">1<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">k6<\/span> <span class=\"hljs-selector-tag\">run<\/span> .\\<span class=\"hljs-selector-tag\">hello-smoke<\/span><span class=\"hljs-selector-class\">.js<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You\u2019ll see a log line:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">INFO<\/span><span class=\"hljs-selector-attr\">&#91;0000]<\/span> <span class=\"hljs-selector-tag\">Response<\/span> <span class=\"hljs-selector-tag\">status<\/span>: 200\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This is a super basic \u201cHello World\u201d just to embed k6 in a CI step or script.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8. Typical Folder Structure for Your k6 Work<\/h2>\n\n\n\n<p>If you continue learning, you might organize like:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">C:\\k6-demo\n \u251c\u2500 hello-world.js\n \u251c\u2500 hello-<span class=\"hljs-keyword\">with<\/span>-threshold.js\n \u251c\u2500 hello-smoke.js\n \u251c\u2500 scenarios\/\n \u2502   \u251c\u2500 basic-load.js\n \u2502   \u251c\u2500 spike-test.js\n \u251c\u2500 data\/\n \u2502   \u2514\u2500 users.csv\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9. Next Easy Steps After Hello World<\/h2>\n\n\n\n<p>Once this works, good next things to explore:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Increase load<\/strong><br>Change: <code>vus: 10, duration: '30s',<\/code><\/li>\n\n\n\n<li><strong>Add multiple URLs<\/strong><br>Use <code>group()<\/code> blocks and multiple <code>http.get<\/code> calls.<\/li>\n\n\n\n<li><strong>Export results to JSON<\/strong> (for later analysis): <code>k6 run --out json=results.json .\\hello-world.js<\/code><\/li>\n\n\n\n<li><strong>Integrate with Grafana<\/strong> later (Prometheus or k6 Cloud), once you\u2019re comfortable.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/343a10421401438a28d8698fa9ce694f.js\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>1. Install k6 on Windows You have a few options. I\u2019ll show the two easiest: Option A \u2013 Using winget (recommended if available) Option B \u2013 Using Chocolatey If you\u2019re&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-54276","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=54276"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54276\/revisions"}],"predecessor-version":[{"id":54277,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/54276\/revisions\/54277"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=54276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=54276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=54276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}