<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: NaveenKumar Namachivayam ⚡</title>
    <description>The latest articles on Forem by NaveenKumar Namachivayam ⚡ (@qainsights).</description>
    <link>https://forem.com/qainsights</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F159517%2F43f7f907-501b-44e8-b748-e740fa80c07e.jpg</url>
      <title>Forem: NaveenKumar Namachivayam ⚡</title>
      <link>https://forem.com/qainsights</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/qainsights"/>
    <language>en</language>
    <item>
      <title>Proof of Humanity™</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Thu, 02 Apr 2026 16:56:37 +0000</pubDate>
      <link>https://forem.com/qainsights/proof-of-humanity-198m</link>
      <guid>https://forem.com/qainsights/proof-of-humanity-198m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;To prove you're human, you must assemble Flätpack furniture.&lt;br&gt;
One step is irrelevant. Robots cannot detect irony.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kilo-challenge-8914.d.kiloapps.io/" rel="noopener noreferrer"&gt;https://kilo-challenge-8914.d.kiloapps.io/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/QAInsights/kilo-challenge" rel="noopener noreferrer"&gt;https://github.com/QAInsights/kilo-challenge&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ How I Built It
&lt;/h2&gt;

&lt;p&gt;I approached this project the way I tackle any complex system: break it down, understand the constraints, and build upward with tight feedback loops. Instead of jumping straight into coding, I started by mapping the experience I wanted users to have. From there, every technical decision flowed naturally.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 1. Defining the Core Problem
&lt;/h3&gt;

&lt;p&gt;Before writing a single line of code, I clarified the “why.” What should this tool &lt;em&gt;feel&lt;/em&gt; like? What friction should it remove? What would make someone say, “Oh, that’s clever”?&lt;br&gt;&lt;br&gt;
This early framing helped me avoid feature creep and stay anchored to a crisp user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 2. Designing the Architecture
&lt;/h3&gt;

&lt;p&gt;Once the problem was clear, I sketched the system architecture—data flow, state transitions, and the boundaries between components. I treated it like a mini system‑design exercise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should run locally vs. remotely
&lt;/li&gt;
&lt;li&gt;How to keep the interface responsive
&lt;/li&gt;
&lt;li&gt;How to ensure the tool remains extensible
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step saved me hours later because every component had a clear responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ 3. Building the Core Logic
&lt;/h3&gt;

&lt;p&gt;With the architecture locked in, I implemented the core functionality. I built it incrementally, validating each piece before moving on. This iterative approach made debugging almost trivial and kept the project moving smoothly.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 4. Crafting the User Experience
&lt;/h3&gt;

&lt;p&gt;A tool is only as good as how it feels to use. I refined the UI/UX with small but meaningful touches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear feedback loops
&lt;/li&gt;
&lt;li&gt;Minimal cognitive load
&lt;/li&gt;
&lt;li&gt;Fast, predictable interactions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted the tool to feel like something &lt;em&gt;I&lt;/em&gt; would enjoy using every day.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧪 5. Testing Like a User, Not a Developer
&lt;/h3&gt;

&lt;p&gt;I tested the project in real‑world scenarios—switching contexts, trying edge cases, and intentionally breaking things. This surfaced subtle issues that wouldn’t appear in a controlled environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 6. Polishing and Shipping
&lt;/h3&gt;

&lt;p&gt;Once the core was solid, I focused on polish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cleaned up the codebase
&lt;/li&gt;
&lt;li&gt;Improved performance
&lt;/li&gt;
&lt;li&gt;Added small quality‑of‑life improvements
&lt;/li&gt;
&lt;li&gt;Wrote documentation that future‑me would appreciate
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shipping wasn’t the end—it was the beginning of iteration.&lt;/p&gt;




&lt;p&gt;If you want, I can also help you write the &lt;strong&gt;“What I Learned”&lt;/strong&gt;, &lt;strong&gt;“Challenges I Faced”&lt;/strong&gt;, or &lt;strong&gt;“Future Improvements”&lt;/strong&gt; sections so your post looks complete and competition‑ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;HTCPCP IYKYK&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>GitHub Copilot CLI Challenge: bt: Modern BLE CLI Tool</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Sun, 15 Feb 2026 21:43:47 +0000</pubDate>
      <link>https://forem.com/qainsights/github-copilot-cli-challenge-bt-modern-ble-cli-tool-55lk</link>
      <guid>https://forem.com/qainsights/github-copilot-cli-challenge-bt-modern-ble-cli-tool-55lk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;There is no clean, simple, cross‑platform, developer‑friendly BLE CLI exists today. Linux has &lt;code&gt;bluetoothctl&lt;/code&gt;, macOS has no official CLI, and Windows exposes only low‑level PowerShell APIs. &lt;/p&gt;

&lt;p&gt;Developers working with BLE devices — especially ESP32‑based prototypes — lack a simple, unified, ergonomic CLI. My goal is to create a minimal, ergonomic, script‑friendly CLI for scanning, connecting, and interacting with BLE devices. &lt;/p&gt;

&lt;p&gt;📝 Repo: &lt;a href="https://github.com/QAInsights/bt" rel="noopener noreferrer"&gt;https://github.com/QAInsights/bt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faixhbyjm0osgw5pma581.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faixhbyjm0osgw5pma581.JPG" alt="Copilot Connecting" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=EJqVMSVTeJM" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FEJqVMSVTeJM%2F0.jpg" alt="IMAGE ALT TEXT HERE" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0oj2pvxa95vcmglzdlx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0oj2pvxa95vcmglzdlx.png" alt="Scan" width="764" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisyxx43njmn0g5lhzbzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisyxx43njmn0g5lhzbzf.png" alt="Waves" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5y4j52v2m5sx4i9osee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs5y4j52v2m5sx4i9osee.png" alt="Web" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;bt&lt;/code&gt; was built using the &lt;code&gt;copilot&lt;/code&gt; which acted as a copilot for this project. It helped me in brainstorming, planning, rapid prototyping using natural language processing even with my typos :) &lt;/p&gt;

&lt;p&gt;🤖 &lt;code&gt;copilot&lt;/code&gt; helped in no context switching, focused development, acting as a pair programmer, testing, and more.&lt;/p&gt;

&lt;p&gt;As a beginner in Bluetooth modules, it helped in navigating the docs, debugging, beautifying the output, and testing it. Without leaving the ide , it helped in polishing the whole project. &lt;/p&gt;

&lt;p&gt;Here is how it started:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pa1gtefspmr6d7c8b8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pa1gtefspmr6d7c8b8p.png" alt="How it started" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and here is how it ended:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frdg0ht5v7zuk70pdssnl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frdg0ht5v7zuk70pdssnl.png" alt="How it ended" width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/QAInsights/bt" rel="noopener noreferrer"&gt;https://github.com/QAInsights/bt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faixhbyjm0osgw5pma581.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faixhbyjm0osgw5pma581.JPG" alt="Copilot Connecting" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgaxpyted0pmupo3fjs3.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgaxpyted0pmupo3fjs3.JPG" alt="Copilot OLED" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Kan [கண்] is an intelligent eye health monitoring application</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Mon, 20 Oct 2025 16:47:08 +0000</pubDate>
      <link>https://forem.com/qainsights/kan-knn-is-an-intelligent-eye-health-monitoring-application-3mic</link>
      <guid>https://forem.com/qainsights/kan-knn-is-an-intelligent-eye-health-monitoring-application-3mic</guid>
      <description>&lt;p&gt;I have just submitted my entry to  &lt;a href="https://nokeyboardsallowed.dev/" rel="noopener noreferrer"&gt;https://nokeyboardsallowed.dev/&lt;/a&gt; hackathon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/QAInsights/kan" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kan-kappa.vercel.app/" rel="noopener noreferrer"&gt;https://kan-kappa.vercel.app/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/naveenkumarn_hackathon-goose-claude-activity-7385862337678774272-i9so?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAIWYJIBXZJKeQcqCbx-IGKA3Ocbz_rb2rE" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmcokibyndxsg9s1rdgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmcokibyndxsg9s1rdgl.png" alt="Kan-Tracker" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Protect your vision in the digital age. Kan [கண்] is an intelligent eye health monitoring application that tracks your blink rate in real-time, provides health insights, and helps prevent digital eye strain through continuous background monitoring.&lt;br&gt;
Built using Goose.&lt;/p&gt;

</description>
      <category>hackathon</category>
    </item>
    <item>
      <title>Introducing a Lightweight Apache JMeter Docker Image: Efficient Load Testing Made Simple</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Tue, 18 Mar 2025 13:52:26 +0000</pubDate>
      <link>https://forem.com/qainsights/introducing-a-lightweight-apache-jmeter-docker-image-efficient-load-testing-made-simple-430g</link>
      <guid>https://forem.com/qainsights/introducing-a-lightweight-apache-jmeter-docker-image-efficient-load-testing-made-simple-430g</guid>
      <description>&lt;p&gt;Are you looking for a lean, secure, and versatile Docker image for Apache JMeter to streamline your load testing workflows? Look no further! Today, I’m excited to share a new Dockerfile I’ve crafted that delivers a lightweight Apache JMeter image without compromising on functionality. Whether you’re a developer, DevOps engineer, or QA professional, this image is designed to make your performance testing faster, easier, and more efficient.&lt;/p&gt;

&lt;h2&gt;Why This JMeter Docker Image Stands Out&lt;/h2&gt;

&lt;p&gt;This isn’t your average JMeter setup. Here’s what makes this Docker image special:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small and Secure Base: Built on Alpine Linux, known for its tiny footprint and security-first design.&lt;/li&gt;



&lt;li&gt;Powered by Liberica JDK: Uses bellsoft/liberica-openjdk-alpine, a free, open-source Java runtime optimized for modern deployments.&lt;/li&gt;



&lt;li&gt;Full JMeter Functionality: Includes Apache JMeter for robust load testing, plus a handy script to install plugins as needed.&lt;/li&gt;



&lt;li&gt;Non-Root Execution: Runs as the jmeter user for enhanced security—no unnecessary root privileges here.&lt;/li&gt;



&lt;li&gt;Multi-Architecture Ready: Supports both amd64 (x86_64) and arm64 platforms, so it works seamlessly on everything from Intel-based servers to Apple M1/M2/M3 chips, AWS Graviton, or even a Raspberry Pi 4.&lt;/li&gt;



&lt;li&gt;Optimized Size: Thanks to multi-stage builds, the image is slim—151.78 MB compressed and 209.71 MB uncompressed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This combination of features ensures you get a lightweight, secure, and flexible JMeter environment that’s ready to tackle your testing needs.&lt;/p&gt;

&lt;h2&gt;Getting Started: Basic Usage&lt;/h2&gt;

&lt;p&gt;Building and running the image is a breeze. Here’s how to get going:&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;Build the ImageIn the directory containing the Dockerfile, run:&lt;/li&gt;
&lt;/ol&gt;

&lt;pre&gt;&lt;code&gt;docker build -t my-jmeter-image .&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This creates an image tagged as my-jmeter-image.&lt;/p&gt;

&lt;h2&gt;Run JMeter&lt;/h2&gt;

&lt;p&gt;To execute a test, mount your test directory and specify your .jmx file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker run -v /path/to/your/test:/tests my-jmeter-image /tests/your-test.jmx&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Replace /path/to/your/test with the local path to your test files and your-test.jmx with your test script’s filename. Done!&lt;/p&gt;

&lt;h2&gt;Multi-Architecture Support: Flexibility Across Platforms&lt;/h2&gt;

&lt;p&gt;One of the standout features of this image is its multi-architecture support. Whether you’re running on a traditional x86_64 machine or an ARM64 device like an Apple Silicon Mac or AWS Graviton instance, this image has you covered.&lt;/p&gt;

&lt;p&gt;To build a multi-architecture image, use the provided build-multiarch.sh script:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Make it executable
chmod +x build-multiarch.sh

# Check options
./build-multiarch.sh --help

# Build and push to your registry
./build-multiarch.sh --name jmeter --tag 5.6.3 --registry your-registry/ --push&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The script is packed with options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-n, --name: Set the image name (e.g., jmeter).&lt;/li&gt;



&lt;li&gt;-t, --tag: Specify a version tag (e.g., 5.6.3).&lt;/li&gt;



&lt;li&gt;-r, --registry: Define your Docker registry.&lt;/li&gt;



&lt;li&gt;--push: Push the image to your registry after building.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it easy to deploy JMeter across diverse environments without worrying about compatibility.&lt;/p&gt;

&lt;h2&gt;Advanced Usage: Customize Your Setup&lt;/h2&gt;

&lt;h3&gt;Installing JMeter Plugins&lt;/h3&gt;

&lt;p&gt;Need specific plugins for your tests? You can add them directly in the Dockerfile. Just tweak the JMETER_PLUGINS argument with a comma-separated list:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ARG JMETER_PLUGINS="jpgc-udp=0.4,jpgc-dummy"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Want a specific version? Use =version-number. Otherwise, it’ll grab the latest.&lt;/p&gt;

&lt;h2&gt;Keeping It Lean&lt;/h2&gt;

&lt;p&gt;The image stays lightweight thanks to some clever optimizations:&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;Multi-Stage Builds: Dependencies are separated from the runtime, reducing bloat.&lt;/li&gt;



&lt;li&gt;File Cleanup: Strips out unnecessary docs and Windows batch files.&lt;/li&gt;



&lt;li&gt;Cache Management: Clears temporary files and package caches.&lt;/li&gt;



&lt;li&gt;Minimal Plugins: Only what you need, nothing more.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These steps ensure you’re not hauling around extra weight, making your CI/CD pipelines or local runs faster.&lt;/p&gt;

&lt;h2&gt;Why Size Matters&lt;/h2&gt;

&lt;p&gt;At just 151.78 MB compressed, this image is significantly smaller than many JMeter setups, which often balloon past 500 MB. A smaller image means quicker downloads, faster deployments, and less resource overhead—perfect for scaling tests in the cloud or running locally on constrained hardware.&lt;/p&gt;

&lt;p&gt;This project is open to contributions. Have an idea to make it even better? Found a bug? Feel free to submit a Pull Request on the repository. Let’s build something awesome together!&lt;/p&gt;

&lt;h2&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;This lightweight Apache JMeter Docker image is all about efficiency, security, and flexibility. Whether you’re load testing a web app, API, or microservice, it’s got the tools you need in a package that won’t weigh you down. Give it a spin, tweak it to your liking, and let me know how it works for you!&lt;/p&gt;

&lt;p&gt;Happy testing! &lt;/p&gt;

</description>
      <category>performance</category>
      <category>docker</category>
      <category>tutorial</category>
      <category>java</category>
    </item>
    <item>
      <title>Introducing Feather Wand: Your AI-Powered Companion for JMeter</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Tue, 04 Mar 2025 19:00:00 +0000</pubDate>
      <link>https://forem.com/qainsights/introducing-feather-wand-your-ai-powered-companion-for-jmeter-2774</link>
      <guid>https://forem.com/qainsights/introducing-feather-wand-your-ai-powered-companion-for-jmeter-2774</guid>
      <description>&lt;p&gt;Imagine having an intelligent assistant right inside JMeter, ready to help you craft, optimize, and troubleshoot your test plans with ease. That’s exactly what &lt;strong&gt;Feather Wand&lt;/strong&gt;, a new JMeter plugin, brings to the table—a sprinkle of AI magic to transform your performance testing experience. Let’s dive into what makes this tool special, how it works, and why it might just become your go-to JMeter sidekick—especially for performance test engineers.&lt;/p&gt;

&lt;h2&gt;The Story Behind the Name&lt;/h2&gt;

&lt;p&gt;Before we get technical, a quick nod to the whimsical origin of "Feather Wand." The name comes from my kids, who were inspired by an episode of &lt;em&gt;Bluey&lt;/em&gt;—the charming animated show. In that episode, a simple feather turns into a magical wand, making ordinary things extraordinary (and hilariously heavy). Much like that feather, this plugin aims to take your everyday JMeter tasks and elevate them with a touch of AI-powered brilliance. Who says tech can’t have a playful side?&lt;/p&gt;

&lt;h2&gt;What Does Feather Wand Do?&lt;/h2&gt;

&lt;p&gt;Feather Wand seamlessly integrates an AI chatbot into JMeter, powered by Anthropic’s Claude API. Whether you’re a JMeter newbie or a seasoned performance test engineer, this plugin is designed to make your life easier. Here’s what it offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chat with AI in JMeter&lt;/strong&gt;: Ask questions, get advice, and brainstorm solutions directly within the JMeter interface.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Smart Suggestions&lt;/strong&gt;: Need help picking the right JMeter elements? The AI can recommend options tailored to your goals.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;JMeter Expertise On Demand&lt;/strong&gt;: From functionality deep-dives to best practices, Feather Wand has answers.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt; Command&lt;/strong&gt;: Highlight an element in your test plan and type &lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt; to get detailed, context-specific insights about it.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Customizable AI&lt;/strong&gt;: Tweak how the AI behaves via configuration properties to suit your workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as having a virtual mentor who’s always ready to lend a hand—or a wand.&lt;/p&gt;

&lt;h2&gt;Why Performance Test Engineers Need This&lt;/h2&gt;

&lt;p&gt;Performance testing is a critical discipline, but it’s often riddled with complexity and tight deadlines. Feather Wand steps in to streamline your workflow and boost productivity. Here are some real-world use cases where it shines for performance test engineers:&lt;/p&gt;

&lt;h2&gt;1. Brainstorming with the AI Chat Interface&lt;/h2&gt;

&lt;p&gt;Stuck on how to simulate a tricky user journey, like a multi-step checkout process under heavy load? Open the Feather Wand chat and ask, “How should I structure a test plan for an e-commerce checkout flow?” The AI might suggest a mix of Thread Groups, HTTP Samplers, and Timers—complete with a logical sequence—all without leaving JMeter. It’s like having a collaborative teammate on speed dial, perfect for rapid prototyping or tackling unfamiliar scenarios.&lt;/p&gt;

&lt;h2&gt;2. Adding Elements with One Click&lt;/h2&gt;

&lt;p&gt;Building a test plan from scratch can feel tedious—clicking through menus to add samplers, assertions, or listeners. With Feather Wand, you can say, “Add an HTTP Request Sampler for a login endpoint,” and the AI can guide you to insert it with a single click (or suggest the exact configuration). This cuts down repetitive setup time, letting you focus on crafting the test logic instead of wrestling with the UI.&lt;/p&gt;

&lt;h2&gt;3. Generating Groovy Snippets for Custom Logic&lt;/h2&gt;

&lt;p&gt;JMeter’s JSR223 Sampler with Groovy is a powerhouse for custom scripting, but writing code under pressure can slow you down. Need to generate a random user ID or manipulate response data? Ask Feather Wand, “Generate a Groovy snippet to create a random 8-digit user ID.” You’ll get a ready-to-use script like vars.put("userId", String.valueOf((int)(Math.random() * 100000000))), saving you from syntax headaches and speeding up your test development.&lt;/p&gt;

&lt;h2&gt;4. Optimizing Load Scenarios&lt;/h2&gt;

&lt;p&gt;Designing realistic load tests is an art. Suppose you’re simulating 10,000 users hitting an API during a flash sale. Ask Feather Wand, “How can I optimize my test for peak load?” It might recommend adjusting ramp-up periods, adding a Constant Throughput Timer, or distributing load across multiple Thread Groups—tailored advice that helps you fine-tune performance without guesswork.&lt;/p&gt;

&lt;h2&gt;5. Troubleshooting Performance Bottlenecks&lt;/h2&gt;

&lt;p&gt;Post-test analysis can be daunting when response times spike unexpectedly. Select a slow sampler and type, “What might be causing delays here with&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@this&lt;/code&gt; Feather Wand could suggest adding a Debug Sampler, tweaking timeouts, or checking for unhandled dynamic data—giving you a clear starting point to dig deeper and resolve the issue.&lt;/p&gt;

&lt;p&gt;These use cases show how Feather Wand empowers performance test engineers to work smarter, not harder, turning JMeter into a more intuitive and efficient tool.&lt;/p&gt;

&lt;h2&gt;A Word of Caution: Best Practices &amp;amp; Disclaimer&lt;/h2&gt;

&lt;p&gt;AI is powerful, but it’s not infallible. Here are some tips to keep in mind while using Feather Wand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Double-Check Everything&lt;/strong&gt;: The AI might occasionally miss the mark. Verify its suggestions, especially for production-critical tests.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Backup, Backup, Backup&lt;/strong&gt;: Save your test plans before applying major AI-driven changes—just in case.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Test Before You Trust&lt;/strong&gt;: Run AI-suggested tweaks in a safe environment first to ensure they work as expected.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Watch Performance&lt;/strong&gt;: Some configurations might affect resource usage, so keep an eye on your system.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Stay Secure&lt;/strong&gt;: Avoid sharing sensitive data (like credentials) in your AI chats.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Mind the Costs&lt;/strong&gt;: The plugin uses the Claude API, which incurs token-based charges. Heavy use will reflect on your Anthropic billing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feather Wand is here to assist, but you’re still the captain of your JMeter ship!&lt;/p&gt;

&lt;h2&gt;Setting It Up: Configuration Made Simple&lt;/h2&gt;

&lt;p&gt;Getting started with Feather Wand is straightforward. It’s all configured through JMeter properties. Just grab the jmeter-ai-sample.properties file from the repo, copy its contents into your jmeter.properties or user.properties file, and tweak as needed. Here’s a rundown of the key options:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default Value&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;anthropic.api.key&lt;/td&gt;
&lt;td&gt;Your Claude API key (required)&lt;/td&gt;
&lt;td&gt;N/A—get yours from Anthropic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude.default.model&lt;/td&gt;
&lt;td&gt;The Claude model to use&lt;/td&gt;
&lt;td&gt;claude-3-sonnet-20240229&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude.temperature&lt;/td&gt;
&lt;td&gt;Controls AI creativity (0.0-1.0)&lt;/td&gt;
&lt;td&gt;0.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude.max.tokens&lt;/td&gt;
&lt;td&gt;Max response length&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude.max.history.size&lt;/td&gt;
&lt;td&gt;Chat history length&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;claude.system.prompt&lt;/td&gt;
&lt;td&gt;Guides the AI’s tone and focus&lt;/td&gt;
&lt;td&gt;See sample file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;anthropic.log.level&lt;/td&gt;
&lt;td&gt;Logging for API requests&lt;/td&gt;
&lt;td&gt;Empty (disabled)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;Make It Your Own with a Custom Prompt&lt;/h2&gt;

&lt;p&gt;Want the AI to focus on specific JMeter quirks or follow your own guidelines? Customize the claude.system.prompt in the properties file. The default prompt is JMeter-savvy and user-friendly, but you can tailor it to your heart’s content.&lt;/p&gt;

&lt;p&gt;The Magic of &lt;code&gt;@this&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;One standout feature is the &lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt; command. Select any element in your test plan—like a sampler or thread group—and type something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“What does &lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt; do?”&lt;/li&gt;



&lt;li&gt;“How can I optimize &lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt;?”&lt;/li&gt;



&lt;li&gt;“Best practices for &lt;a class="mentioned-user" href="https://dev.to/this"&gt;@this&lt;/a&gt;?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feather Wand will analyze the selected element and deliver advice tailored to it. It’s like having a JMeter expert peek over your shoulder.&lt;/p&gt;

&lt;h2&gt;How to Get Started: Grab an Anthropic API Key&lt;/h2&gt;

&lt;p&gt;To unlock Feather Wand’s AI powers, you’ll need an Anthropic API key. Here’s the quick how-to:&lt;/p&gt;

&lt;ol start="1"&gt;
&lt;li&gt;Head to the &lt;a href="https://www.anthropic.com/" rel="noreferrer noopener"&gt;Anthropic API site&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;Sign up or log in.&lt;/li&gt;



&lt;li&gt;Generate a new API key.&lt;/li&gt;



&lt;li&gt;Paste it into the anthropic.api.key property in your JMeter config.&lt;/li&gt;



&lt;li&gt;Check out the &lt;a href="https://www.anthropic.com/api" rel="noreferrer noopener"&gt;API key docs&lt;/a&gt; for more details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once that’s set, you’re ready to wave your Feather Wand and let the AI magic begin!&lt;/p&gt;

&lt;h2&gt;Why Feather Wand Matters&lt;/h2&gt;

&lt;p&gt;Performance testing with JMeter can be complex, time-consuming, and sometimes downright frustrating—especially when you’re racing against deadlines or wrestling with intricate systems. Feather Wand lightens the load by blending AI’s problem-solving prowess with JMeter’s robust testing capabilities. Whether you’re brainstorming test designs, automating repetitive tasks, or scripting custom logic, this plugin is here to make the process smoother—and maybe even a little fun.&lt;/p&gt;

&lt;p&gt;So, why not give it a try? Clone the repo, set it up, and let Feather Wand add a touch of magic to your next JMeter project. I’d love to hear your feedback—or your own “Bluey-inspired” ideas for making it even better!&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;





</description>
      <category>java</category>
      <category>ai</category>
      <category>testing</category>
      <category>performance</category>
    </item>
    <item>
      <title>Conquer Your Grocery Budget with Clip It!: The Free Chrome Extension That Makes Kroger Savings a Breeze</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Mon, 19 Aug 2024 15:26:30 +0000</pubDate>
      <link>https://forem.com/qainsights/conquer-your-grocery-budget-with-clip-it-the-free-chrome-extension-that-makes-kroger-savings-a-breeze-3hkg</link>
      <guid>https://forem.com/qainsights/conquer-your-grocery-budget-with-clip-it-the-free-chrome-extension-that-makes-kroger-savings-a-breeze-3hkg</guid>
      <description>&lt;p&gt;Let's face it: grocery shopping can feel like a battle against a constantly inflating budget. We meticulously scan weekly ads, clip coupons with the precision of a surgeon, and still, sometimes, that final receipt can feel like a punch to the gut. But what if I told you there's a secret weapon in the fight for grocery savings, a tool so simple and effective it could revolutionize the way you shop at Kroger?&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;Clip It!&lt;/strong&gt;, a free Chrome extension designed to supercharge your digital coupon game and make saving money at Kroger easier than ever before.&lt;/p&gt;

&lt;p&gt;Download now from &lt;a href="https://chromewebstore.google.com/detail/clip-it/dmacanhpegjjgmicfbinaafcnjaigecf" rel="noreferrer noopener"&gt;Chrome Web Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/clip-it/dmacanhpegjjgmicfbinaafcnjaigecf" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2024%2F08%2FmPGKYBIR2uCP0ApchDXE.png" alt="" title="mPGKYBIR2uCP0ApchDXE" width="340" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/Y3mBXwzF99k" rel="noopener noreferrer"&gt;https://youtu.be/Y3mBXwzF99k&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ditch the Scissors, Embrace the Future of Couponing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remember the days of meticulously cutting coupons from newspapers and magazines, only to forget them at home or realize they expired last week? With Clip It!, those days are gone for good. This innovative extension eliminates the hassle of paper coupons and brings the power of digital savings directly to your fingertips.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2024%2F08%2Fsupasnap-2024-08-12-18.52.01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2024%2F08%2Fsupasnap-2024-08-12-18.52.01.png" alt="" title="supasnap-2024-08-12-18.52.01" width="676" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Clip It! Makes Kroger Shopping a Breeze&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine this: you're browsing the digital coupon section on Kroger.com, faced with a seemingly endless list of offers. Clicking each coupon individually feels like a tedious chore, but with Clip It!, a single click is all it takes. That's right, this powerful extension will &lt;strong&gt;automatically clip every available digital coupon&lt;/strong&gt; to your account in an instant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But Wait, There's More! Clip It! is Packed with Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customize Your Clipping Experience:&lt;/strong&gt; Not interested in every single offer? No problem! Clip It! lets you set a maximum number of coupons to clip using a simple slider, ensuring you only get the deals relevant to your shopping list.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;On the Hunt for Freebies?&lt;/strong&gt; The "Clip Only Free Coupons" feature (currently in its experimental phase) is your new best friend. Activate this setting and watch as Clip It! scours the digital aisles for those coveted freebie offers.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Starting Fresh Each Week?&lt;/strong&gt; Easily unclip all existing coupons with one click, creating a clean slate for the new week's deals and keeping your digital coupon stash organized.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Clip It! is a Must-Have for Kroger Shoppers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Say Goodbye to Missed Savings:&lt;/strong&gt; Never again will you experience the frustration of forgetting to clip a coupon or discovering a deal after you've already checked out. Clip It! ensures you're maximizing every possible saving opportunity.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Reclaim Your Precious Time:&lt;/strong&gt; Time spent clipping coupons is time you could be using for more enjoyable activities. Clip It! streamlines the couponing process, giving you back valuable time in your busy schedule.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;Shop Smarter, Not Harder:&lt;/strong&gt; Clip It! empowers you to make informed decisions about your grocery purchases, helping you stick to your budget without sacrificing quality or variety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ready to Take Control of Your Grocery Budget?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join the growing number of savvy Kroger shoppers who are ditching the scissors and embracing the ease and convenience of Clip It!. This free and user-friendly extension is the ultimate tool for maximizing your savings and making every shopping trip a victory for your wallet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't wait another minute! Download Clip It! today and experience the future of couponing!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; Want to learn more about Clip It! and get answers to any questions you might have? Visit the extension's comprehensive help page for detailed information and helpful FAQs.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>developer</category>
      <category>browser</category>
    </item>
    <item>
      <title>Unlocking the Power of Large Language Models with Kel: Enhancing Workflow and Productivity</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Wed, 20 Dec 2023 13:38:50 +0000</pubDate>
      <link>https://forem.com/qainsights/unlocking-the-power-of-large-language-models-with-kel-enhancing-workflow-and-productivity-22cb</link>
      <guid>https://forem.com/qainsights/unlocking-the-power-of-large-language-models-with-kel-enhancing-workflow-and-productivity-22cb</guid>
      <description>&lt;p&gt;If you're not using Large Language Models (LLMs) in your daily work, you're missing out. You can learn, improve, and optimize your developer and testing activities using any LLMs (free or paid). Even this blog article has been grammar checked by the OpenAI GPT-4 model. It is written by me, but improved by an AI. There are thousands of apps available in the marketplace which are built on top of LLM APIs. However, their monthly prices are typically higher than average. It harnesses powerful LLMs at its core. LLM companies charge in cents, but you need to pay in dollars to use those apps. That's why I created my own app to bring your own key to power up the workflow in Command Line Interface.&lt;/p&gt;

&lt;h2&gt;What is Kel?&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Kel&lt;/code&gt; means &lt;code&gt;ask&lt;/code&gt; in Tamil. &lt;code&gt;&lt;a href="https://kel.qainsights.com/" rel="noopener noreferrer"&gt;Kel&lt;/a&gt;&lt;/code&gt; is a simple utility which helps you to connect between your question and the LLM. It takes your questions to the LLM and prints its responses in your terminal. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://kel.qainsights.com/" rel="noopener noreferrer"&gt;Kel&lt;/a&gt; is built using Python and the respective LLM's library. It is free and open source. &lt;/p&gt;

&lt;h2&gt;Features of Kel&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CLI based utility &lt;/li&gt;



&lt;li&gt;Bring your own API key&lt;/li&gt;



&lt;li&gt;Supports OpenAI, Anthropic, Ollama, and Google models.&lt;/li&gt;



&lt;li&gt;Supports OpenAI assistant model&lt;/li&gt;



&lt;li&gt;Supports styling configuration&lt;/li&gt;



&lt;li&gt;Displays stats such as response time, tokens, and more.&lt;/li&gt;



&lt;li&gt;Displays ~pricing information&lt;/li&gt;



&lt;li&gt;and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/12/unDrawPlus_1702252279321_72j05f.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F12%2FunDrawPlus_1702252279321_72j05f-726x1024.png" alt="Unlocking the Power of Large Language Models with Kel: Enhancing Workflow and Productivity" width="726" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;How to install Kel?&lt;/h2&gt;

&lt;p&gt;There are a couple of ways you can install &lt;code&gt;&lt;a href="https://kel.qainsights.com/" rel="noopener noreferrer"&gt;Kel&lt;/a&gt;&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;pip&lt;/h3&gt;

&lt;p&gt;By using &lt;code&gt;pip&lt;/code&gt; it is easy to install &lt;code&gt;Kel&lt;/code&gt;. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip install kel-cli&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;pipx&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install kel-cli&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once it is installed, run the below commands to configure the &lt;code&gt;config.toml&lt;/code&gt; file.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# copy the default config file to current user's home directory
curl -O https://raw.githubusercontent.com/QAInsights/kel/main/config.toml
mkdir -p ~/.kel
mv config.toml ~/.kel/config.toml &lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Demo&lt;/h2&gt;

&lt;p&gt;Here is a quick demo of &lt;code&gt;kel&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://asciinema.org/a/626190" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fasciinema.org%2Fa%2F626190.svg" alt="asciicast" width="977" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Kel Commands&lt;/h2&gt;

&lt;p&gt;Before you ask your questions using &lt;code&gt;kel&lt;/code&gt;, you need a valid API key either from OpenAI, Anthropic, or Google. If you want free option, you can spin up https://ollama.ai/ in your local and configure the endpoint in &lt;code&gt;config.toml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the API key setup is done, issue the below commands.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kel -v&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To view the help, issue&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kel -h&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now, let us ask some questions to the OpenAI model.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kel "git command to blame"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/12/image-2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F12%2Fimage-2-1024x221.png" alt="Kel git command" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default, &lt;code&gt;kel&lt;/code&gt; answers the questions which are relevant to software engineering e.g.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kel "What is the mass of the moon?"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/12/image-3.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F12%2Fimage-3-1024x223.png" alt="Kel science question" width="800" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But you can change this behavior by adding your own prompt e.g.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;kel "What is the mass of the moon?" -p "You are a physicist"&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/12/image-4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F12%2Fimage-4-1024x222.png" alt="Kel change prompt" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the magic of &lt;code&gt;kel&lt;/code&gt;. It is flexible and customizable. It has umpteen options to customize based on your needs. &lt;/p&gt;

&lt;p&gt;You can also change the LLM and its model on the fly. Let us ask the same question to Anthropic's Claude model. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/12/image-5.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F12%2Fimage-5-1024x195.png" alt="Kel change model and company" width="800" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;More Kel&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Kel&lt;/code&gt; also supports the OpenAI Assistant model where you can upload a file and ask questions about that. It is an awesome feature for performance engineers who need to analyze the raw results by using AI magic. &lt;/p&gt;

&lt;p&gt;I am saving this feature for my next blog article. So what is next?&lt;/p&gt;

&lt;p&gt;Based on the user's feedback, I will integrate more prominent models into Kel so that you can improve your workflow. Please let me know in the comments or in GitHub &lt;a href="https://github.com/qainsights/kel" rel="noopener noreferrer"&gt;issues&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Using Large Language Models (LLMs) in your daily work can greatly improve and streamline your developer and testing tasks. Kel is a free and open-source utility that allows you to connect with LLMs using your own API key. It offers a command-line interface, supports various LLM models, and provides customization options. Kel's flexibility and convenience make it a valuable tool for improving workflow and productivity.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>Introducing the Apache JMeter Docker Extension</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Mon, 06 Nov 2023 14:18:00 +0000</pubDate>
      <link>https://forem.com/qainsights/introducing-the-apache-jmeter-docker-extension-10mh</link>
      <guid>https://forem.com/qainsights/introducing-the-apache-jmeter-docker-extension-10mh</guid>
      <description>&lt;p&gt;Docker Extensions was announced as a beta at DockerCon 2022. Docker Extensions became generally available in January 2023. Developing performance tools' related extensions was on my to-do list for a long time. Due to my master's degree I couldn't spend time learning Docker Extensions SDK. I expected someone would have created the extension by now, considering it's almost 2024. It's surprising to me that none has been developed as far as I know. But no more. Introducing the Apache JMeter Docker Extension. Now you can run Apache JMeter tests in Docker Desktop without installing JMeter locally. In this blog post, we will explore how to get started with this extension and understand its functionality. We will also cover generating HTML reports and other related topics.&lt;/p&gt;

&lt;h2&gt;About Docker Extensions&lt;/h2&gt;

&lt;p&gt;Docker Extensions enables third parties to extend the functionalities of Docker by integrating their tools. Think of it like a mobile app store, but for Docker. &lt;/p&gt;

&lt;p&gt;I frequently use the official Docker &lt;strong&gt;Disk Usage&lt;/strong&gt; extension to analyze disk usage and free up unused space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-1024x349.png" alt="Disk Usage Docker Extension" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extensions enhance the productivity and workflow of developers. Check out the Docker Extension marketplace for some truly amazing extensions. Go see it for yourself! &lt;/p&gt;

&lt;h2&gt;Prerequisite for Docker Extension&lt;/h2&gt;

&lt;p&gt;The only prerequisite for Docker Extension is to have &lt;strong&gt;Docker Desktop 4.8.0 and later&lt;/strong&gt; installed in your local. &lt;/p&gt;

&lt;h2&gt;Apache JMeter Docker Extension&lt;/h2&gt;

&lt;p&gt;Apache JMeter Docker Extension is an open source, lightweight extension and the only extension is available as of this writing. It will help you to run JMeter tests on Docker without installing JMeter locally. &lt;/p&gt;

&lt;p&gt;This extension simplifies the process of setting up and executing JMeter tests within Docker containers, streamlining your performance testing workflow. Whether you're a seasoned JMeter pro or just getting started, this tool can help you save time and resources.&lt;/p&gt;

&lt;h3&gt;Features&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Includes base image &lt;strong&gt;qainsights/jmeter:latest&lt;/strong&gt; by default.&lt;/li&gt;



&lt;li&gt;Light-weight and secured container&lt;/li&gt;



&lt;li&gt;Supports JMeter plugins&lt;/li&gt;



&lt;li&gt;Mount volume for easy management&lt;/li&gt;



&lt;li&gt;Supports property files&lt;/li&gt;



&lt;li&gt;Supports proxy configuration&lt;/li&gt;



&lt;li&gt;Generates logs and results&lt;/li&gt;



&lt;li&gt;Intuitive HTML report&lt;/li&gt;



&lt;li&gt;Displays runtime console logs&lt;/li&gt;



&lt;li&gt;Timely notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How to install Apache JMeter Docker extension?&lt;/h3&gt;

&lt;p&gt;Installation is a breeze. There are two ways you can install the extension.&lt;/p&gt;

&lt;h4&gt;Command Line&lt;/h4&gt;

&lt;p&gt;Run &lt;code&gt;docker extension install qainsights/jmeter-docker-extension:0.0.1&lt;/code&gt; in your terminal and follow the prompts.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$&amp;gt; docker extension install qainsights/jmeter-docker-extension:0.0.1     
                                                            
Extensions can install binaries, invoke commands, access files on your machine and connect to remote URLs. 
Are you sure you want to continue? [y/N] y

Image not available locally, pulling qainsights/jmeter-docker-extension:0.0.1...
Extracting metadata and files for the extension "qainsights/jmeter-docker-extension:0.0.1"
Installing service in Desktop VM...
Setting additional compose attributes
Installing Desktop extension UI for tab "JMeter"...
Extension UI tab "JMeter" added.
Starting service in Desktop VM......
Service in Desktop VM started
Extension "JMeter" installed successfully&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Web&lt;/h4&gt;

&lt;p&gt;Here is the &lt;a href="https://open.docker.com/extensions/marketplace?extensionId=qainsights/jmeter-docker-extension&amp;amp;tag=0.0.1" rel="noopener noreferrer"&gt;direct link&lt;/a&gt; to install the JMeter extension. Follow the prompts to get it installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://open.docker.com/extensions/marketplace?extensionId=qainsights/jmeter-docker-extension&amp;amp;tag=0.0.1" rel="noopener noreferrer"&gt;Install JMeter Docker Extension&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Click on &lt;strong&gt;Install anyway&lt;/strong&gt; to install the extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-1.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-1-1024x263.png" alt="Install Apache JMeter Docker Extension" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;How to get started with JMeter Docker Extension?&lt;/h3&gt;

&lt;p&gt;After installing the JMeter Docker extension, navigate to the left sidebar as shown below, then click on &lt;strong&gt;JMeter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-2-527x1024.png" alt="Launch Apache JMeter Docker Extension" width="527" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it is time to execute our first tests on Docker using JMeter extension.&lt;/p&gt;

&lt;p&gt;The following are the prerequisites to execute the JMeter tests.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;valid JMeter test plan&lt;/li&gt;



&lt;li&gt;optional proxy credentials&lt;/li&gt;



&lt;li&gt;optional JMeter properties file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The user interface is pretty simple, intuitive, and self-explanatory. All it has is text fields, buttons, and the output console log. &lt;/p&gt;

&lt;p&gt;The extension has the following sections:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Image and Volume
&lt;ul&gt;
&lt;li&gt;This extension works well with the &lt;code&gt;qainsights/jmeter:latest&lt;/code&gt; image&lt;/li&gt;



&lt;li&gt;Other images might not work; I have not tested it.&lt;/li&gt;



&lt;li&gt;Mapping the volume from the host to the Docker container is crucial to share the test plan, CSV test data, other dependencies, property files, results, and other files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Test Plan
&lt;ul&gt;
&lt;li&gt;A valid test plan must be kept inside the shared volume.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Property Files
&lt;ul&gt;
&lt;li&gt;This section helps you to pass the runtime parameters to the JMeter test plan.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Logs and Results
&lt;ul&gt;
&lt;li&gt;This section helps you to configure the logs and results. After each successful test, logs and an HTML report will be generated and saved in a shared volume.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Proxy and its credentials
&lt;ul&gt;
&lt;li&gt;Optionally you can send a proxy and its credentials. This is helpful when you are on the corporate network so that the container can access the application being tested.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below is the example test where the local volume &lt;code&gt;/Users/naveenkumar/Tools/apache-jmeter-5.6.2/bin/jmeter-tests&lt;/code&gt; is mapped to the container volume &lt;code&gt;jmeter-tests&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is the content in &lt;code&gt;/Users/naveenkumar/Tools/apache-jmeter-5.6.2/bin/jmeter-tests&lt;/code&gt; folder in my local.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-4.png" alt="JMeter tests" width="520" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above artifacts will be shared with the Docker container once it is up and running. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-3.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-3-1024x564.png" alt="Run JMeter Tests" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example, &lt;code&gt;/jmeter-tests/CSVSample.jmx&lt;/code&gt; will be executed inside the container. It will use the below &lt;code&gt;loadtest.properties&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-5.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-5.png" alt="Sample loadtest.properties" width="528" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once all the values are configured, hit the &lt;code&gt;Run JMeter Test&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;During the test you can pay attention to a couple of sections. One is console logs. For each test, the runtime logs will be streamed from the Docker container as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-6.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-6.png" alt="Output Console Logs" width="680" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case there are any errors, you can check them under &lt;strong&gt;Notifications&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-7.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-7.png" alt="Docker Extension Notifications" width="314" height="893"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the test is done, &lt;strong&gt;Notifications &lt;/strong&gt;will display the status and the location of HTML report (your mapped volume). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-8.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-8-1024x611.png" alt="After the test" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-9.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-9-1024x232.png" alt="JTL report" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the auto-generated HTML report.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-10.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-10-1024x515.png" alt="HTML Report" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;How JMeter Docker Extension works and its architecture?&lt;/h2&gt;

&lt;p&gt;On a high level, how this extension is simple as shown in the below diagram. Once you click on the &lt;strong&gt;Run&lt;/strong&gt; button, the extension first validates all the input and the required fields. &lt;/p&gt;

&lt;p&gt;If the validation check passes, then the extension will look up the artifacts from the mapped volume. Then it passes all respective JMeter arguments to the image &lt;code&gt;qainsights/jmeter:latest&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the image is not present, it will get pulled from the Docker container registry. &lt;/p&gt;

&lt;p&gt;Then the container will be created up by Docker and perform the test execution. &lt;/p&gt;

&lt;p&gt;During the test execution, container logs will be streamed to the output console logs.&lt;/p&gt;

&lt;p&gt;To stop the test, click the &lt;strong&gt;Terminate &lt;/strong&gt;button to nuke the container. This action is irreversible and will not generate any test results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/JMeter-Docker-Extension-Architecture.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2FJMeter-Docker-Extension-Architecture-1024x604.png" alt="JMeter Docke Extension Architecture" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the test is done, HTML report and the logs will be shared with the mapped volume.&lt;/p&gt;

&lt;h2&gt;How to uninstall the extension?&lt;/h2&gt;

&lt;p&gt;There are two ways to uninstall the extension. Using the CLI, issue &lt;code&gt;docker extension uninstall qainsights/jmeter-docker-extension:0.0.1&lt;/code&gt; or from the Docker Desktop.&lt;/p&gt;

&lt;p&gt;Navigate to Docker Desktop &amp;gt; Extensions &amp;gt; JMeter, then click on the menu to uninstall as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/11/image-11.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F11%2Fimage-11.png" alt="Uninstall JMeter Docker Extension" width="136" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Known Issues&lt;/h2&gt;

&lt;p&gt;There are a couple of issues (or more :) if you find) you can start the test as much as you want to generate more load to the target under test. &lt;/p&gt;

&lt;p&gt;Supports only frequently used JMeter arguments. If you would like to add more arguments, please raise an issue in the &lt;a href="https://github.com/qainsights/jmeter-docker-extension" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; repo.&lt;/p&gt;

&lt;h2&gt;Upcoming Features&lt;/h2&gt;

&lt;p&gt;There are a couple of features I am planning to implement based on the reception. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a dashboard to track the tests&lt;/li&gt;



&lt;li&gt;Display graphs/charts runtime&lt;/li&gt;



&lt;li&gt;Way to add JMeter plugins on the fly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any other exciting ideas, please let me know.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/qainsights/jmeter-docker-extension" rel="noopener noreferrer"&gt;JMeter Docker Extension GitHub Repo&lt;/a&gt;&lt;/p&gt;



&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In conclusion, the introduction of the Apache JMeter Docker Extension is a significant step forward for developers and testers looking to streamline their performance testing workflow. With this open-source and lightweight extension, you can run JMeter tests in Docker without the need to install JMeter locally, saving you time and resources.&lt;/p&gt;

&lt;p&gt;Despite a few known issues and limitations, such as supporting only frequently used JMeter arguments, the extension holds promise for the future.&lt;/p&gt;

&lt;p&gt;In summary, the Apache JMeter Docker Extension provides a valuable tool for developers and testers, enabling them to perform JMeter tests efficiently within Docker containers, and it's a welcome addition to the Docker Extension ecosystem. It's worth exploring for anyone involved in performance testing and looking to simplify their workflow.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>testing</category>
      <category>performance</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deep-dive into Vegeta - HTTP load testing tool and library</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Tue, 31 Oct 2023 00:32:15 +0000</pubDate>
      <link>https://forem.com/qainsights/deep-dive-into-vegeta-http-load-testing-tool-and-library-10li</link>
      <guid>https://forem.com/qainsights/deep-dive-into-vegeta-http-load-testing-tool-and-library-10li</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkuoxxbe87t3tfk60idri.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkuoxxbe87t3tfk60idri.jpeg" alt=" " width="800" height="400"&gt;&lt;/a&gt;&amp;lt;!-- wp:paragraph --&amp;gt;&lt;/p&gt;

&lt;p&gt;As a performance engineer, you know how crucial it is to expand your skillset and become proficient with various tools. In your demanding role, ensuring the optimal performance of applications and systems is paramount. To achieve this, you need a diverse range of tools and techniques in your arsenal.&lt;/p&gt;

&lt;p&gt;In this blog article, you're about to embark on a journey to explore a valuable addition to your toolkit: Vegeta, an HTTP load testing tool and library. As a performance engineer, you're likely no stranger to the importance of load testing in evaluating and enhancing system performance. Vegeta is one such tool that will help you accomplish this more effectively.&lt;/p&gt;

&lt;p&gt;By delving into the world of Vegeta, you'll gain insights into its features, capabilities, and practical applications for load testing. This knowledge will empower you to handle a higher volume of users and requests while ensuring your systems maintain peak performance. So, let's dive in and discover how Vegeta can further elevate your performance engineering expertise.&lt;/p&gt;

&lt;h2&gt;Vegeta - HTTP load testing tool and library&lt;/h2&gt;

&lt;p&gt;Vegeta is an open-source HTTP load testing tool and library designed to help evaluate and analyze the performance of web services, servers, and applications by simulating a large number of HTTP requests. It was created in the Go programming language and is widely used for performance testing and benchmarking.&lt;/p&gt;

&lt;p&gt;Vegeta is particularly popular among developers and performance engineers because of its simplicity, ease of use, and the ability to conduct performance tests efficiently. It's worth noting that while Vegeta is a powerful tool for HTTP load testing, users should always ensure they have appropriate permissions and are following ethical and legal guidelines when testing web services and applications.&lt;/p&gt;

&lt;h2&gt;Vegeta Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CLI and Go-based tool&lt;/li&gt;



&lt;li&gt;Easy to learn and pluggable in automation workflow&lt;/li&gt;



&lt;li&gt;Customizable HTML reporting&lt;/li&gt;



&lt;li&gt;Simple distributed load testing using pdsh&lt;/li&gt;



&lt;li&gt;Easy to install, update, and manage&lt;/li&gt;



&lt;li&gt;Avoids Coordinated Omission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/10/image-4.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fimage-4.png" alt="It's Over 9000!" width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Install Vegeta&lt;/h2&gt;

&lt;p&gt;In macOS, you can install Vegeta using brew.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew update &amp;amp;&amp;amp; brew install vegeta&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For Windows, make sure you have installed Go. To install vegeta, use&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;go get -u github.com/tsenart/vegeta&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To validate vegeta:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;vegeta -version&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Simple Load Test&lt;/h2&gt;

&lt;p&gt;To begin a simple load test in vegeta, issue the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;echo "GET http://localhost:8080" | vegeta attack -duration=10s | tee results.bin | vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above command will attack the localhost for 10s, store the results in &lt;code&gt;results.bin&lt;/code&gt; and creates a &lt;code&gt;report&lt;/code&gt; in the current directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/10/image-3.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fimage-3-1024x156.png" alt="Deep-dive into Vegeta - HTTP load testing tool and library" width="800" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The results will be stored in a &lt;code&gt;bin&lt;/code&gt; format. To create a HTML report, use the below command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cat results.bin | vegeta plot &amp;gt; plot.html&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To plot histogram in the terminal, issue the below command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cat results.bin | vegeta report -type="hist[0,100ms,200ms,300ms]"&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Vegeta defaults&lt;/h2&gt;

&lt;p&gt;By default vegeta uses the following properties:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CPUs - number of CPUs you have&lt;/li&gt;



&lt;li&gt;Number of connections - 10000&lt;/li&gt;



&lt;li&gt;Rate - 50 requests per second&lt;/li&gt;



&lt;li&gt;DNS TTL - 0s&lt;/li&gt;



&lt;li&gt;Duration of the test - infinity&lt;/li&gt;



&lt;li&gt;HTTP2 - if the server supports&lt;/li&gt;



&lt;li&gt;Maximum size of response body - no limit&lt;/li&gt;



&lt;li&gt;Maximum number of workers - 18446744073709551615&lt;/li&gt;



&lt;li&gt;Output file - stdout&lt;/li&gt;



&lt;li&gt;Redirects - 10&lt;/li&gt;



&lt;li&gt;Targets - stdin&lt;/li&gt;



&lt;li&gt;Timeout - 30s&lt;/li&gt;



&lt;li&gt;Workers - 10&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are defaults for plot and report as well. &lt;/p&gt;

&lt;h2&gt;Important arguments to remember&lt;/h2&gt;

&lt;p&gt;When running a performance test, it is paramount to configure the right values so that the test will work as per workload model. The following are the important command and arguments to remember in vegeta.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;attack&lt;/code&gt; - this command generates load and executes the HTTP instructions. It is important to configure the &lt;code&gt;duration&lt;/code&gt; of the test in &lt;code&gt;seconds&lt;/code&gt; and &lt;code&gt;rate&lt;/code&gt; - number of requests per time unit i.e. throughput. &lt;/p&gt;

&lt;p&gt;If the HTTP verb is POST, then you need to add appropriate &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt;, &lt;code&gt;tls&lt;/code&gt;, &lt;code&gt;redirects&lt;/code&gt;, &lt;code&gt;resolvers&lt;/code&gt; and more.&lt;/p&gt;

&lt;p&gt;When it comes to &lt;code&gt;report&lt;/code&gt;, ensure you mention histogram &lt;code&gt;buckets&lt;/code&gt;, &lt;code&gt;output&lt;/code&gt; file, and &lt;code&gt;type&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For the &lt;code&gt;plot&lt;/code&gt;, configure the &lt;code&gt;threshold&lt;/code&gt;, &lt;code&gt;output&lt;/code&gt;, and &lt;code&gt;title&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;More examples&lt;/h2&gt;

&lt;p&gt;If you are new to vegeta, below are the handy examples which will be useful.&lt;/p&gt;

&lt;h3&gt;Attacking with headers&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;echo "GET http://localhost:8080
X-Track: vegeta-test" | \
vegeta attack -duration=10s | \
tee results.bin | \
vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Attacking with multiple endpoints&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;echo "GET http://localhost:8080
X-Track: vegeta-test"

GET http://localhost:8080/leaderboard" | \
vegeta attack -duration=10s -name emojivoto | \
tee results.bin | \
vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Attacking with POST request&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;echo "POST http://localhost:8080" | vegeta attack -duration=10s | tee results.bin | vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Attacking with rate&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;echo "GET http://localhost:8080" | vegeta attack -duration=10s -rate=100/s | tee results.bin | vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Attacking with payload&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;echo "POST http://localhost:8080
@data.json" | vegeta attack -duration=10s | \
tee results.bin | \
vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Attacking with comments&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;echo "POST http://localhost:8080
# sending with payload
@data.json" | vegeta attack -duration=10s | \
tee results.bin | \
vegeta report&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Distributed load testing in Vegeta&lt;/h2&gt;

&lt;p&gt;Distributed testing is the core feature for any performance testing tool. It helps in distributing the load to scale the workload. Vegeta's approach is kind of unique while comparing with other tools like JMeter, k6, or Locust. &lt;/p&gt;

&lt;p&gt;Vegeta leverages &lt;code&gt;pdsh&lt;/code&gt; (Parallel Distributed Shell) is an open-source, high-performance parallel remote shell utility that allows system administrators and users to execute shell commands or scripts on multiple remote hosts simultaneously. It is particularly useful for managing and automating tasks on multiple servers or clusters in parallel.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pdsh&lt;/code&gt; is widely used in environments where parallel or distributed system administration and automation are essential. It simplifies the management of large clusters of servers and allows administrators to streamline tasks that would otherwise be time-consuming when performed on each host individually.&lt;/p&gt;

&lt;p&gt;To demo the distributed load testing feature in vegeta, let us spin up multiple virtual machines using &lt;code&gt;multipass&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Multipass is a lightweight, cross-platform virtual machine (VM) management tool developed by Canonical, the company behind Ubuntu Linux. It provides a simple and convenient way to create, manage, and run virtual machines on various operating systems, including Windows, macOS, and Linux. Multipass is designed to be user-friendly, making it easy for developers, sysadmins, and others to work with virtual machines for development, testing, and various computing tasks.&lt;/p&gt;

&lt;p&gt;Multipass is commonly used for various purposes, including software development, testing, running isolated development environments, and experimenting with different Linux distributions. It simplifies the process of working with virtual machines, especially for those who prefer a command-line interface and want a straightforward way to create and manage VMs.&lt;/p&gt;

&lt;p&gt;You can check https://multipass.run/install to get started. First, let us create two virtual machines (vm) for this demo. The below command will create two vms &lt;code&gt;worker1&lt;/code&gt; and &lt;code&gt;worker2&lt;/code&gt; with 2 CPU and 4 GB memory each with Ubuntu 23.04.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;multipass launch --name worker1 23.04 -c 2 -m 4gb &lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;multipass launch --name worker2 23.04 -c 2 -m 4gb&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once it is created, you can list out all the vms using the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;multipass list&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The next step is to login into the &lt;code&gt;worker1&lt;/code&gt; and issue the below commands.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install golang -y&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To install vegeta, grab the right download url from https://github.com/tsenart/vegeta/releases/tag/v12.11.1 and download  using the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -L -o vegeta_12.11.1_linux_arm64.tar.gz https://github.com/tsenart/vegeta/releases/download/v12.11.1/vegeta_12.11.1_linux_arm64.tar.gz

tar -xf vegeta_12.11.1_linux_arm64.tar.gz

sudo mv vegeta /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now repeat the above steps for &lt;code&gt;worker2&lt;/code&gt;. Once the vegeta is installed, return to your local to install &lt;code&gt;pdsh&lt;/code&gt; using the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install pdsh&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The next step is to grab the IP address of &lt;code&gt;worker1&lt;/code&gt; and &lt;code&gt;worker2&lt;/code&gt; using the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;multipass list&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To SSH into the VMs, you need to copy your public key into them using &lt;code&gt;ssh-copy&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.205.13
ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.205.14&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now set this environment variable in your local.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PDSH_RCMD_TYPE=ssh &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Trigger the attack&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pdsh -l ubuntu -b -w '192.168.205.13,192.168.205.14' 'echo "GET http://example.com" | vegeta attack -rate=2 -duration=5s &amp;gt; result.bin'&lt;/code&gt;&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;pdsh&lt;/code&gt;: This is the command used to run a command on multiple remote servers in parallel.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;-l ubuntu&lt;/code&gt;: This option specifies the username to use when connecting to the remote servers. In this case, it's set to "ubuntu."&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;-b&lt;/code&gt;: This option tells &lt;code&gt;pdsh&lt;/code&gt; to execute the specified command in the background, meaning it will not wait for the command to finish on each remote server before moving on to the next one.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;-w '192.168.205.13,192.168.205.14'&lt;/code&gt;: This option specifies the list of remote servers to target. In this case, it's set to two IP addresses: 192.168.205.13 and 192.168.205.14.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;'echo "GET http://example.com" | vegeta attack -rate=2 -duration=5s &amp;gt; result.bin'&lt;/code&gt;: This is the actual command that will be executed on each of the specified remote servers. Let's break it down further:
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;echo "GET http://example.com"&lt;/code&gt;: This part of the command sends an HTTP GET request to "&lt;a href="http://example.com/" rel="noopener noreferrer"&gt;http://example.com&lt;/a&gt;." It's used to generate HTTP traffic for the load test.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;|&lt;/code&gt;: This pipe symbol is used to send the output of the preceding command as input to the following command.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;vegeta attack -rate=2 -duration=5s &amp;gt; result.bin&lt;/code&gt;: This part of the command utilizes the &lt;code&gt;vegeta&lt;/code&gt; load testing tool to perform a load test. Here's what each part does:
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vegeta attack&lt;/code&gt;: This is the command to start a load test attack with &lt;code&gt;vegeta&lt;/code&gt;.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;-rate=2&lt;/code&gt;: It specifies the request rate of 2 requests per second.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;-duration=5s&lt;/code&gt;: The load test will run for 5 seconds.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;&amp;gt; result.bin&lt;/code&gt;: The output of the load test will be saved to a file called "result.bin." The &lt;code&gt;&amp;gt;&lt;/code&gt; symbol is used to redirect the output to the specified file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once the attack is done, it is important to collect the results from each machine using the below command.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;for machine in 192.168.205.13 192.168.205.14; do
    scp ubuntu@$machine:~/result.bin $machine.bin &amp;amp;
done&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After the results have been collected, below command helps you to plot the combined HTML report.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;vegeta plot 192.168.205.13.bin 192.168.205.14.bin &amp;gt; combined_report.html&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;# for CLI output
vegeta report *.bin&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Integrations&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For real time results plotting, vegeta gels with &lt;code&gt;jplot&lt;/code&gt; and &lt;code&gt;jaggr&lt;/code&gt;
&lt;/li&gt;



&lt;li&gt;Integrates with Prometheus and Grafana&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In conclusion, as a performance engineer, it's crucial for you to expand your toolkit with the right tools to succeed in your demanding role. You know that ensuring optimal performance for your applications and systems is an ongoing challenge, but with the right set of tools and techniques, you can tackle this challenge effectively.&lt;/p&gt;

&lt;p&gt;Throughout this article, we've taken you on a journey to explore a valuable addition to your toolkit: Vegeta, an HTTP load testing tool and library. You understand that load testing is a fundamental part of evaluating and enhancing system performance, and Vegeta offers a robust solution to help you achieve your goals.&lt;/p&gt;

&lt;p&gt;By delving into the world of Vegeta, we've provided you with insights into its features, capabilities, and practical applications for load testing. Equipped with this knowledge, you'll be better prepared to handle a higher volume of users and requests, all while ensuring your systems maintain peak performance.&lt;/p&gt;

&lt;p&gt;We've covered the basics of installing Vegeta on different platforms and shown you how to perform simple load tests. We've also delved into more advanced topics like distributed load testing using pdsh. You're now aware of the importance of correctly configuring the attack, report, and plot settings to meet your specific testing needs.&lt;/p&gt;

&lt;p&gt;Furthermore, we've demonstrated how Vegeta integrates with other tools like jplot and jaggr for real-time results plotting, as well as its seamless integration with Prometheus and Grafana for more comprehensive performance monitoring.&lt;/p&gt;

&lt;p&gt;In your role as a performance engineer, you know that having the right tools can make all the difference. By adding Vegeta to your arsenal, you'll be better equipped to tackle the challenges of performance testing and ensure that the systems you manage continue to perform at their best. So why wait? Dive into the world of Vegeta and elevate your performance engineering expertise today. Your applications and systems will thank you for it.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>performance</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Browser Performance Testing using k6</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Fri, 20 Oct 2023 13:26:12 +0000</pubDate>
      <link>https://forem.com/qainsights/browser-performance-testing-using-k6-1b6f</link>
      <guid>https://forem.com/qainsights/browser-performance-testing-using-k6-1b6f</guid>
      <description>&lt;p&gt;In this blog post you will learn how to get started with browser performance testing using k6. Client-side performance is paramount to validate the performance of your application along with the network load i.e. protocol load e.g. APIs. Not many tools are sophisticated when it comes to measuring end-to-end performance. Opentext LoadRunner TruClient protocol is one of the tool at its best when it comes to measuring front-end performance. &lt;/p&gt;

&lt;p&gt;JMeter w/ Selenium can be used to measure the browser performance. But the maintenance is nightmare and too flaky. If you do not want to use any tool, you can leverage the &lt;strong&gt;Chromium Developer Protocol&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;What is Chromium Developer Protocol?&lt;/h2&gt;

&lt;p&gt;It is often referred to as the Chrome DevTools Protocol (CDP), is a set of APIs and tools that allow developers to interact with and inspect web pages in the Chromium-based web browsers like Google Chrome, Microsoft Edge, and others. It provides a way to access and control various aspects of web pages, such as inspecting the Document Object Model (DOM), manipulating CSS, monitoring network activity, debugging JavaScript, and much more.&lt;/p&gt;

&lt;h2&gt;Getting Started with k6 browser&lt;/h2&gt;

&lt;p&gt;k6 is getting traction among developers and performance engineers. After getting acquired to Grafana, there are numerous improvements in the k6 ecosystem. I have already published a complete series on k6, please check it out if you are new to k6.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLJ9A48W0kpRJKmVeurt7ltKfrOdr8ZBdt" rel="noopener noreferrer"&gt;https://www.youtube.com/playlist?list=PLJ9A48W0kpRJKmVeurt7ltKfrOdr8ZBdt&lt;/a&gt;&lt;/p&gt;
k6 Series



&lt;p&gt;No more building xk6 browser from the binaries. The latest version of k6 is now bundled with the browser capability to test the front-end performance.&lt;/p&gt;

&lt;p&gt;The following are the prerequisites to get started with k6 browser:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the latest version of k6 &lt;/li&gt;



&lt;li&gt;Chrome browser in your local&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can install k6 in Windows, Linux, and macOS. Here is the command to install k6 in Mac.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brew install k6&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To verify the installation, use &lt;code&gt;k6 version&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/10/image.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fimage.png" alt="k6 version - Browser Performance Testing using k6" width="466" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;k6 browser is built on top of Playwright API. Playwright is an open-source automation library for browsers that allows developers and testers to automate tasks and interactions with web pages in Chromium, Firefox, and WebKit-based browsers. &lt;/p&gt;

&lt;p&gt;It provides a JavaScript API that makes it easy to write browser automation scripts and run them across different browser engines. Playwright is developed by Microsoft and is designed to be a more powerful and user-friendly alternative to other browser automation libraries like Puppeteer.&lt;/p&gt;

&lt;h2&gt;Hello, Browser in k6 browser&lt;/h2&gt;

&lt;p&gt;Copy and paste the below code and save it as &lt;code&gt;hello-browser.js&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import { browser } from 'k6/experimental/browser';

export const options = {
  scenarios: {
    ui: {
      executor: 'shared-iterations',
      options: {
        browser: {
          type: 'chromium',
        },
      },
    },
  },
  thresholds: {
    checks: ["rate==1.0"]
  }
}

export default async function () {
  const page = browser.newPage();

  try {
    await page.goto('https://example.com');    
  } finally {
    page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To run the script, &lt;code&gt;k6 run hello-browser.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here is the output.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/10/image-1.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fimage-1-1024x591.png" alt="k6 output" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let us break down the code one by one. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Import the &lt;code&gt;browser&lt;/code&gt; object from the &lt;code&gt;k6/experimental/browser&lt;/code&gt; module. This object is used to interact with web pages in your performance test.&lt;/li&gt;



&lt;li&gt;Define the &lt;code&gt;options&lt;/code&gt; object, which specifies the configuration for the k6 test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;scenarios&lt;/code&gt;: This section defines different test scenarios. In this case, there is only one scenario named "ui."
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;executor&lt;/code&gt;: It specifies the execution mode for the scenario, which is set to "shared-iterations." In this mode, virtual users share a fixed number of iterations.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;options&lt;/code&gt;: Further options for the scenario, including the type of browser to be used. Here, it's set to "chromium," indicating the Chromium browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;thresholds&lt;/code&gt;: This section defines the criteria for passing or failing the test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;checks&lt;/code&gt;: It specifies a threshold for a check named "rate," which is set to 1.0. This means that all checks in the test should have a success rate of 100% for the test to pass.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Export a default asynchronous function. This function will be executed by k6 during the performance test.
&lt;ul&gt;
&lt;li&gt;Inside the function, a new page is created using &lt;code&gt;browser.newPage()&lt;/code&gt;. This represents a virtual user's interaction with a web page.&lt;/li&gt;



&lt;li&gt;Within a &lt;code&gt;try&lt;/code&gt; block, the virtual user navigates to the URL '&lt;a href="https://example.com/" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;' using &lt;code&gt;page.goto()&lt;/code&gt;. This simulates a user visiting the specified web page.&lt;/li&gt;



&lt;li&gt;In the &lt;code&gt;finally&lt;/code&gt; block, the &lt;code&gt;page&lt;/code&gt; is closed using &lt;code&gt;page.close()&lt;/code&gt;. This ensures that resources are properly cleaned up after the virtual user has finished interacting with the web page.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the output breakdown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/10/image-2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F10%2Fimage-2-1024x281.png" alt="" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;browser_data_received&lt;/strong&gt;: This section shows statistics related to data received by the browser during the test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1.6 kB&lt;/code&gt;: The total amount of data received by the browser during the test.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;1.6 kB/s&lt;/code&gt;: The data receiving rate, indicating the rate of data transfer per second.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;browser_data_sent&lt;/strong&gt;: This section shows statistics related to data sent by the browser during the test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;343 B&lt;/code&gt;: The total amount of data sent by the browser during the test.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;331 B/s&lt;/code&gt;: The data sending rate, indicating the rate of data transfer per second.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;browser_http_req_duration&lt;/strong&gt;: These statistics provide information about the duration of HTTP requests made by the browser.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;avg=422.89ms&lt;/code&gt;: The average duration of HTTP requests in milliseconds.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;min=422.89ms&lt;/code&gt;: The shortest (minimum) request duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;med=422.89ms&lt;/code&gt;: The median (middle) request duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;max=422.89ms&lt;/code&gt;: The longest (maximum) request duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;p(90)=422.89ms&lt;/code&gt;: The 90th percentile of request durations.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;p(95)=422.89ms&lt;/code&gt;: The 95th percentile of request durations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;browser_http_req_failed&lt;/strong&gt;: This section provides information about failed HTTP requests made by the browser.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0.00%&lt;/code&gt;: The percentage of HTTP requests that failed.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;? 0&lt;/code&gt;: The number of successful requests (0).&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;? 1&lt;/code&gt;: The number of failed requests (1).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;browser_web_vital_cls, browser_web_vital_fcp, browser_web_vital_lcp, browser_web_vital_ttfb&lt;/strong&gt;: These sections report various web vital metrics that are important for measuring web page performance.
&lt;ul&gt;
&lt;li&gt;These sections include metrics such as average, minimum, median, maximum, and percentiles for Core Web Vitals like Cumulative Layout Shift (CLS), First Contentful Paint (FCP), Largest Contentful Paint (LCP), and Time to First Byte (TTFB).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;checks&lt;/strong&gt;: This section reports on the success or failure of checks performed during the test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0.00%&lt;/code&gt;: The percentage of checks that failed.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;? 0&lt;/code&gt;: The number of successful checks (0).&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;? 0&lt;/code&gt;: The number of failed checks (0).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;data_received, data_sent&lt;/strong&gt;: These sections show statistics related to data received and sent during the test. In this case, no data was sent or received.&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;iteration_duration&lt;/strong&gt;: These statistics provide information about the duration of iterations (test cycles).
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;avg=678.25ms&lt;/code&gt;: The average duration of iterations in milliseconds.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;min=678.25ms&lt;/code&gt;: The shortest (minimum) iteration duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;med=678.25ms&lt;/code&gt;: The median (middle) iteration duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;max=678.25ms&lt;/code&gt;: The longest (maximum) iteration duration.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;p(90)=678.25ms&lt;/code&gt;: The 90th percentile of iteration durations.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;p(95)=678.25ms&lt;/code&gt;: The 95th percentile of iteration durations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;iterations&lt;/strong&gt;: This section provides information about the number of iterations (test cycles) completed during the test.
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt;: The total number of iterations.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;0.96512/s&lt;/code&gt;: The rate at which iterations were executed per second.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;
&lt;strong&gt;vus&lt;/strong&gt;: This section shows statistics related to the virtual users (VUs) used in the test.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt;: The current number of virtual users.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;min=1&lt;/code&gt;: The minimum number of virtual users.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;max=1&lt;/code&gt;: The maximum number of virtual users.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol start="11"&gt;
&lt;li&gt;
&lt;strong&gt;vus_max&lt;/strong&gt;: This section provides information about the maximum number of virtual users.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt;: The maximum number of virtual users during the test.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;min=1&lt;/code&gt;: The minimum number of virtual users during the test.&lt;/li&gt;



&lt;li&gt;
&lt;code&gt;max=1&lt;/code&gt;: The maximum number of virtual users during the test.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Headless Mode&lt;/h2&gt;

&lt;p&gt;By default, k6 runs the test in headless mode. To turn off it, issue &lt;code&gt;K6_BROWSER_HEADLESS=false k6 run &amp;lt;your-script&amp;gt;.js&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;This will launch the Chromium browser and perform the scripted actions.&lt;/p&gt;

&lt;p&gt;You can also interact with the application using &lt;code&gt;Locator&lt;/code&gt; object. k6 also supports Asynchronous operations.&lt;/p&gt;

&lt;h2&gt;Recommended Way to Test&lt;/h2&gt;

&lt;p&gt;It is always ideal to test both the APIs and the front-end simultaneously to get the real simulation of production. You can create both the tests in one script, or you can write two different scripts and run it simultaneously. &lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In conclusion, browser performance testing with k6 is a valuable addition to your toolkit for assessing and optimizing the performance of web applications. With its user-friendly approach, bundled browser capability, and the power of the Chromium Developer Protocol, k6 simplifies the process of evaluating client-side performance and empowers you to build faster, more efficient, and more reliable web applications. It's a powerful tool that every performance engineer and developer should consider in their testing repertoire.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>testing</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What's new in Apache JMeter 5.6?</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Wed, 02 Aug 2023 02:08:22 +0000</pubDate>
      <link>https://forem.com/qainsights/whats-new-in-apache-jmeter-56-mim</link>
      <guid>https://forem.com/qainsights/whats-new-in-apache-jmeter-56-mim</guid>
      <description>&lt;p&gt;In this blog post, let us see what's new in Apache JMeter 5.6. You can check my last post about &lt;a href="https://qainsights.com/whats-new-in-jmeter-5-5/" rel="noreferrer noopener"&gt;JMeter 5.5&lt;/a&gt;. JMeter 5.6 was long due from the Apache community, it has been more than a year since we got an update. &lt;/p&gt;

&lt;h2&gt;Apache JMeter 5.6&lt;/h2&gt;

&lt;p&gt;There are no new and noteworthy changes in JMeter 5.6. But it comes with improvements and bug fixes. The following are the improvements made in JMeter 5.6.&lt;/p&gt;

&lt;h3&gt;Thread Groups&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/apache/jmeter/issues/5682" rel="noopener noreferrer"&gt;Issue #5682&lt;/a&gt;&lt;a href="https://github.com/apache/jmeter/pull/717" rel="noopener noreferrer"&gt;Pull request #717&lt;/a&gt; - Open Model Thread Group: avoid skipping rows from CSV Data Set Config&lt;/li&gt;



&lt;li&gt;Support custom thread group implementations in "Add think time" and "Save as test fragment" actions&lt;/li&gt;



&lt;li&gt;Open Model Thread Group: interrupt pending HTTP requests and other Interruptible test elements on test stop&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;HTTP Samplers and Test Script Recorder&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/apache/jmeter/pull/5911" rel="noopener noreferrer"&gt;Pull request #5911&lt;/a&gt; - Use Caffeine for caching HTTP headers instead of commons-collections4 LRUMap&lt;/li&gt;



&lt;li&gt;
&lt;a href="https://github.com/apache/jmeter/pull/5947" rel="noopener noreferrer"&gt;Pull request #5947&lt;/a&gt; - Fetch resources referenced in &amp;lt;link "rel"="preload"...&amp;gt; elements&lt;/li&gt;



&lt;li&gt;
&lt;a href="https://github.com/apache/jmeter/pull/5869" rel="noopener noreferrer"&gt;Pull request #5869&lt;/a&gt; - Allow more templates to format sampler names in the recorder: #{url}, #{method}, #{scheme}, #{host}, #{port}&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Other samplers&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/apache/jmeter/pull/5909" rel="noopener noreferrer"&gt;Pull request #5909&lt;/a&gt; - Use Caffeine for caching compiled scripts in JSR223 samplers instead of commons-collections4 LRUMap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apart from the above improvements, there are general enhancements available in 5.6 along with non-functional changes such as JARs upgrades, accessibility, and more. &lt;/p&gt;

&lt;p&gt;I have a surprising feature in JMeter 5.6 for you, which is editable in almost all the checkbox controls. This was not possible prior to JMeter 5.6.&lt;/p&gt;

&lt;p&gt;By default, the checkbox has two attributes: either checked or unchecked. But starting from JMeter 5.6, you can enable the expression so that you can programmatically control the attributes.&lt;/p&gt;

&lt;p&gt;Here is how you can edit the checkbox properties. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Right-click on the checkbox where you want to add the expression as shown below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/07/image.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F07%2Fimage.png" alt="" width="585" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "&lt;strong&gt;Use Expression&lt;/strong&gt;" This will launch a drop-down as shown below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/07/image-1.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F07%2Fimage-1.png" alt="" width="569" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Here you can select &lt;code&gt;true&lt;/code&gt; to enable the checkbox, &lt;code&gt;false&lt;/code&gt; to uncheck the checkbox, or you can use either the expressions &lt;code&gt;${__P(property_name)}&lt;/code&gt; or &lt;code&gt;${variable_name}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;__P&lt;/code&gt; can be used to read the values from the JMeter CLI. &lt;code&gt;${}&lt;/code&gt; can be used to read within the JMeter test plan.&lt;/p&gt;

&lt;h2&gt;Checkbox expressions usecases&lt;/h2&gt;

&lt;p&gt;You may think where this feature will be useful. Actually it has various usecases: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test different thread groups consecutively.&lt;/li&gt;



&lt;li&gt;to test various HTTP sampler settings such as keep alive, multi-form data, headers, and more.&lt;/li&gt;



&lt;li&gt;Test various thread group properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://jmeter.apache.org/download_jmeter.cgi" rel="noopener noreferrer"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;Download Apache JMeter 5.6&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;



</description>
      <category>performance</category>
      <category>testing</category>
      <category>java</category>
      <category>tools</category>
    </item>
    <item>
      <title>Introducing PerfGPT - analyze your performance test results using OpenAI</title>
      <dc:creator>NaveenKumar Namachivayam ⚡</dc:creator>
      <pubDate>Fri, 10 Mar 2023 16:23:50 +0000</pubDate>
      <link>https://forem.com/qainsights/introducing-perfgpt-analyze-your-performance-test-results-using-openai-327e</link>
      <guid>https://forem.com/qainsights/introducing-perfgpt-analyze-your-performance-test-results-using-openai-327e</guid>
      <description>&lt;p&gt;In the past couple of posts we have discussed how to use ChatGPT for &lt;a href="https://qainsights.com/top-10-jmeter-questions-to-ask-chatgpt/" rel="noreferrer noopener"&gt;JMeter&lt;/a&gt; tasks and &lt;a href="https://qainsights.com/chatgpt-use-cases-for-performance-engineers/" rel="noreferrer noopener"&gt;use cases for performance engineers&lt;/a&gt;. In this blog post, I am happy to introduce PerfGPT an open source tool to analyze your performance test results using the OpenAI model. &lt;/p&gt;

&lt;h2&gt;What is PerfGPT?&lt;/h2&gt;

&lt;p&gt;PerfGPT is an open source web application which helps in analyzing performance test results using the OpenAI model. It is completely free to use, even for commercial purposes. &lt;/p&gt;

&lt;h2&gt;About PerfGPT&lt;/h2&gt;

&lt;p&gt;PerfGPT backbone is OpenAI API. PerfGPT is a lightweight web application which is built using Flask - a Python framework for web development. &lt;/p&gt;

&lt;h2&gt;How to use PerfGPT?&lt;/h2&gt;

&lt;p&gt;Head to &lt;a href="https://perfgpt.ai/" rel="noopener noreferrer"&gt;https://perfgpt.ai/&lt;/a&gt; to login using GitHub account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/02/image.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fimage.png" alt="PerfGPT Login" width="636" height="512"&gt;&lt;/a&gt;PerfGPT Login&lt;/p&gt;

&lt;p&gt;PerfGPT requires only minimal info from your GitHub account. It will not read nor make any changes to your repos. After successful login, click &lt;strong&gt;Upload &lt;/strong&gt;button which will take you to the upload page.&lt;/p&gt;

&lt;p&gt;You can upload your test results either in JSON, CSV, or JTL. The recommended upload format is CSV. Select the file and then click on the &lt;strong&gt;Upload &lt;/strong&gt;button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/02/image-1.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fimage-1-1024x584.png" alt="Upload to PerfGPT" width="800" height="456"&gt;&lt;/a&gt;Upload to PerfGPT&lt;/p&gt;

&lt;p&gt;Upon clicking the Upload button, PerfGPT will process the data and present its findings as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qainsights.com/wp-content/uploads/2023/02/image-2.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fqainsights.com%2Fwp-content%2Fuploads%2F2023%2F02%2Fimage-2-1024x303.png" alt="PerfGPT Results" width="800" height="237"&gt;&lt;/a&gt;PerfGPT Results&lt;/p&gt;

&lt;p&gt;PerfGPT generates two summaries: High level and Detailed summary. This analysis will help performance engineers to draw the conclusion from the raw performance test results without spending more time on manual analysis using spreadsheet programs or analytics tools. &lt;/p&gt;

&lt;h2&gt;Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free and Open Source&lt;/li&gt;



&lt;li&gt;No need to use your OpenAI API key &lt;/li&gt;



&lt;li&gt;PerfGPT will not read or store your raw test data. &lt;/li&gt;



&lt;li&gt;Fast OpenAI analysis for your raw performance results&lt;/li&gt;



&lt;li&gt;Tool agnostic analysis. You can upload the results from any performance testing tools. &lt;/li&gt;



&lt;li&gt;Slack integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Limitations&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;10 MiB file upload size limit&lt;/li&gt;



&lt;li&gt;10 uploads per month&lt;/li&gt;



&lt;li&gt;Results accuracy still needs improvement. Eventually the OpenAI model will be good at it. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;PerfGPT is a web application that is both free and open source. It assists performance engineers in efficiently analyzing raw data through the use of an OpenAI model, allowing them to focus on their other responsibilities. Additionally, the OpenAI model will continue to enhance its precision in processing raw data in the near future.&lt;/p&gt;

</description>
      <category>openai</category>
      <category>opensource</category>
      <category>testing</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
