<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Microsoft Community at Perficient, Inc.</title>
	<atom:link href="https://blogs.perficient.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://blogs.perficient.com/</link>
	<description>Perficient is one of only 40 Microsoft National Systems Integrators. We are a national IT consulting firm serving the world's most successful and innovative companies.</description>
	<lastBuildDate>Thu, 23 Jul 2026 15:27:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://blogs.perficient.com/wp-content/uploads/2026/03/cropped-Perficient-Favicon-512-150x150.png</url>
	<title>Perficient Blogs</title>
	<link>https://blogs.perficient.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">30508587</site>	<item>
		<title>At the Speed of Content: Adobe’s Lightning Fast Product Offerings</title>
		<link>https://blogs.perficient.com/at-the-speed-of-content-adobes-lightning-fast-product-offerings/</link>
		
		<dc:creator><![CDATA[Paul Goodrich]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 15:27:55 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392038</guid>

					<description><![CDATA[<p>It’s an exciting time to be in the digital marketing space. The rise of agentic AI means that you can deliver targeted, relevant content faster&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/at-the-speed-of-content-adobes-lightning-fast-product-offerings/">At the Speed of Content: Adobe’s Lightning Fast Product Offerings</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>It’s an exciting time to be in the digital marketing space. The rise of agentic AI means that you can deliver targeted, relevant content faster than ever before. However, with this growth also comes pressure to move quickly when selecting a content platform. You can generate all of this content, but where are you going to store it, and how are you going to deliver it?</p>
<p>Adobe Experience Manager continues to lead the enterprise content management space, combining proven enterprise-grade tooling with flexible delivery, powerful extensibility, and dependable performance. But leadership doesn’t stand still. Newer Adobe Experience Manager offerings embrace a highly flexible and scalable serverless architecture, built from the ground up and crafted from Adobe’s 20+ years of content management experience. Adobe has been working diligently on a new delivery architecture that leverages edge-based scaling and recommends serverless edge workers in place of application servers and services. This solution is called Edge Delivery Services (EDS).</p>
<p>“Wait, I thought EDS was document authoring?”</p>
<p>Not necessarily. The important thing to understand about Edge Delivery Services is that, as its name suggests, the solution is primarily a change in the content delivery tier. That in turn, once you adopt it, you’re faced with a new set of decisions to make about where you want to store the content and which UI you want to use to author it.</p>
<p><img fetchpriority="high" decoding="async" data-attachment-id="392048" data-permalink="https://blogs.perficient.com/at-the-speed-of-content-adobes-lightning-fast-product-offerings/eds-updated-2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1.png" data-orig-size="1428,823" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Eds Updated" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1-1024x590.png" class="alignnone wp-image-392048 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1-1024x590.png" alt="Eds Updated" width="1024" height="590" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1-1024x590.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1-300x173.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1-768x443.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/eds-updated-1.png 1428w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>When you move to EDS, you always have the same Adobe-managed Delivery and Services tiers, but you can bring your own CDN to sit on top of them and the tiers that come before are flexible. When we talk about the Platform tier, there are two primary content store and management options.</p>
<ol>
<li><strong>Document Authoring</strong><br />
This newer approach can use Adobe’s DA.live product, Google Docs, or SharePoint as a content store. (You may recognize DA.live by its previous names &#8212; Dark Alley, Project Franklin, or Project Helix.) Adobe heavily recommends DA.live and Document Authoring via Experience Workspace for new AEM implementations.</li>
<li><strong>AEM as a Cloud Service (XWalk)</strong><br />
When AEMaaCS is used in EDS, it’s called AEM XWalk (crosswalk). It continues to have all of the content storage and management benefits of AEM as a Cloud Service, but the content is delivered quite differently. Instead of the traditional approach where web requests come to the AEM Publish instance via Apache Sling, Adobe’s Edge Delivery Service constructs a traditional HTML hierarchy and serves it at the CDN. There’s no more Sling resource mapping and page compilation at the time of an end user’s request.</li>
</ol>
<p>Now, to further paint this picture, I think it’s helpful to compare pieces of the classic AEM headful stack and their equivalent headful options in the Edge Delivery Services model.</p>
<table>
<tbody>
<tr>
<td width="123"><strong>Stack Capability</strong></td>
<td width="182"><strong>Headful AEM</strong></td>
<td width="150"><strong>EDS &#8211; XWalk</strong></td>
<td width="168"><strong>EDS – Document Authoring</strong></td>
</tr>
<tr>
<td width="123">Content Store</td>
<td width="182">Java Content Repository</td>
<td width="150">Java Content Repository</td>
<td width="168">DA.live, Google Docs, or SharePoint. Hierarchical document structure.</td>
</tr>
<tr>
<td width="123">Data Models</td>
<td width="182">Sling Models</td>
<td width="150">Block model json</td>
<td width="168">Block model json + Javascript + CSS</td>
</tr>
<tr>
<td width="123">Rendering</td>
<td width="182">HTL Scripts + Javascript + CSS</td>
<td width="150">Block model json + Javascript + CSS</td>
<td width="168">Block model json + Javascript + CSS</td>
</tr>
<tr>
<td width="123">Component-level Authoring</td>
<td width="182">AEM Touch UI Dialog XML</td>
<td width="150">Universal Editor authoring panel.  Uses AEM Blocks json definitions.</td>
<td width="168">DA.live document authoring, Google Docs, SharePoint docs, OR Universal Editor.  All use AEM Blocks json definitions.</td>
</tr>
<tr>
<td width="123">Page Editing</td>
<td width="182">AEM Page Editor</td>
<td width="150">Universal Editor</td>
<td width="168">DA.live document authoring, Google Docs, SharePoint docs, OR Universal Editor.</td>
</tr>
<tr>
<td width="123">Page Management</td>
<td width="182">AEM Sites Admin</td>
<td width="150">AEM Sites Admin</td>
<td width="168">DA.live document folders, Google Docs folders, SharePoint folders.</td>
</tr>
<tr>
<td width="123">Delivery Tier</td>
<td width="182">Publish server + Dispatcher + Fastly CDN + BYO CDN (optional)</td>
<td width="150">Fastly CDN + BYO CDN (optional) for content HTML.  Product bus or edge workers for data.</td>
<td width="168">Fastly CDN + BYO CDN (optional) for content HTML. Product bus or edge workers for data.</td>
</tr>
<tr>
<td width="123">Routing</td>
<td width="182">Dispatcher + Apache Sling</td>
<td width="150">Fastly CDN + BYO CDN (optional)</td>
<td width="168">Fastly CDN + BYO CDN (optional)</td>
</tr>
<tr>
<td width="123">Caching</td>
<td width="182">Dispatcher + Fastly CDN + BYO CDN (optional)</td>
<td width="150">Fastly CDN + BYO CDN (optional)</td>
<td width="168">Fastly CDN + BYO CDN (optional)</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>As Adobe has moved to a more decoupled architecture, you may have noticed that the number of options per stack capability has also grown. This is important as selecting a platform type forces you into a set of content stores, which then forces you into a set of compatible authoring UIs.</p>
<p>Before you do anything else, you need to decide if you want a Headful or Headless AEM implementation. If you’re not sure how to decide, I recommend my <a href="https://blogs.perficient.com/headful-or-headless-aem-revisited-for-2026/">previous blog on the topic</a>.</p>
<p>One important amendment based on insights from Adobe Summit is that Adobe is making a large investment in agentic AI and tooling for the experience layer. While choosing headless will decouple the CMS from the presentation layer and have a higher degree of freedom, you’re also <strong>limiting Adobe’s ability to add value at the presentation layer. </strong>New presentation-layer features and agents will only work in a headful experience.</p>
<p>With user-driven web experiences on the horizon, this is an increasingly important consideration. You may ultimately find it more valuable to cater to user interests with adaptable, personalized experience rendering than stick with traditional business-driven experiences.</p>
<p>Once you’ve made the Headful vs Headless call, the next set of capability decisions becomes clearer.</p>
<h2>Headful Decisions</h2>
<p>If you decide on a headful approach, you’re implicitly picking EDS. From there you decide between XWalk or Document Authoring as the content source. While the exact pros and cons of each solution are beyond the scope of this blog post, I will offer a few light comparisons.</p>
<p><strong>1. XWalk</strong> utilizes all of the existing AEM content management tooling, security, workflows, WYSIWYG authoring, and content policy controls.</p>
<p><strong>2. Document Authoring</strong> focuses on author empowerment in the document-style authoring that most users already understand.</p>
<h3>Decision &#8211; Headful with XWalk</h3>
<p>If you decide on XWalk, the AEMaaCS Java Content Repository will be your primary content authoring store, just like in a traditional AEMaaCS implementation. The AEM Sites Admin will continue to manage your page content. What changes are the following:</p>
<ul>
<li>You will need to utilize <strong>AEM blocks</strong> instead of Touch UI components</li>
<li><strong>Universal Editor</strong> will be your primary component and page editor.</li>
</ul>
<h3>Decision &#8211; Headful with Document Authoring</h3>
<p>If you decide on Document Authoring, you have several choices for a primary content authoring store. I highly recommend DA.live as the primary source as it contains CMS tooling, though you may have existing documents in Google Docs and SharePoint you want to integrate. Document Authoring implementations require AEM blocks. Then you have a choice about how your authors edit content:</p>
<ol>
<li>Edit directly in the <strong>Document UI.</strong></li>
<li>Edit in <strong>Universal Editor</strong> for a more WYSIWYG experience.</li>
</ol>
<h2>Headless Decisions</h2>
<p>If you decide on a headless approach, you have a different series of decisions to make. Both the AEMaaCS JCR and Document Authoring can be a headless content store. As I said earlier, the exact pros and cons of each headless solution are beyond the scope of this blog post, so let’s focus on the subsequent decisions.</p>
<h3>Decision &#8211; Headless with AEMaaCS</h3>
<p>If you decide to use AEMaaCS, do you utilize:</p>
<ol>
<li>Content fragments</li>
<li>Page-based resources</li>
<li>Both?</li>
</ol>
<p>I covered these pros and cons in <a href="https://blogs.perficient.com/implementing-headless-page-based-authoring-in-adobes-universal-editor-part-2/">my last blog post.</a> If you use page-based resources, you will always use the Universal Editor as the authoring UI. If you use content fragments, you will use the content fragment editor and optionally the Universal Editor if you want WYSWYG-style authoring.</p>
<p>Now, there’s one caveat with AEMaaCS to be aware of. If you use page-based resources, as of mid-2026, there is no OOTB schema definition available for AEM Blocks (EDS-style components).  If you want small headless payloads, you will have to utilize classic Sling Models as described in my last blog post or develop a custom solution.</p>
<h3>Decision &#8211; Headless with Document Authoring</h3>
<p>If you decide on a headless approach with Document Authoring, I would highly encourage you to use DA.live and not Google or SharePoint. In a headless use case, you need a schema-based JSON export. Of the previously mentioned document stores, only DA.live offers that out of the box. Document Authoring implementations require AEM blocks implementations. Then you have a choice to make about how your authors edit content. You can have them edit directly in the document view or utilize the Universal Editor for a more WYSIWYG experience.</p>
<h2>Wrap-up</h2>
<p>With an increasingly decoupled AEM architecture, there are more options than ever before to meet the needs of your organization. Still need help deciding? Be on the lookout for a future blog post that walks through the paradigm shift that is Document Authoring. Or reach out directly! For more information on how Perficient can implement your dream digital experiences, we’d love to hear from you. We’re certified by Adobe for our proven capabilities, and we hold an <strong>Adobe Experience Manager specialization</strong> (<em>among others</em>).</p>
<p><a href="https://www.perficient.com/contact"><strong>Contact Perficient to start your journey</strong></a><strong>.</strong></p>
<p>The post <a href="https://blogs.perficient.com/at-the-speed-of-content-adobes-lightning-fast-product-offerings/">At the Speed of Content: Adobe’s Lightning Fast Product Offerings</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-1929775959-1024x512.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392038</post-id>	</item>
		<item>
		<title>JMeter Performance Testing</title>
		<link>https://blogs.perficient.com/jmeter-performance-testing/</link>
		
		<dc:creator><![CDATA[Pawan Akre]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 16:45:09 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391915</guid>

					<description><![CDATA[<p>#1. What is JMeter? JMeter is a free tool made by Apache that helps you test how well your website, app, or API performs when&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/jmeter-performance-testing/">JMeter Performance Testing</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>#1. What is JMeter?</strong></p>
<p>JMeter is a free tool made by Apache that helps you test how well your website, app, or API performs when lots of people use it at the same time. It acts like many users hitting your system all at once to see how it handles the pressure.</p>
<p>It’s great for testing:</p>
<ul>
<li>Websites and web apps</li>
<li>REST and SOAP APIs</li>
<li>Databases</li>
</ul>
<p><img decoding="async" data-attachment-id="391916" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1.png" data-orig-size="1215,378" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter1" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1-1024x319.png" class="alignnone wp-image-391916 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1-1024x319.png" alt="Jmeter1" width="1024" height="319" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1-1024x319.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1-300x93.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1-768x239.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter1.png 1215w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<p>Other services like FTP, JMS, LDAP (though most people use it for web and API testing). JMeter runs on Java, so make sure you have Java installed — version 8 or higher (Java 17+ is even better). The latest version of JMeter is around 5.6.3.</p>
<p><strong>#2. Apache JMeter Working</strong></p>
<p>JMeter is a Java based application or tool that simulates a group of users and sends requests to a target server. And hence, return statistics which show the functionality and performance of the server.</p>
<p>Working of Apache JMeter is explained in the image below:</p>
<p><img decoding="async" data-attachment-id="391917" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2.png" data-orig-size="1346,747" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2-1024x568.png" class="alignnone wp-image-391917 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2-1024x568.png" alt="Jmeter2" width="1024" height="568" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2-1024x568.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2-300x166.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2-768x426.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter2.png 1346w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p><strong>#3. JMeter Test Plan Structure</strong></p>
<p>Everything in JMeter lives inside a <strong>Test Plan</strong> — think of it as your test notebook.</p>
<p>Basic tree structure looks like this (from top to bottom):</p>
<ul>
<li><strong>Test Plan</strong> (the root / main folder)
<ul>
<li><strong>Thread Group</strong> (your virtual users — most important!)
<ul>
<li><strong>Samplers</strong> (what action each user does — e.g. HTTP Request to open google.com)</li>
<li><strong>Logic Controllers</strong> (if/loop/while — optional for now)</li>
<li><strong>Pre/Post Processors</strong> (prepare or clean data — optional)</li>
<li><strong>Assertions</strong> (check if response is correct — optional)</li>
<li><strong>Timers</strong> (add think time between clicks — very useful!)</li>
<li><strong>Config Elements</strong> (HTTP Header Manager, Cookies, etc.)</li>
</ul>
</li>
<li><strong>Listeners</strong> (how you see results — tables, graphs, reports)</li>
</ul>
</li>
</ul>
<p>Most beginners start with just: Test Plan → Thread Group → HTTP Request → Listener.</p>
<p><strong>#4. Create Your First Test Plan (Step-by-Step)</strong></p>
<p><strong>Step 1: Download and open JMeter</strong></p>
<ol>
<li>Download JMeter from the official Apache page:<br />
<a href="https://jmeter.apache.org/download_jmeter.cgi">https://jmeter.apache.org/download_jmeter.cgi</a></li>
<li>Download the <strong>binary</strong> file (ZIP or TGZ). For example, <strong>Apache JMeter 5.6.3</strong> has both apache-jmeter-5.6.3.zip and apache-jmeter-5.6.3.tgz.</li>
<li>Unzip / extract it anywhere on your machine.<img loading="lazy" decoding="async" data-attachment-id="391918" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter3.png" data-orig-size="624,254" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter3.png" class="alignnone wp-image-391918 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter3.png" alt="Jmeter3" width="624" height="254" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter3.png 624w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter3-300x122.png 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></li>
<li>Open the <strong>bin</strong> folder:
<ol>
<li>Windows: double‑click jmeter.bat</li>
<li>Mac/Linux: run jmeter.sh<br />
<img loading="lazy" decoding="async" data-attachment-id="391919" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter4/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter4.png" data-orig-size="624,448" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter4" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter4.png" class="alignnone wp-image-391919 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter4.png" alt="Jmeter4" width="624" height="448" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter4.png 624w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter4-300x215.png 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></li>
</ol>
</li>
<li>JMeter GUI opens and you will see a blank <strong>Test Plan</strong>.</li>
</ol>
<p><img loading="lazy" decoding="async" data-attachment-id="391920" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter5/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter5.png" data-orig-size="717,375" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter5" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter5.png" class="alignnone wp-image-391920 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter5.png" alt="Jmeter5" width="717" height="375" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter5.png 717w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter5-300x157.png 300w" sizes="auto, (max-width: 717px) 100vw, 717px" /></p>
<p><strong>Step 2: Add a Thread Group (users)</strong></p>
<ol>
<li>Right‑click <strong>Test Plan</strong> → <strong>Add</strong> → <strong>Threads (Users)</strong> → <strong>Thread Group</strong></li>
</ol>
<p><img loading="lazy" decoding="async" data-attachment-id="391923" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter6/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter6.png" data-orig-size="550,308" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter6" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter6.png" class="alignnone wp-image-391923 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter6.png" alt="Jmeter6" width="550" height="308" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter6.png 550w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter6-300x168.png 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391924" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter7/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter7.png" data-orig-size="523,171" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter7" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter7.png" class="alignnone wp-image-391924 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter7.png" alt="Jmeter7" width="523" height="171" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter7.png 523w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter7-300x98.png 300w" sizes="auto, (max-width: 523px) 100vw, 523px" /></p>
<p>Thread Group controls how many users run your test and how the load starts.</p>
<p><strong>Step 3: Create a GET API test (List objects)</strong></p>
<p><strong>3.1 Add HTTP Request sampler</strong></p>
<p>Right‑click <strong>Thread Group</strong> → <strong>Add</strong> → <strong>Sampler</strong> → <strong>HTTP Request</strong></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391925" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter8/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter8.png" data-orig-size="369,305" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter8" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter8.png" class="alignnone wp-image-391925 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter8.png" alt="Jmeter8" width="369" height="305" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter8.png 369w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter8-300x248.png 300w" sizes="auto, (max-width: 369px) 100vw, 369px" /></p>
<p><b><span data-contrast="auto">3.2 Fill HTTP Request fields (IMPORTANT)</span></b><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></p>
<p><span data-contrast="auto">Use these values:</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="87" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">Name</span></b><span data-contrast="auto"> : HTTP Get Request</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="80" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">Protocol:</span></b><span data-contrast="auto"> https</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="80" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="auto">Server Name or IP:</span></b><span data-contrast="auto"> api.restful-api.dev (only domain, not full URL) </span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="80" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="auto">Method:</span></b><span data-contrast="auto"> GET </span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="80" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><b><span data-contrast="auto">Path:</span></b><span data-contrast="auto"> /objects </span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto"> The real endpoint is:  </span><a href="https://api.restful-api.dev/objects"><b><span data-contrast="none">https://api.restful-api.dev/objects</span></b></a><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391961" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter9/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter9.png" data-orig-size="566,185" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter9" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter9.png" class="alignnone wp-image-391961 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter9.png" alt="Jmeter9" width="630" height="206" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter9.png 566w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter9-300x98.png 300w" sizes="auto, (max-width: 630px) 100vw, 630px" /></p>
<p><strong>Common mistake:</strong> Don’t put https://api.restful-api.dev/objects inside “Server Name”. If you add path there, JMeter can fail with host errors (UnknownHost). Use domain in Server Name and endpoint in Path.</p>
<p><strong>3.3 Add Listeners </strong></p>
<p>Right-click <strong>Thread Group</strong> → Add → Listener → <strong>View Results Tree</strong> (best for debugging)</p>
<ul>
<li>Add <strong>Summary Report</strong> or <strong>Aggregate Report</strong> (for final numbers)</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391962" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter910/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter910.png" data-orig-size="475,414" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter910" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter910.png" class="alignnone wp-image-391962 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter910.png" alt="Jmeter910" width="475" height="414" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter910.png 475w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter910-300x261.png 300w" sizes="auto, (max-width: 475px) 100vw, 475px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391963" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter11/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter11.png" data-orig-size="448,307" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter11" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter11.png" class="alignnone wp-image-391963 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter11.png" alt="Jmeter11" width="448" height="307" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter11.png 448w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter11-300x206.png 300w" sizes="auto, (max-width: 448px) 100vw, 448px" /></p>
<p><strong>3.4 Save Your Test Plan</strong></p>
<p>Save your file as something like <strong>FirstGetApiTest.jmx</strong></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391964" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter12/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter12.png" data-orig-size="370,294" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter12" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter12.png" class="alignnone wp-image-391964 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter12.png" alt="Jmeter12" width="370" height="294" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter12.png 370w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter12-300x238.png 300w" sizes="auto, (max-width: 370px) 100vw, 370px" /></p>
<p><strong>3.5 Run the Test</strong></p>
<p>Click green <strong>Play</strong> button (or Run → Start)</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391965" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter13/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter13.png" data-orig-size="593,205" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter13" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter13.png" class="alignnone wp-image-391965 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter13.png" alt="Jmeter13" width="593" height="205" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter13.png 593w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter13-300x104.png 300w" sizes="auto, (max-width: 593px) 100vw, 593px" /></p>
<p><strong>3.6 Watch the Results </strong></p>
<p>Watch the results in View Results Tree!</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391966" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter14/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter14.png" data-orig-size="309,289" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter14" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter14.png" class="alignnone wp-image-391966 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter14.png" alt="Jmeter14" width="416" height="389" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter14.png 309w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter14-300x281.png 300w" sizes="auto, (max-width: 416px) 100vw, 416px" /></p>
<p><strong>Step 4: Create a POST API test (Add an object)</strong></p>
<p><strong>4.1 Add another HTTP Request sampler</strong></p>
<p>Right‑click <strong>Thread Group</strong> → <strong>Add</strong> → <strong>Sampler</strong> → <strong>HTTP Request</strong></p>
<p><strong>4.2 Configure POST sampler fields</strong></p>
<ul>
<li><strong>Name: </strong>HTTP Post Request</li>
<li><strong>Protocol:</strong> https</li>
<li><strong>Server Name or IP:</strong> api.restful-api.dev</li>
<li><strong>Method:</strong> POST</li>
<li><strong>Path:</strong> /objects</li>
</ul>
<p><strong>4.3 Add JSON Body (Body Data)</strong></p>
<p>Inside the POST HTTP Request sampler, go to <strong>Body Data</strong> and paste this JSON:</p>
<p>JSON : {</p>
<p>&#8220;name&#8221;: &#8220;Apple MacBook Pro 16&#8221;,</p>
<p>&#8220;data&#8221;: { &#8220;year&#8221;: 2019,</p>
<p>&#8220;price&#8221;: 1849.99,</p>
<p>&#8220;CPU model&#8221;: &#8220;Intel Core i9&#8221;,</p>
<p>&#8220;Hard disk size&#8221;: &#8220;1 TB&#8221;</p>
<p>} }</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391967" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter15/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter15.png" data-orig-size="620,191" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter15" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter15.png" class="alignnone wp-image-391967 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter15.png" alt="Jmeter15" width="792" height="244" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter15.png 620w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter15-300x92.png 300w" sizes="auto, (max-width: 792px) 100vw, 792px" /></p>
<p>This sample object structure matches the API style shown by restful-api.dev (objects contain name and flexible data).</p>
<p><strong>4.4 Add Header (Content-Type)</strong></p>
<p>For POST requests, you should send JSON with correct header.</p>
<ol>
<li>Right‑click the <strong>POST HTTP Request</strong> (or Thread Group) →<br />
<strong>Add</strong> → <strong>Config Element</strong> → <strong>HTTP Header Manager</strong></li>
</ol>
<p><img loading="lazy" decoding="async" data-attachment-id="391969" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter16/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16.png" data-orig-size="474,478" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter16" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16.png" class="alignnone wp-image-391969 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16.png" alt="Jmeter16" width="593" height="598" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16.png 474w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16-297x300.png 297w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter16-150x150.png 150w" sizes="auto, (max-width: 593px) 100vw, 593px" /></p>
<p>2. Add header:</p>
<ul>
<li>Content-Type = application/json</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391970" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter17/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter17.png" data-orig-size="727,212" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter17" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter17.png" class="alignnone wp-image-391970 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter17.png" alt="Jmeter17" width="953" height="278" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter17.png 727w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter17-300x87.png 300w" sizes="auto, (max-width: 953px) 100vw, 953px" /></p>
<p>This tells the server your request body is JSON.</p>
<p><strong>Step 5: Add Listeners (to see results)</strong></p>
<p><strong>For debugging (best for beginners)</strong></p>
<ul>
<li>Right‑click <strong>Thread Group</strong> → <strong>Add</strong> → <strong>Listener</strong> → <strong>View Results Tree</strong></li>
</ul>
<p><strong>For final numbers (report-style)</strong></p>
<p>Add one of these:</p>
<ul>
<li><strong>Summary Report</strong> or <strong>Aggregate Report</strong></li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391971" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter18/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter18.png" data-orig-size="241,313" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter18" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter18.png" class="alignnone wp-image-391971 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter18.png" alt="Jmeter18" width="241" height="313" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter18.png 241w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter18-231x300.png 231w" sizes="auto, (max-width: 241px) 100vw, 241px" /></p>
<p>Listeners show your execution results in table/tree/graph formats and can save results too.</p>
<p><strong>Step 6: Save your test plan</strong></p>
<p>Save file: JMeter recommends saving your test plan before running.</p>
<p><strong>Step 7: Run the test</strong></p>
<p>Click the <strong>green Play</strong> button (or <strong>Run → Start</strong>).</p>
<p>Now open <strong>View Results Tree</strong> to see:</p>
<ul>
<li>Request details</li>
<li>Response body</li>
<li>Status code (200/201)</li>
<li>Any error message</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391972" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter19/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter19.png" data-orig-size="454,225" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter19" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter19.png" class="alignnone wp-image-391972 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter19.png" alt="Jmeter19" width="454" height="225" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter19.png 454w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter19-300x149.png 300w" sizes="auto, (max-width: 454px) 100vw, 454px" /></p>
<p>You now understand how to create <strong>GET and POST API</strong> tests in JMeter.<br />
Next, let’s take your learning one step further with two practical real‑world challenges.<br />
The first covers <strong>JWT Authentication Testing in JMeter</strong>, and the second focuses on Data‑Driven <strong>Testing at Scale with JMeter (CSV + Groovy).</strong></p>
<h2><strong>Challenge A: JWT Authentication Testing in JMeter Using DummyJSON API</strong></h2>
<p>This section provides a simple, production-friendly approach to testing JWT authentication in Apache JMeter using the DummyJSON Auth API. It demonstrates how to build a minimal test plan that performs a complete authentication flow with only the essential JMeter components. The guide walks through sending a login request to generate a JWT accessToken, extracting the token using a JSON Extractor, and finally invoking a protected endpoint (/auth/me) using the required Authorization: Bearer &lt;token&gt; header. With a focus on clarity and minimalism—no timers, assertions, or extra plugins. This blog serves as an ideal starting point for understanding token-based authentication testing in JMeter.</p>
<p><strong>Step 1: Create a New Test Plan</strong></p>
<ol>
<li>Open <strong>Apache JMeter 5.6.3+</strong></li>
<li>Go to <strong>File → New</strong></li>
<li>Rename it to: DummyJsonAuthTest</li>
</ol>
<p><img loading="lazy" decoding="async" data-attachment-id="391973" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter20/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter20.png" data-orig-size="571,228" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter20" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter20.png" class="alignnone wp-image-391973 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter20.png" alt="Jmeter20" width="709" height="283" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter20.png 571w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter20-300x120.png 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></p>
<p><strong>Step 2: Add HTTP Request Defaults</strong></p>
<ol>
<li>Right‑click <strong>Test Plan</strong> →<br />
<strong>Add → Config Element → HTTP Request Defaults</strong></li>
<li>Enter the following values:</li>
</ol>
<ul>
<li><strong>Server Name or IP:</strong> dummyjson.com</li>
<li><strong>Protocol:</strong> https</li>
</ul>
<p>This sets the base URL so you don’t repeat it everywhere.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391974" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter21/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter21.png" data-orig-size="586,235" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter21" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter21.png" class="alignnone wp-image-391974 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter21.png" alt="Jmeter21" width="721" height="289" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter21.png 586w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter21-300x120.png 300w" sizes="auto, (max-width: 721px) 100vw, 721px" /></p>
<p><strong>Step 3: Add Global HTTP Header (Content-Type)</strong></p>
<ol>
<li>Right‑click <strong>Test Plan</strong> →<br />
<strong><strong>Add → Config Element → HTTP Header Manager</strong></strong>&nbsp;</li>
<li>Add only one header:</li>
</ol>
<ul>
<li><strong>Name:</strong> Content-Type</li>
<li><strong>Value:</strong> application/json</li>
</ul>
<p>This ensures your JSON login body is posted correctly.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391975" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter22/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter22.png" data-orig-size="578,229" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter22" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter22.png" class="alignnone wp-image-391975 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter22.png" alt="Jmeter22" width="762" height="302" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter22.png 578w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter22-300x119.png 300w" sizes="auto, (max-width: 762px) 100vw, 762px" /></p>
<p><strong>Step 4: Add a Thread Group</strong></p>
<ol>
<li>Right‑click <strong>Test Plan</strong> →<br />
<strong><strong><strong>Add → Threads (Users) → Thread Group</strong></strong></strong>&nbsp;</li>
<li>Configure the following settings:</li>
</ol>
<ul>
<li><strong>Number of Threads:</strong> 1</li>
<li><strong>Ramp-Up Period:</strong> 1</li>
<li><strong>Loop Count:</strong> 1</li>
</ul>
<p>This keeps the test extremely lightweight.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391976" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter23/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter23.png" data-orig-size="591,232" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter23" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter23.png" class="alignnone wp-image-391976 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter23.png" alt="Jmeter23" width="797" height="313" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter23.png 591w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter23-300x118.png 300w" sizes="auto, (max-width: 797px) 100vw, 797px" /></p>
<p><strong>Step 5: Add Login API (POST /auth/login)</strong></p>
<ol>
<li>Right‑click <strong>Thread Group</strong> →<br />
<strong>Add → Sampler → HTTP Request</strong></li>
<li>Set the following:</li>
</ol>
<ul>
<li><strong>Name:</strong> Login &#8211; POST /auth/login</li>
<li><strong>Method:</strong> POST</li>
<li><strong>Path:</strong> /auth/login</li>
</ul>
<p>3,  Go to <strong>Body Data</strong> tab → paste:</p>
<p>{</p>
<p>&#8220;username&#8221;: &#8220;emilys&#8221;,</p>
<p>&#8220;password&#8221;: &#8220;emilyspass&#8221;,</p>
<p>&#8220;expiresInMins&#8221;: 30</p>
<p>}</p>
<p>This request matches DummyJSON’s official documented example.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391977" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter24/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter24.png" data-orig-size="575,227" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter24" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter24.png" class="alignnone wp-image-391977 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter24.png" alt="Jmeter24" width="765" height="302" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter24.png 575w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter24-300x118.png 300w" sizes="auto, (max-width: 765px) 100vw, 765px" /></p>
<p><strong>Step 6: Extract JWT accessToken</strong></p>
<p>This is the most important step.</p>
<ol>
<li>Right‑click <strong>Login sampler</strong> →<br />
<strong>Add → Post Processor → JSON Extractor</strong></li>
<li>Configure the following:</li>
</ol>
<ul>
<li><strong>Variable Name:</strong> accessToken</li>
<li><strong>JSONPath Expression:</strong> $.accessToken</li>
<li><strong>Default Value:</strong> NOT_FOUND</li>
</ul>
<p>Why $.accessToken?<br />
Because DummyJSON returns this exact field name in the login response.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391978" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter25/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter25.png" data-orig-size="572,227" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter25" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter25.png" class="alignnone wp-image-391978 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter25.png" alt="Jmeter25" width="791" height="314" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter25.png 572w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter25-300x119.png 300w" sizes="auto, (max-width: 791px) 100vw, 791px" /></p>
<p><strong> Step 7: Add Protected API (GET /auth/me)</strong></p>
<ol>
<li>Right‑click <strong>Thread Group</strong> →<br />
<strong>Add → Sampler → HTTP Request</strong></li>
<li>Configure the following:</li>
</ol>
<ul>
<li><strong>Name:</strong> Protected &#8211; GET /auth/me</li>
<li><strong>Method:</strong> GET</li>
<li><strong>Path:</strong> /auth/me</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391979" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter26/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter26.png" data-orig-size="556,221" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter26" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter26.png" class="alignnone wp-image-391979 " src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter26.png" alt="Jmeter26" width="815" height="324" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter26.png 556w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter26-300x119.png 300w" sizes="auto, (max-width: 815px) 100vw, 815px" /></p>
<p><strong>Step 8: Add Authorization Header (Bearer Token)</strong></p>
<ol>
<li>Right‑click <strong>Protected sampler</strong> →<br />
<strong>Add → Config Element → HTTP Header Manager</strong></li>
<li>Add:</li>
</ol>
<ul>
<li><strong>Name:</strong> Authorization</li>
<li><strong>Value:</strong> Bearer ${accessToken}</li>
</ul>
<p>DummyJSON explicitly states that /auth/me must receive the <strong>accessToken</strong> via the Bearer header.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391980" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter27/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter27.png" data-orig-size="593,237" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter27" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter27.png" class="alignnone wp-image-391980 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter27.png" alt="Jmeter27" width="593" height="237" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter27.png 593w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter27-300x120.png 300w" sizes="auto, (max-width: 593px) 100vw, 593px" /></p>
<p><strong>Step 9: Add View Results Tree (Optional but Useful)</strong></p>
<ol>
<li>Right‑click <strong>Thread Group</strong> →<br />
<strong>Add → Listener → View Results Tree</strong></li>
</ol>
<p>This will allow you to see the response body and confirm that the token extraction works correctly.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391981" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter28/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter28.png" data-orig-size="624,125" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter28" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter28.png" class="alignnone wp-image-391981 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter28.png" alt="Jmeter28" width="624" height="125" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter28.png 624w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter28-300x60.png 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></p>
<p><strong>Step 10: Run the Test</strong></p>
<p>Click the <strong>green Start button</strong> (<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" />).</p>
<p><strong>Expected Behavior</strong></p>
<ul>
<li><strong>Login API</strong> returns 200 with a JSON containing accessToken.</li>
<li>The <strong>JSON Extractor</strong> captures the token.</li>
<li><strong>Protected API</strong> returns 200 with authenticated user details.</li>
</ul>
<p>If you see:</p>
<p>401 Unauthorized</p>
<p>Check the View Results Tree → Request headers → Authorization must look like:</p>
<p>Authorization: Bearer eyJhbGciOiJIUzI1NiIs&#8230;</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391982" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter29/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter29.png" data-orig-size="594,168" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter29" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter29.png" class="alignnone wp-image-391982 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter29.png" alt="Jmeter29" width="594" height="168" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter29.png 594w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter29-300x85.png 300w" sizes="auto, (max-width: 594px) 100vw, 594px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391984" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter30-2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter30-1.png" data-orig-size="594,166" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter30" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter30-1.png" class="alignnone wp-image-391984 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter30-1.png" alt="Jmeter30" width="594" height="166" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter30-1.png 594w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter30-1-300x84.png 300w" sizes="auto, (max-width: 594px) 100vw, 594px" /></p>
<h2><strong>Challenge B: Data‑Driven Testing at Scale with JMeter (CSV + Groovy)</strong></h2>
<p>This section explains an easy and practical way to run large‑scale API load tests in JMeter without errors or data conflicts. When many virtual users use the same username or repeated IDs, tests often fail because of server caching or duplicating data issues. To avoid this, the blog shows how to give each virtual user its <strong>own unique data</strong> using a CSV file, small random values, and Groovy scripts.</p>
<p>You’ll learn how to create a clean and simple JMeter test plan that reads login details from a CSV file, skips the header row, adds random values, and generates unique fields through a Groovy PreProcessor. The test then logs in, extracts an access token, and uses that token to call a protected endpoint. This guide helps you build reliable, scalable, and realistic API tests in JMeter.</p>
<p><strong>1) Prepare Your CSV Data</strong></p>
<p>Create a file named users.csv. <strong>Include a header</strong> and <strong>tab</strong> or <strong>comma</strong> as your delimiter. Two examples:</p>
<p><strong>Option A — Tab‑separated</strong></p>
<p>username        password</p>
<p>emilys emilyspass</p>
<p>michaelw         michaelwpass</p>
<p>sophiab            sophiabpass</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391985" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter31/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter31.png" data-orig-size="254,129" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter31" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter31.png" class="alignnone wp-image-391985 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter31.png" alt="Jmeter31" width="254" height="129" /></p>
<p><strong>Option B — Comma‑separated</strong></p>
<p>username,password</p>
<p>emilys,emilyspass</p>
<p>michaelw,michaelwpass</p>
<p>sophiab,sophiabpass</p>
<p>We’ll configure JMeter to <strong>ignore the first line</strong> so the header is <strong>not</strong> treated as credentials.</p>
<p><strong>2) Create a New JMeter Test Plan</strong></p>
<ol>
<li>Open <strong>JMeter</strong> → <strong>File → New</strong>.</li>
<li>Rename Test Plan to: DummyJsonAuthTest_data_driven</li>
</ol>
<p><img loading="lazy" decoding="async" data-attachment-id="391986" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter32/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter32.png" data-orig-size="565,250" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter32" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter32.png" class="alignnone wp-image-391986 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter32.png" alt="Jmeter32" width="565" height="250" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter32.png 565w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter32-300x133.png 300w" sizes="auto, (max-width: 565px) 100vw, 565px" /></p>
<p><strong>3) Add HTTP Request Defaults</strong></p>
<ul>
<li><strong>Test Plan</strong> → <strong>Add → Config Element → HTTP Request Defaults</strong><br />
Set:</p>
<ul>
<li><strong>Protocol</strong>: https</li>
<li><strong>Server Name or IP</strong>: dummyjson.com</li>
</ul>
</li>
</ul>
<p>(Prevents repeating the base URL for every request.)</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391987" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter33/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter33.png" data-orig-size="579,203" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter33" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter33.png" class="alignnone wp-image-391987 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter33.png" alt="Jmeter33" width="579" height="203" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter33.png 579w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter33-300x105.png 300w" sizes="auto, (max-width: 579px) 100vw, 579px" /></p>
<p><strong>4) Add Global HTTP Header Manager</strong></p>
<ul>
<li><strong>Test Plan</strong> → <strong>Add → Config Element → HTTP Header Manager</strong><br />
Add: Content-Type : application/json</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391988" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter34/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter34.png" data-orig-size="576,242" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter34" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter34.png" class="alignnone wp-image-391988 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter34.png" alt="Jmeter34" width="576" height="242" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter34.png 576w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter34-300x126.png 300w" sizes="auto, (max-width: 576px) 100vw, 576px" /></p>
<p><strong>5) Add CSV Data Set Config (Critical)</strong></p>
<ul>
<li><strong>Test Plan</strong> → <strong>Add → Config Element → CSV Data Set Config</strong></li>
</ul>
<p>Configure:</p>
<ul>
<li><strong>Filename</strong>: users.csv</li>
<li><strong>Variable Names</strong>: username,password</li>
<li><strong>Delimiter</strong>:
<ul>
<li>\t if your file uses <strong>tabs</strong></li>
<li>, if your file uses <strong>commas</strong></li>
</ul>
</li>
<li><strong>Ignore first line</strong>: <strong>True</strong>  <em>(ensures the header row is not treated as data)</em></li>
<li><strong>Recycle on EOF</strong>: False</li>
<li><strong>Stop thread on EOF</strong>: True</li>
<li><strong>Sharing mode</strong>: All threads</li>
</ul>
<p>With <strong>Ignore first line = True</strong>, JMeter reads username,password strictly as <strong>variable names</strong>, and your data rows become proper user credentials.</p>
<p>Setting <strong>Recycle=False / Stop on EOF=True</strong> ensures each row is used <strong>once per thread</strong> and unused threads stop when data runs out.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391989" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter35/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter35.png" data-orig-size="576,239" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter35" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter35.png" class="alignnone wp-image-391989 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter35.png" alt="Jmeter35" width="576" height="239" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter35.png 576w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter35-300x124.png 300w" sizes="auto, (max-width: 576px) 100vw, 576px" /></p>
<p><strong>6) Add a Thread Group</strong></p>
<ul>
<li><strong>Test Plan</strong> → <strong>Add → Threads (Users) → Thread Group</strong><br />
Example settings (tune to your needs):</p>
<ul>
<li><strong>Number of Threads (users)</strong>: 5</li>
<li><strong>Ramp‑Up (sec)</strong>: 5</li>
<li><strong>Loop Count</strong>: 1</li>
</ul>
</li>
</ul>
<p>Each thread will pick the next row from users.csv.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391991" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter36/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter36.png" data-orig-size="564,325" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter36" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter36.png" class="alignnone wp-image-391991 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter36.png" alt="Jmeter36" width="564" height="325" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter36.png 564w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter36-300x173.png 300w" sizes="auto, (max-width: 564px) 100vw, 564px" /></p>
<p><strong>7) Add the Login Request (POST /auth/login)</strong></p>
<ul>
<li><strong>Thread Group</strong> → <strong>Add → Sampler → HTTP Request</strong>
<ul>
<li><strong>Name</strong>: Login – POST /auth/login</li>
<li><strong>Method</strong>: POST</li>
<li><strong>Path</strong>: /auth/login</li>
</ul>
</li>
</ul>
<p><strong>Body Data</strong>:</p>
<p>{</p>
<p>&#8220;username&#8221;: &#8220;${username}&#8221;,</p>
<p>&#8220;password&#8221;: &#8220;${password}&#8221;,</p>
<p>&#8220;expiresInMins&#8221;: 30,</p>
<p>&#8220;note&#8221;: &#8220;rnd_${__Random(1000,9999,)}&#8221;</p>
<p>}</p>
<p><strong>Why this helps</strong></p>
<ul>
<li>${username} / ${password} come from the CSV row for that thread.</li>
<li>${__Random(1000,9999,)} appends a small random number per request (handy when you want trivial uniqueness).</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391992" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter37/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter37.png" data-orig-size="577,297" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter37" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter37.png" class="alignnone wp-image-391992 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter37.png" alt="Jmeter37" width="577" height="297" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter37.png 577w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter37-300x154.png 300w" sizes="auto, (max-width: 577px) 100vw, 577px" /></p>
<p><strong>8) Generate Unique Variables (JSR223 PreProcessor, Groovy)</strong></p>
<p>We’ll create values that are <strong>globally unique</strong> per sampler execution, perfect for payload fields like emails or order names.</p>
<ul>
<li><strong>Right‑click Login – POST /auth/login</strong> → <strong>Add → Pre Processors → JSR223 PreProcessor</strong></li>
<li><strong>Language</strong>: groovy</li>
<li><strong>Script</strong>:</li>
</ul>
<p>// Unique email and order name per sample</p>
<p>import org.apache.commons.lang3.RandomStringUtils</p>
<p>String random = RandomStringUtils.randomAlphanumeric(8)</p>
<p>vars.put(&#8216;uniqueEmail&#8217;, &#8216;test&#8217; + random + &#8216;@example.com&#8217;)</p>
<p>vars.put(&#8216;uniqueOrderName&#8217;, &#8216;Order_&#8217; + System.currentTimeMillis())</p>
<p>&#8220;</p>
<p>You can now use ${uniqueEmail} and ${uniqueOrderName} in any downstream JSON body or header to avoid caching/collisions.</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> If you see a class not found error for RandomStringUtils, add Apache Commons Lang to JMeter’s /lib folder and restart JMeter. Most distributions already include it, but environments vary.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391993" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter38/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter38.png" data-orig-size="531,250" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter38" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter38.png" class="alignnone wp-image-391993 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter38.png" alt="Jmeter38" width="531" height="250" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter38.png 531w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter38-300x141.png 300w" sizes="auto, (max-width: 531px) 100vw, 531px" /></p>
<p><strong>9) Extract the Token (JSON Extractor)</strong></p>
<ul>
<li><strong>Right‑click Login – POST /auth/login</strong> → <strong>Add → Post Processors → JSON Extractor</strong><br />
Configure:</p>
<ul>
<li><strong>Names of created variables</strong>: accessToken</li>
<li><strong>JSONPath expressions</strong>: $.accessToken</li>
<li><strong>Default Values</strong>: NOT_FOUND</li>
</ul>
</li>
</ul>
<p>The login response should return accessToken. This extractor exposes it as ${accessToken} for the next step.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="391994" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter39/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter39.png" data-orig-size="589,226" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter39" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter39.png" class="alignnone wp-image-391994 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter39.png" alt="Jmeter39" width="589" height="226" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter39.png 589w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter39-300x115.png 300w" sizes="auto, (max-width: 589px) 100vw, 589px" /></p>
<p><strong>10) Add a Protected Request (GET /auth/me)</strong></p>
<ul>
<li><strong>Thread Group</strong> → <strong>Add → Sampler → HTTP Request</strong>
<ul>
<li><strong>Name</strong>: Protected – GET /auth/me</li>
<li><strong>Method</strong>: GET</li>
<li><strong>Path</strong>: /auth/me</li>
</ul>
</li>
</ul>
<p><strong>Add a Header Manager (child of this sampler)</strong>:</p>
<ul>
<li>Authorization : Bearer ${accessToken}</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391995" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter40/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter40.png" data-orig-size="570,276" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter40" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter40.png" class="alignnone wp-image-391995 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter40.png" alt="Jmeter40" width="570" height="276" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter40.png 570w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter40-300x145.png 300w" sizes="auto, (max-width: 570px) 100vw, 570px" /></p>
<p><strong>11) Add One View Results Tree (for quick verification)</strong></p>
<ul>
<li><strong>Thread Group</strong> → <strong>Add → Listener → View Results Tree</strong></li>
</ul>
<p>Run a small test (1–5 threads) and verify:</p>
<ul>
<li><strong>Login</strong> → 200 OK, response contains accessToken.</li>
<li><strong>Debug Sampler</strong> (optional) shows username, password, uniqueEmail, uniqueOrderName, and accessToken.</li>
<li><strong>/auth/me</strong> → 200 OK with user details.</li>
<li>No more <strong>Invalid credentials</strong> due to the header row being treated as a login attempt.</li>
</ul>
<p><img loading="lazy" decoding="async" data-attachment-id="391996" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter41/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter41.png" data-orig-size="575,229" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter41" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter41.png" class="alignnone wp-image-391996 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter41.png" alt="Jmeter41" width="575" height="229" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter41.png 575w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter41-300x119.png 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391997" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter42/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter42.png" data-orig-size="575,213" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter42" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter42.png" class="alignnone wp-image-391997 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter42.png" alt="Jmeter42" width="575" height="213" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter42.png 575w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter42-300x111.png 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></p>
<p><img loading="lazy" decoding="async" data-attachment-id="391998" data-permalink="https://blogs.perficient.com/jmeter-performance-testing/jmeter43/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter43.png" data-orig-size="575,183" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Jmeter43" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter43.png" class="alignnone wp-image-391998 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter43.png" alt="Jmeter43" width="575" height="183" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter43.png 575w, https://blogs.perficient.com/wp-content/uploads/2026/07/jmeter43-300x95.png 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></p>
<p>The post <a href="https://blogs.perficient.com/jmeter-performance-testing/">JMeter Performance Testing</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-1429274633-1024x572.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">391915</post-id>	</item>
		<item>
		<title>DeepEval Explained Simply: Why Testing AI Outputs Matters</title>
		<link>https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/</link>
		
		<dc:creator><![CDATA[Venkata Sreeram Murthy Gonella]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 18:35:04 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392024</guid>

					<description><![CDATA[<p>Large Language Models (LLMs) are increasingly being used to power AI applications across industries. As adoption grows, organizations need ways to evaluate output quality, consistency, and&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/">DeepEval Explained Simply: Why Testing AI Outputs Matters</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span class="TextRun SCXW110113582 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW110113582 BCX0">Large Language Models (LLMs</span><span class="NormalTextRun SCXW110113582 BCX0">)</span><span class="NormalTextRun SCXW110113582 BCX0"> </span><span class="NormalTextRun SCXW110113582 BCX0">are increasingly being used to power AI applications acros</span><span class="NormalTextRun SCXW110113582 BCX0">s industries. As adoption grows, organizations need ways to evaluate output quality, consistency, and relevance. </span></span><span class="LineBreakBlob BlobObject DragDrop SCXW110113582 BCX0"><span class="SCXW110113582 BCX0"> </span><br class="SCXW110113582 BCX0" /></span><span class="LineBreakBlob BlobObject DragDrop SCXW110113582 BCX0"><span class="SCXW110113582 BCX0"> </span><br class="SCXW110113582 BCX0" /></span><span class="TextRun SCXW110113582 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW110113582 BCX0">DeepEval</span><span class="NormalTextRun SCXW110113582 BCX0"> </span><span class="NormalTextRun SCXW110113582 BCX0">is an evaluation fr</span><span class="NormalTextRun SCXW110113582 BCX0">amework that tests AI outputs the way software engineers test code. </span></span><span class="EOP SCXW110113582 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:300}"> </span></p>
<p><img loading="lazy" decoding="async" data-attachment-id="392033" data-permalink="https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/designer-1/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1.png" data-orig-size="1536,1024" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Designer (1)" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-1024x683.png" class="alignnone wp-image-392033 size-large" src="https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-1024x683.png" alt="Designer (1)" width="1024" height="683" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-1024x683.png 1024w, https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-300x200.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-768x512.png 768w, https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-600x400.png 600w, https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1-1200x800.png 1200w, https://blogs.perficient.com/wp-content/uploads/2026/07/Designer-1.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>1. Why Testing Is Required</h2>
<p>Traditional software is predictable; LLMs are probabilistic. Responses may vary depending on prompts, context, and available information. DeepEval addresses this through automated test cases, evaluation metrics, benchmarking, and continuous reporting.</p>
<h2>2. Types of Test Cases</h2>
<p>Single-Turn, Multi-Turn, and Arena Test Cases provide increasing levels of evaluation coverage.</p>
<h2>3. End-to-End LLM Evaluations</h2>
<p>Treat the application as a black box and evaluate final user outcomes.</p>
<h2>4. Confident AI Platform Features</h2>
<p>Confident AI extends DeepEval with Test Runs, Datasets, Arena comparisons, Experiments, Prompt Studio, Reporting, Observability, Governance, and collaborative evaluation workflows.</p>
<h2>5. Why This Matters for Business</h2>
<p>Objective quality measurement reduces risk and increases trust in AI systems.</p>
<h3>Conclusion</h3>
<p>DeepEval converts subjective AI evaluation into measurable engineering metrics.</p>
<h2>6. Evaluation Report Screenshot</h2>
<p><img loading="lazy" decoding="async" data-attachment-id="392026" data-permalink="https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/deepeval2/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2.png" data-orig-size="864,391" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Deepeval2" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2.png" class="alignnone wp-image-392026 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2.png" alt="Deepeval2" width="864" height="391" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2.png 864w, https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2-300x136.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval2-768x348.png 768w" sizes="auto, (max-width: 864px) 100vw, 864px" /></p>
<p>Figure 1. DeepEval / Confident AI Test Runs dashboard.</p>
<h2><strong>7. Python Installation</strong></h2>
<p>pip install deepeval</p>
<p>pip install &#8211;upgrade deepeval</p>
<p>deepeval &#8211;help</p>
<p>pip show deepeval – Get the version of deepeval</p>
<h2><strong>8. Running DeepEval Locally </strong></h2>
<p>One important observation from my testing:</p>
<p>I successfully performed local DeepEval testing without using an OpenAI API key by executing custom Python-based evaluation logic and creating evaluation reports locally.</p>
<p>This demonstrates that evaluation concepts and reporting can be validated locally using Python implementations. However, DeepEval also supports advanced LLM-as-a-Judge metrics.</p>
<p><img loading="lazy" decoding="async" data-attachment-id="392027" data-permalink="https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/deepeval3/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3.png" data-orig-size="864,588" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="Deepeval3" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3.png" class="alignnone wp-image-392027 size-full" src="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3.png" alt="Deepeval3" width="864" height="588" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3.png 864w, https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3-300x204.png 300w, https://blogs.perficient.com/wp-content/uploads/2026/07/deepeval3-768x523.png 768w" sizes="auto, (max-width: 864px) 100vw, 864px" /></p>
<h2>Arena Test Case Diagram</h2>
<p>Model A Answer &#8212;-&gt; Compare &#8212;-&gt; Winner<br />
Model B Answer &#8212;-^</p>
<h2>End-to-End Evaluation Flow</h2>
<p>User Query -&gt; AI App -&gt; Response -&gt; DeepEval Metrics -&gt; Report -&gt; Improvement</p>
<h2>LLM Evaluation Lifecycle</h2>
<p>Datasets -&gt; Test Cases -&gt; Evaluation -&gt; Metrics -&gt; Test Runs -&gt; Optimization</p>
<ul>
<li>Test Runs: Benchmark and track evaluation results over time.</li>
<li>Datasets: Manage golden datasets and evaluation samples.</li>
<li>Arena: Compare prompts, models, and responses side-by-side.</li>
<li>Experiments: Measure quality impact before release.</li>
<li>Prompt Studio: Iterate and validate prompts systematically.</li>
<li>Reports &amp; Dashboards: Centralized visibility into AI quality.</li>
<li>Observability: Monitor production traces and quality signals.</li>
<li>Governance: Standardize evaluation across teams.</li>
</ul>
<h2>References</h2>
<p><a href="https://deepeval.com/docs/evaluation-test-cases">https://deepeval.com/docs/evaluation-test-cases</a></p>
<p><a href="https://deepeval.com/docs/evaluation-end-to-end-llm-evals">https://deepeval.com/docs/evaluation-end-to-end-llm-evals</a></p>
<p><a href="https://app.confident-ai.com/project">https://app.confident-ai.com/project</a></p>
<p>The post <a href="https://blogs.perficient.com/deepeval-explained-simply-why-testing-ai-outputs-matters/">DeepEval Explained Simply: Why Testing AI Outputs Matters</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2166701874-1024x671.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">392024</post-id>	</item>
		<item>
		<title>Faster Decisions Start With AI-Driven Clinical Review</title>
		<link>https://blogs.perficient.com/faster-decisions-start-with-ai-driven-clinical-review/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Mon, 20 Jul 2026 15:57:08 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<category><![CDATA[AIinLifeSciences]]></category>
		<category><![CDATA[clinical data management]]></category>
		<category><![CDATA[homepage-featured]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=392005</guid>

					<description><![CDATA[<p>Clinical trials generate more data than ever before. From EDC systems, laboratory data, clinical trial management systems (CTMS), and safety data to operational and real-world&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/faster-decisions-start-with-ai-driven-clinical-review/">Faster Decisions Start With AI-Driven Clinical Review</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Clinical trials generate more data than ever before.</p>
<p>From EDC systems, laboratory data, clinical trial management systems (CTMS), and safety data to operational and real-world sources, the volume of information flowing through clinical programs continues to grow.</p>
<p>At the same time, AI is creating new opportunities to analyze that information at a scale that wasn&#8217;t previously possible. Organizations can no longer afford to treat quality as something that gets evaluated at the end of a study. Increasingly, they need to identify risks, signals, and data issues while there is still time to act.</p>
<p>That&#8217;s creating a new challenge for clinical teams. The industry&#8217;s problem is no longer access to data. It&#8217;s deciding where experts should focus their attention.</p>
<h2>More Data Hasn&#8217;t Made Review Easier</h2>
<p>For years, life sciences organizations have invested heavily in data platforms, automation, and analytics. Yet clinical trial delays remain stubbornly persistent.</p>
<p>According to the Tufts Center for the Study of Drug Development, approximately <a href="https://visionlifesciences.com/insights/clinical-trial-patient-enrollment-strategies" target="_blank" rel="noopener"><strong>80% of clinical trials still miss their planned enrollment timelines</strong></a>. If the industry has more data, more technology, and more AI than ever before, why do delays remain so persistent?</p>
<p>A core reason is that visibility alone doesn&#8217;t create action. Data may be available, but it&#8217;s not always organized, prioritized, or presented in a way that helps teams determine what requires attention first. Clinical data managers, medical reviewers, and biostatisticians still spend significant time reconciling information across multiple systems, reviewing discrepancies, and tracking down answers before meaningful analysis can even begin.</p>
<p><strong>Clinical teams are being asked to do all of this at once:</strong></p>
<ul>
<li>Review growing volumes of study data</li>
<li>Identify potential data issues and safety or efficacy signals earlier</li>
<li>Resolve discrepancies faster</li>
<li>Support increasingly complex protocols</li>
<li>Deliver cleaner, submission-ready datasets</li>
</ul>
<p>The result is a familiar pattern. Teams accumulate more information than ever before, while the people responsible for reviewing it face increasing pressure to move faster without sacrificing quality, safety, or compliance.</p>
<h2>The Shift Toward Risk-Based Clinical Data Review</h2>
<p>One of the most important changes happening in clinical development today is the move toward more proactive and risk-based approaches.</p>
<p>The goal isn&#8217;t simply reviewing data faster. It&#8217;s bringing quality, oversight, and risk identification earlier into the trial lifecycle. Instead of treating every data point equally, organizations are asking a different question: <strong>Where should we focus first?</strong></p>
<p>As data volumes continue to grow, that question becomes increasingly difficult to answer. Clinical teams can&#8217;t scale review activities in direct proportion to the amount of information flowing through a study. They need better ways to prioritize attention, identify meaningful risk, collaborate, and focus effort where it can have the greatest impact.</p>
<div>
<p>The shift requires a more deliberate approach to review—one that combines human expertise with AI-driven prioritization to identify meaningful signals sooner, rather than treating every data point with the same level of urgency.</p>
</div>
<h2>Why AI-Driven Clinical Review Is Becoming a Competitive Advantage</h2>
<p>When people think about clinical trial performance, they often focus on enrollment, protocol design, or study execution. But clinical data review plays an equally important role.</p>
<p>The faster teams can identify anomalies, review discrepancies, detect potential safety or efficacy signals, and align around a common view of study performance, the faster they can make informed decisions. Instead of spending time searching for information, teams need critical signals surfaced in the moments they matter most. That shift is already underway across the industry.</p>
<blockquote>
<p style="text-align: left">Quality is becoming part of the process from the beginning rather than something that gets evaluated after the fact.&#8221;<br />
<strong>— Prabha Ranganathan</strong>, Associate Vice President, Life Sciences</p>
</blockquote>
<p>Organizations are increasingly moving quality and oversight earlier in the trial lifecycle rather than relying on downstream review and remediation. As a result, clinical data review is becoming less about finding issues after they occur and more about <strong>identifying risks while there is still time to act</strong>.</p>
<h2>Better Decisions Require More Than Visibility</h2>
<p>Which discrepancies represent meaningful risk? What signals may indicate a developing safety concern? Which issues can wait, and which require action right now?</p>
<p>These are the questions that can&#8217;t be answered by another dashboard alone. They require a trusted view of data, clear prioritization, and the ability to connect signals to action while there is still time to influence the outcome.</p>
<p>That&#8217;s why clinical data review is evolving from a process focused on finding issues to one focused on identifying risk sooner.</p>
<p style="text-align: left">Perficient&#8217;s <strong>Clinical Data Repository and Review</strong> solution was designed to support that shift. By combining a unified clinical data foundation with agentic AI capabilities, it helps organizations move beyond data aggregation and turn growing volumes of clinical information into faster, more informed decisions.</p>
<p>As data volumes continue to grow, competitive advantage increasingly comes from finding critical signals sooner—not reviewing more data.</p>
<h2>The Next Challenge Isn&#8217;t More Data</h2>
<p>The life sciences industry has spent years solving the problem of data collection. The next challenge is helping clinical teams keep up with what that data is trying to tell them.</p>
<p>Organizations that gain an advantage won&#8217;t necessarily be the ones generating more information. They&#8217;ll be the ones that help their experts find the right signals faster, make better decisions sooner, and act before risks impact study outcomes.</p>
<p><em>Interested in seeing what that could look like in practice? Reach out to <a href="https://www.perficient.com/contact-us">schedule a demo</a> with <a href="https://www.perficient.com/industries/healthcare-life-sciences">Perficient&#8217;s Healthcare &amp; Life Sciences team</a> to explore how AI-driven clinical review can help your teams focus less on administrative work and more on the decisions that move studies forward.</em></p>
<p>The post <a href="https://blogs.perficient.com/faster-decisions-start-with-ai-driven-clinical-review/">Faster Decisions Start With AI-Driven Clinical Review</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/AI-in-Clinical-Data-Review.png"/>
<post-id xmlns="com-wordpress:feed-additions:1">392005</post-id>	</item>
		<item>
		<title>Why More Data Won’t Fix Your Star Ratings</title>
		<link>https://blogs.perficient.com/why-more-data-wont-fix-your-star-ratings/</link>
		
		<dc:creator><![CDATA[Perficient Expert]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 22:20:59 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<category><![CDATA[#AIinHealthcare]]></category>
		<category><![CDATA[#StarRatings]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391944</guid>

					<description><![CDATA[<p>By Priyal Patel, Asssociate Vice President, Healthcare Strategy &#38; Solutions Health plans are losing Star ratings because insights arrive too late to change outcomes. AI&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/why-more-data-wont-fix-your-star-ratings/">Why More Data Won&#8217;t Fix Your Star Ratings</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>By Priyal Patel, Asssociate Vice President, Healthcare Strategy &amp; Solutions</em></p>
<p>Health plans are losing Star ratings because insights arrive too late to change outcomes. AI closes that gap by getting the right insight to the right person while there is still time to act.</p>
<p>At this year&#8217;s Databricks Data + AI Summit (DAIS), health plan leaders consistently pointed to the <a href="https://blogs.perficient.com/why-ai-stalls-for-health-plans-turning-data-into-action/">same challenge</a>: improving outcomes in an increasingly complex data environment. I spoke with Matthew Giglia, Healthcare and Life Sciences Forward Deployed Engineer at Databricks, about how AI is helping healthcare organizations get more value from their data.</p>
<h2><strong>More Data Isn’t the Missing Piece</strong></h2>
<p>Health plans no longer have a data problem. Most already have access to claims and clinical data, social determinants, member engagement history, quality measures, and risk scores.</p>
<p>But more data has not automatically translated into better Star ratings, faster interventions, or clearer insight into what is working.</p>
<p>That signals an important shift: <strong>the bottleneck is no longer data</strong>.</p>
<h2><strong>The Gap Between Insight and Action </strong></h2>
<p>Data was never the real constraint. Decision latency is. An insight sitting in a dashboard doesn’t close a care gap. A risk score doesn’t improve a measure on its own. A report doesn’t change a member outcome unless it reaches the workflow where decisions are made — while there is still time to act.</p>
<p>In many plans, the distance between knowing and doing is still measured in weeks. By then, the opportunity to intervene has often passed.</p>
<p>The problem is not the model or the report. It&#8217;s how long it takes to respond once an opportunity is identified. That&#8217;s why a health plan can have sophisticated analytics and still struggle to move its Star ratings.</p>
<h2><strong>AI Should Not Mean More Noise </strong></h2>
<p>The organizations getting real value from AI aren&#8217;t using it to gather more information. They&#8217;re using it to shorten the distance between insight and intervention.</p>
<p>In practice, AI helps health plans:</p>
<ul>
<li>Prioritize what matters instead of surfacing every signal with the same urgency</li>
<li>Surface risk earlier so care managers and quality teams can intervene before an outcome is locked in</li>
<li>Reduce the noise that buries care managers in alerts they can&#8217;t work through</li>
</ul>
<p>While the challenge shows up differently for health plans and providers, Giglia sees the same shift from the technology side:</p>
<blockquote><p><strong><em>Health systems used to treat yesterday&#8217;s data as good enough. Now, with AI in the mix, they need that data connected across every domain it touches: governed, tagged, and traceable back to its source, but usable the moment it&#8217;s needed.” </em></strong><em>— </em><strong><em>Matthew Giglia, Databricks</em></strong></p></blockquote>
<p>The technology to do this exists. The harder work is making it practical inside the workflows care managers already use every day.</p>
<h2><strong>Stars Performance Is a Decision Problem</strong></h2>
<p>Stars ratings are often treated like a measurement problem — they aren’t. The measures matter, of course. So do dashboards, scorecards, and reporting cycles. But performance changes when teams make better decisions sooner.</p>
<p>That means helping teams answer the questions that shape daily work:</p>
<ul>
<li>Which members should we prioritize this week?</li>
<li>Which interventions are most likely to improve a specific measure?</li>
<li>Where is staff effort going without measurable impact?</li>
<li>What actions were taken, and what changed as a result?</li>
</ul>
<p>Whether the measure involves medication adherence, preventive screenings, or member experience, the challenge is often the same: identifying the right intervention early enough to influence the outcome.</p>
<p>These decisions cannot be answered by visibility alone. They require trusted data, clear prioritization logic, workflow integration, and feedback loops that show whether an action worked.</p>
<p>This is where Stars intelligence needs to show up: in outreach planning, care management queues, quality interventions, and resource allocation. Not after the fact and not buried in another report. It needs to be available in the flow of work while the decision still matters.</p>
<h2><strong>How We Partner with Databricks to Close the Gap</strong></h2>
<p>Perficient and Databricks partner together to help health plans close the distance between data and action.</p>
<p>Databricks provides a governed foundation that brings claims, clinical, and social determinants of health data into a trusted environment for analytics and AI. Perficient helps health plans put that foundation to work. We define the governance, prioritization logic, and adoption strategy needed to move AI from concept to operational impact.</p>
<p>The goal is not another proof of concept. It is to help care managers, quality leaders, and operations teams make faster, better-informed decisions in the workflows that drive Star performance.</p>
<p>Our <a href="https://www.perficient.com/partners/databricks"><strong>Databricks Brickbuilder Specialization for Healthcare &amp; Life Sciences</strong></a> reflects that combination. It brings together technical depth on a governed platform with healthcare expertise that translates AI into measurable outcomes.</p>
<blockquote><p><strong><em>That&#8217;s exactly the kind of work we want partners to lead. We can provide the platform and accelerators, but healthcare expertise is critical to making the solutions real.” </em></strong><em>—</em> <strong><em>Matthew Giglia, Databricks</em></strong></p></blockquote>
<h2><strong>The Plans That Win Won&#8217;t Be the Ones with the Most Data</strong></h2>
<p>Health plans need to prioritize getting trusted information to the people who know what to do with it — while there is still time to change the outcome. That is the practical promise of AI in Stars performance.</p>
<p>Data, models, and platforms all matter. But they are infrastructure. The real advantage is the ability to decide and act faster than the plan next to you.</p>
<p>That&#8217;s what will move a Star rating next cycle: not another layer of data, but whether the member who needed the call got it in time.</p>
<p>Curious what else came up in health plan conversations at DAIS this year? See <a href="https://blogs.perficient.com/why-ai-stalls-for-health-plans-turning-data-into-action/"><strong>Why AI Stalls for Health Plans: Turning Data Into Action</strong></a> to see how this same issue is playing out across the industry.</p>
<p><a href="https://www.perficient.com/industries/healthcare-life-sciences"><strong><em>Connect with our Healthcare &amp; Life Sciences team</em></strong></a><em> to see what closing the distance between data and action could look like for your plan.</em></p>
<p>The post <a href="https://blogs.perficient.com/why-more-data-wont-fix-your-star-ratings/">Why More Data Won&#8217;t Fix Your Star Ratings</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2257040260-1024x569.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">391944</post-id>	</item>
		<item>
		<title>AI Can Generate Your Designs Faster—But It Can’t Tell You Which Questions to Skip</title>
		<link>https://blogs.perficient.com/ai-can-generate-your-designs-faster-but-it-cant-tell-you-which-questions-to-skip/</link>
		
		<dc:creator><![CDATA[Sean Romer]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 20:44:25 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391938</guid>

					<description><![CDATA[<p>Artificial intelligence has changed the economics of UX design.  With tools like Figma Make, Copilot, and increasingly capable design assistants, teams can generate layouts, components,&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/ai-can-generate-your-designs-faster-but-it-cant-tell-you-which-questions-to-skip/">AI Can Generate Your Designs Faster—But It Can&#8217;t Tell You Which Questions to Skip</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span data-contrast="auto">Artificial intelligence has changed the economics of UX design.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">With tools like Figma Make, Copilot, and increasingly capable design assistants, teams can generate layouts, components, flows, and interactive prototypes in a fraction of the time it once took. Work that previously required days can now be accomplished in hours—or even minutes.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">As a result, a question is becoming increasingly common:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><i><span data-contrast="auto">If AI can generate high-fidelity designs almost instantly, why bother with low-fidelity wireframes at all?</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">It&#8217;s a reasonable question. It&#8217;s also the wrong one.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">The assumption behind that question is that UX activities are simply increasingly polished versions of the same thing—that discovery becomes wireframes, wireframes become mockups, mockups become prototypes, and prototypes become products.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">If that were true, skipping straight to polished designs would be an obvious efficiency. But that isn&#8217;t how UX works.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span data-contrast="none">UX Is Not a Screen Production Process</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">One of the most persistent misconceptions about UX is that its primary purpose is producing screens.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">It isn&#8217;t. The purpose of UX is reducing uncertainty.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Every activity in the UX process exists because there is a specific question the team needs answered before investing additional time, money, and effort. As those questions are answered, uncertainty decreases and confidence increases.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Viewed through that lens, the purpose of each activity becomes much clearer.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<table data-tablestyle="MsoTableGrid" data-tablelook="1184">
<tbody>
<tr>
<td data-celllook="65536"><b><span data-contrast="none">Activity</span></b><span data-ccp-props="{}"> </span></td>
<td data-celllook="65536"><b><span data-contrast="none">Primary Question</span></b><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="0"><span data-contrast="auto">Discovery research</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="0"><span data-contrast="auto">Are we solving the right problem?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="65536"><span data-contrast="auto">Competitive analysis</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="65536"><span data-contrast="auto">What expectations already exist?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="0"><span data-contrast="auto">Heuristic evaluation</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="0"><span data-contrast="auto">What usability issues already exist?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="65536"><span data-contrast="auto">Sketching</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="65536"><span data-contrast="auto">What possible approaches should we consider?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="0"><span data-contrast="auto">Low-fidelity wireframes</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="0"><span data-contrast="auto">Is the information architecture and workflow correct?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="65536"><span data-contrast="auto">High-fidelity designs</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="65536"><span data-contrast="auto">Is the visual communication and interaction clear?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="0"><span data-contrast="auto">Interactive prototypes</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="0"><span data-contrast="auto">Does the experience behave as intended?</span><span data-ccp-props="{}"> </span></td>
</tr>
<tr>
<td data-celllook="65536"><span data-contrast="auto">Usability testing</span><span data-ccp-props="{}"> </span></td>
<td data-celllook="65536"><span data-contrast="auto">Can real users successfully accomplish their goals?</span><span data-ccp-props="{}"> </span></td>
</tr>
</tbody>
</table>
<p><span data-contrast="auto">These are not interchangeable deliverables. They reduce different types of risk. A team that skips an activity is not simply skipping work. It&#8217;s choosing not to answer a particular question.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Sometimes that&#8217;s fine. Sometimes it&#8217;s expensive.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span class="TextRun SCXW39763647 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW39763647 BCX0" data-ccp-parastyle="heading 2">Why Low-Fidelity Wireframes Still Matter</span></span><span class="EOP Selected SCXW39763647 BCX0" data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">Consider the debate around skipping low-fidelity wireframes.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">There are certainly situations where moving directly to high-fidelity designs makes sense. If a product already has a mature design system, well-defined requirements, established user workflows, and a library of proven components, much of the structural uncertainty has already been resolved. In those situations, jumping directly into polished designs can be entirely appropriate.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Those situations exist. They&#8217;re just not the norm.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Most projects begin with incomplete requirements, evolving stakeholder expectations, competing priorities, and unanswered questions about user behavior. In those environments, low-fidelity wireframes provide value for a reason that has nothing to do with artistic skill or speed.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">They make change inexpensive.</span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Moving a box on a wireframe takes seconds. Changing a workflow takes minutes. Reworking a polished interface with dozens of components, interaction states, accessibility requirements, and responsive behaviors can take days.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">More importantly, low-fidelity artifacts change the conversation. When stakeholders see sketches and wireframes, they tend to discuss structure, content, priorities, and workflow. When stakeholders see polished interfaces, they often discuss colors, typography, spacing, and visual details. The more finished something looks, the less willing people become to question whether the underlying solution is correct.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span class="TextRun SCXW211102545 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW211102545 BCX0">Wireframes help teams evaluate the foundation before decorating the house.</span></span><span class="EOP Selected SCXW211102545 BCX0" data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span data-contrast="none">AI Changes the Speed—Not the Purpose</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">This distinction is at the heart of AI&#8217;s impact on UX.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">AI can generate ten dashboard concepts in minutes. It can create navigation models, interface variations, onboarding flows, prototypes, and even production-ready code with remarkable speed.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">What it cannot determine is whether users need a dashboard in the first place.</span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Before any design should be evaluated, teams still need answers to questions such as:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<ul>
<li><span data-contrast="auto">Are we solving the right problem?</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">What is creating friction today?</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">What do users actually need?</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Which assumptions have been validated?</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">What outcome are we optimizing for?</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
</ul>
<p><span data-contrast="auto">Those aren&#8217;t design questions. They&#8217;re uncertainty questions. And uncertainty is what UX exists to reduce.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">AI is transforming how quickly teams create artifacts. It can generate concepts, suggest layouts, summarize research, automate documentation, produce code, and eliminate countless hours of repetitive work. What it has not changed is the purpose of the UX process.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">The goal was never simply to create screens. The goal was to learn enough about users, problems, and business needs to make informed decisions. AI accelerates execution. It does not eliminate uncertainty.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span data-contrast="none">The Two Jobs of UX</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">One mental model helps explain where AI creates value—and where it doesn&#8217;t. Every UX project contains two fundamentally different jobs.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">Job #1: Creating Artifacts</span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<ul>
<li><span data-contrast="auto">Sketches</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Wireframes</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Mockups</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Prototypes</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Specifications</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
</ul>
<p><b><span data-contrast="auto">Job #2: Reducing Uncertainty</span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<ul>
<li><span data-contrast="auto">Understanding users</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Identifying problems</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Aligning stakeholders</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Evaluating tradeoffs</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Validating assumptions</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
<li><span data-contrast="auto">Testing solutions</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></li>
</ul>
<p><span data-contrast="auto">AI dramatically accelerates the first job. The second job remains where UX creates most of its strategic value. In fact, the faster artifact creation becomes, the more important the second job becomes. Producing the wrong thing quickly is still producing the wrong thing.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span data-contrast="none">A More Useful Question</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">The most valuable question organizations can ask is not:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><i><span data-contrast="auto">Can we skip wireframes now that we have AI?</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">Instead, ask:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">What uncertainty was this activity intended to reduce, and has that uncertainty already been resolved?</span></b><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">That question applies to wireframes, discovery research, usability testing, competitive analysis, stakeholder workshops, and every other UX activity. If the answer is </span><b><span data-contrast="auto">yes</span></b><span data-contrast="auto">, eliminating or compressing a step may be entirely reasonable. If the answer is </span><b><span data-contrast="auto">no</span></b><span data-contrast="auto">, the uncertainty hasn&#8217;t disappeared. It has simply been deferred to a later—and usually more expensive—point in the project.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<h2><span data-contrast="none">The Real Impact of AI on UX</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></h2>
<p><span data-contrast="auto">AI is reshaping UX processes. Some activities are becoming faster. Some are being combined. Some traditional deliverables are becoming less important than they once were.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">A designer who once sketched on paper may now generate concepts directly in a design tool. A team that previously created dedicated wireframes may move directly into editable prototypes.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">The artifacts may change. The questions do not. And those questions are the reason UX exists. Because the real value of UX has never been creating screens. It has always been reducing uncertainty before uncertainty becomes expensive.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p><span data-contrast="auto">AI helps us produce answers faster. UX helps us make sure we&#8217;re answering the right questions.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}"> </span></p>
<p>The post <a href="https://blogs.perficient.com/ai-can-generate-your-designs-faster-but-it-cant-tell-you-which-questions-to-skip/">AI Can Generate Your Designs Faster—But It Can&#8217;t Tell You Which Questions to Skip</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/iStock-2208156879-1024x531.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">391938</post-id>	</item>
		<item>
		<title>Perficient Earns Databricks Brickbuilder Specialization for Manufacturing, Transportation &amp; Energy</title>
		<link>https://blogs.perficient.com/perficient-earns-databricks-brickbuilder-specialization-for-manufacturing-transportation-energy/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 16:33:03 +0000</pubDate>
				<category><![CDATA[News and Events]]></category>
		<category><![CDATA[homepage-featured]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391929</guid>

					<description><![CDATA[<p>Perficient is proud to announce that we have earned the Databricks Brickbuilder Specialization for Manufacturing, Transportation &#38; Energy, a distinction awarded to select partners that&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/perficient-earns-databricks-brickbuilder-specialization-for-manufacturing-transportation-energy/">Perficient Earns Databricks Brickbuilder Specialization for Manufacturing, Transportation &amp; Energy</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Perficient is proud to announce that we have earned the Databricks Brickbuilder Specialization for Manufacturing, Transportation &amp; Energy, a distinction awarded to select partners that demonstrate deep expertise in leveraging the Databricks Data Intelligence Platform to help organizations tackle complex industry challenges through data, analytics, and AI. Databricks Brickbuilder Specializations recognize partners with proven delivery capabilities, industry-focused solutions, and accelerators that help clients accelerate time to value.</p>
<p>This achievement reflects our continued investment in industry expertise, technical excellence, and innovative solutions that help manufacturers, transportation providers, and energy organizations modernize operations, improve decision-making, and unlock new business value from their data.</p>
<blockquote><p>Our combined expertise in Manufacturing, Transportation &amp; Energy and the Databricks platform enables us to help organizations accelerate digital transformation initiatives, optimize operations, and scale AI-driven innovation. Earning this specialization reinforces our commitment to delivering measurable business outcomes for clients across these critical industries.  – Nick Passero, Databricks Practice Lead, Director Data and Analytics</p></blockquote>
<h2>How We Earned the Specialization</h2>
<div>
<p>Achieving the Databricks Brickbuilder Specialization requires significant investment in technical expertise, customer success, and industry innovation.</p>
<h3><img loading="lazy" decoding="async" data-attachment-id="391930" data-permalink="https://blogs.perficient.com/perficient-earns-databricks-brickbuilder-specialization-for-manufacturing-transportation-energy/81ec43cd-e2e5-497a-a768-82ae39f0bd9b/" data-orig-file="https://blogs.perficient.com/wp-content/uploads/2026/07/81ec43cd-e2e5-497a-a768-82ae39f0bd9b.png" data-orig-size="468,658" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}" data-image-title="81ec43cd E2e5 497a A768 82ae39f0bd9b" data-image-description="" data-image-caption="" data-large-file="https://blogs.perficient.com/wp-content/uploads/2026/07/81ec43cd-e2e5-497a-a768-82ae39f0bd9b.png" class="size-medium wp-image-391930 alignleft" style="font-size: 16px" src="https://blogs.perficient.com/wp-content/uploads/2026/07/81ec43cd-e2e5-497a-a768-82ae39f0bd9b-213x300.png" alt="81ec43cd E2e5 497a A768 82ae39f0bd9b" width="213" height="300" srcset="https://blogs.perficient.com/wp-content/uploads/2026/07/81ec43cd-e2e5-497a-a768-82ae39f0bd9b-213x300.png 213w, https://blogs.perficient.com/wp-content/uploads/2026/07/81ec43cd-e2e5-497a-a768-82ae39f0bd9b.png 468w" sizes="auto, (max-width: 213px) 100vw, 213px" /></h3>
<h3>Deep Technical Expertise</h3>
<p>As part of the specialization requirements, partners must maintain a highly skilled team with advanced Databricks certifications and specialized industry knowledge. Perficient&#8217;s team of data engineers, consultants, architects, and AI specialists brings extensive experience designing and implementing scalable data and AI solutions on the Databricks Data Intelligence Platform.</p>
<p>Our expertise enables clients to address some of the industry&#8217;s most pressing challenges, including siloed data across legacy systems, growing volumes of operational data, and the increasing need for real-time business insights. By leveraging technologies such as Delta Lake, MLflow, Photon, and Databricks SQL, we help organizations build modern data foundations that accelerate innovation and operational efficiency.</p>
</div>
<h3>Proven Industry Impact</h3>
<p>Databricks evaluates partners on their ability to deliver measurable value for organizations across manufacturing, transportation, and energy. Perficient has helped clients improve and improve important business operations. For example, a leading Midwest energy provider had a hard time getting accurate screen-scraping reports for field operations. This caused safety concerns for field teams.</p>
<p><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0">We used Databricks and Microsoft Power BI to centralize and display </span></span><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0">location </span></span><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="true" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0">data</span></span><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0"> to understand if supervisors </span></span><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0">were providing proper oversight of their teams in the field, resulting in <span class="TextRun SCXP148122021 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="true" data-contrast="none"><span class="NormalTextRun SCXP148122021 BCX0">a more consistent </span></span><span class="TextRun SCXP148122021 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="true" data-contrast="none"><span class="NormalTextRun SCXP148122021 BCX0">measurement of team movement to give management better and </span></span><span class="TextRun SCXP148122021 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="true" data-contrast="none"><span class="NormalTextRun SCXP148122021 BCX0">more reliable insight into field operations. </span></span></span></span></p>
<p>When a leading global mobility solutions provider <span class="TextRun SCXP78250846 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP78250846 BCX0">had an abundance of inefficient, outdated, and </span></span><span class="TextRun SCXP78250846 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP78250846 BCX0">individual platforms for its data management, w</span></span><span class="TextRun SCXP112923061 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP112923061 BCX0">e implemented Databricks Delta Tables and Workflows to stream </span></span><span class="TextRun SCXP112923061 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP112923061 BCX0">unorganized customer data into one unified platform. Our solution </span></span><span class="TextRun SCXP112923061 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP112923061 BCX0">increased data accessibility, visibility and accuracy.</span></span></p>
<p><span class="TextRun SCXP132956614 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="false" data-contrast="none"><span class="NormalTextRun SCXP132956614 BCX0"><span class="TextRun SCXP148122021 BCX0" lang="EN-US" xml:lang="EN-US" data-usefontface="true" data-contrast="none"><span class="NormalTextRun SCXP148122021 BCX0">S</span></span></span></span>olutions like these empower organizations to improve product quality, reduce costs, increase asset reliability, and make faster, data-driven decisions across their operations.</p>
<h3>Commitment To Thought Leadership</h3>
<p>Another component of the specialization is a demonstrated commitment to advancing industry knowledge through thought leadership. Databricks requires partners to continually contribute insights that help organizations navigate emerging opportunities in data, analytics, and artificial intelligence.</p>
<div>
<p>Perficient continues to publish research-driven perspectives (<a href="https://blogs.perficient.com/from-data-to-trust-powering-battery-passports-through-databricks-ai/">From Data to Trust: Powering Battery Passports Through Databricks AI</a>) that help manufacturing, transportation &amp; energy leaders understand how modern data platforms and AI technologies can drive innovation, accelerate decision-making, and create sustainable competitive advantage.</p>
<h2>Why This Matters to You</h2>
<div>
<p>Manufacturing, transportation, and energy organizations face increasing pressure to improve efficiency, reduce costs, strengthen resilience, and accelerate innovation in an increasingly data-driven world.</p>
<p>Success depends on the ability to unify data across operations, assets, suppliers, customers, and business systems while establishing the governance and scalability needed to support AI initiatives.</p>
<p>The Databricks Brickbuilder Specialization signals that Perficient possesses both the technical capabilities and industry knowledge required to help organizations successfully execute these initiatives. Whether your goal is to improve supply chain performance, optimize asset operations, modernize data infrastructure, or scale AI across the enterprise, Perficient brings the strategy, implementation expertise, and industry context needed to accelerate outcomes.</p>
<h2>A Thank You to Our Team</h2>
<p>This accomplishment is the result of the dedication, expertise, and passion of Perficient&#8217;s Databricks team. Every certification earned, every client engagement delivered, and every innovative solution developed contributed to this milestone.</p>
<p>We&#8217;re excited to continue helping Manufacturing, Transportation &amp; Energy organizations transform their businesses with data and AI and to further strengthen our strategic partnership with Databricks.</p>
<p>To learn more about Perficient&#8217;s Databricks practice and our industry expertise, visit our <a href="https://www.perficient.com/partners/databricks">Databricks partner page.</a></p>
</div>
</div>
<p>The post <a href="https://blogs.perficient.com/perficient-earns-databricks-brickbuilder-specialization-for-manufacturing-transportation-energy/">Perficient Earns Databricks Brickbuilder Specialization for Manufacturing, Transportation &amp; Energy</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/02/2026_prft_blog_1400x931_Databricks-1024x681.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">391929</post-id>	</item>
		<item>
		<title>Building an AI Agent for Oracle HCM Journeys: What I Learned Along the Way</title>
		<link>https://blogs.perficient.com/building-an-ai-agent-for-oracle-hcm-journeys-what-i-learned-along-the-way/</link>
		
		<dc:creator><![CDATA[Tyler Steininger]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 20:34:52 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391466</guid>

					<description><![CDATA[<p>Some areas in Oracle are configured once and rarely touched again. Journeys are not one of those areas. They may require regular updates and additions as the organization grows,&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/building-an-ai-agent-for-oracle-hcm-journeys-what-i-learned-along-the-way/">Building an AI Agent for Oracle HCM Journeys: What I Learned Along the Way</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span data-contrast="auto">Some areas in Oracle are configured once and rarely touched again. Journeys are not one of those areas. They may require regular updates and additions as the organization grows, and when those needs come up, HR teams can often feel lost on where to start. That is what led me to build an AI agent that guides them through the process simply by using a chat window. My goal for this project was to learn the ins and outs of building an AI agent, and it proved to be a very fun challenge.</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">What I Built</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The agent creates Journeys and Journey Tasks through a conversation. You start by defining the Journey itself, then walk through the tasks that make it up, including task type, performer, initiator, expiration, and due date. If you already have a Journey Template ID, you can also use the agent to modify an existing journey rather than starting from scratch. The goal was to make something approachable for someone who does not live in Oracle every day.</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">What Surprised Me</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The current out-of-the-box options for AI agent creation are more limited than I expected. Most pre-built tools are designed for fetching data, not making changes. If you want the agent to actually do something in your system, you are building custom tools and explicitly defining every field it can access. The bigger the scope, the more complex that gets. Each element added is an opportunity for the agent to break, and I learned that the hard way.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The context awareness was a pleasant surprise. Asking for five onboarding tasks returned results that felt like they came from someone who understands HR. It picked up on implied differences, like new hire versus manager onboarding, without me needing to spell that out. That was genuinely useful.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Consistency was a different story. The agent&#8217;s delivery shifted from session to session. Functionally, it was performing the same tasks, but the way it was asking me questions was always different. That required more tuning than I thought.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The last thing that caught me off guard was how useful AI was in the building process itself, not just the end product. Writing the agent&#8217;s instructions, handling API calls, and making sense of error logs. Things that would have slowed me down significantly before became much more manageable with AI involved.</span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">What This Means for HR Teams</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">This does not replace HR judgment. It removes the part that slows everything else down. A lot of time spent building a journey goes toward figuring out where to start. This skips that part. You describe what you need, get back something usable, and edit from there. </span><span data-ccp-props="{}"> </span></p>
<p><b><span data-contrast="auto">Closing Thought</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Building this opened my eyes to what an AI agent is capable of. It made me wonder how far this could realistically go. Is there a future where entire Oracle modules are configured through a chat window? Maybe. The technology is closer to that than I would have guessed before starting this project. The harder question is where the sweet spot is between AI assisted configuration and professional implementation. Some things benefit from the speed and accessibility AI brings. Others need the judgment and accountability that comes with a real implementation. Finding that line is going to be one of the more interesting conversations in this space over the next few years.</span><span data-ccp-props="{}"> </span></p>
<p>The post <a href="https://blogs.perficient.com/building-an-ai-agent-for-oracle-hcm-journeys-what-i-learned-along-the-way/">Building an AI Agent for Oracle HCM Journeys: What I Learned Along the Way</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/06/iStock-2273062052-1024x683.jpg"/>
<post-id xmlns="com-wordpress:feed-additions:1">391466</post-id>	</item>
		<item>
		<title>From Data to Trust: Powering Battery Passports through Databricks AI</title>
		<link>https://blogs.perficient.com/from-data-to-trust-powering-battery-passports-through-databricks-ai/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 14:19:27 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391905</guid>

					<description><![CDATA[<p>As electric vehicles become a larger part of the automotive landscape, battery transparency is quickly evolving from a differentiator into a business necessity. Consumers want&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/from-data-to-trust-powering-battery-passports-through-databricks-ai/">From Data to Trust: Powering Battery Passports through Databricks AI</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span data-contrast="auto">As electric vehicles become a larger part of the automotive landscape, battery transparency is quickly evolving from a differentiator into a business necessity. Consumers want confidence in the health, performance, and value of their EV batteries, while regulators increasingly require visibility into battery sourcing, lifecycle history, and sustainability reporting. Automotive manufacturers must meet expectations of both stakeholders, while creating new opportunities to strengthen customer relationships.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">This is where Battery Passports come into play.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">At Perficient, we’ve built a Battery Passport offer that enables manufacturers to transform complex battery data into meaningful customer experiences, operational insights, and regulatory compliance capabilities.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The Databricks Data Intelligence Platform is the foundation of the Battery Passport solution we built. Databricks provides the scalable data and AI platform necessary to manage battery information throughout the entire lifecycle.</span><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">Why Battery Passports Matter</span></b><span data-ccp-props="{}"> </span></h2>
<p><span data-contrast="auto">A Battery Passport serves as a digital record of an electric vehicle battery&#8217;s lifecycle, health, origin, and performance. It brings together critical information such as battery state of health, charge history, degradation rates, and more.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">These insights create value across the EV ecosystem:</span><span data-ccp-props="{&quot;335559685&quot;:360}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">Consumers</span></b><span data-contrast="auto"> gain confidence in battery condition and vehicle value.</span><span data-ccp-props="{}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="auto">OEMs</span></b><span data-contrast="auto"> improve transparency, strengthen loyalty, and create opportunities for subscription-based services.</span><span data-ccp-props="{}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="auto">Dealers and insurers</span></b><span data-contrast="auto"> benefit from trusted battery health information.</span><span data-ccp-props="{}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="2" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><b><span data-contrast="auto">Manufacturers</span></b><span data-contrast="auto"> can support emerging regulatory requirements and sustainability initiatives. </span><span data-ccp-props="{}"> </span></li>
</ul>
<h2><b><span data-contrast="auto">The Consumer Demand for Transparency Is Already Here</span></b><span data-ccp-props="{}"> </span></h2>
<p><span data-contrast="auto">Perficient research reveals a significant gap between EV interest and EV adoption. While 46% of consumers would consider purchasing an EV, only 14% currently own one.</span></p>
<p><b><span data-contrast="auto">What&#8217;s driving that hesitation?</span></b><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">The leading concerns revolve around battery information transparency, such as life and charging capacity, charging downtime, and servicing complexity.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Our research also found that approximately 61% of EV owners and EV-curious consumers would be more likely to participate in an ownership experience program if it provided insights into their vehicle&#8217;s value. Similarly, more than 60% of surveyed consumers expressed interest in loyalty experiences that provide visibility into EV value.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">These findings highlight a growing opportunity: consumers want more transparency about battery health and vehicle value. Battery Passports provide the mechanism to deliver it.</span><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">Building the Battery Passport on Databricks</span></b><span data-ccp-props="{}"> </span></h2>
<p><span data-contrast="auto">Databricks provides the centralized foundation necessary to support a modern Battery Passport ecosystem. Powered by Databricks Lakehouse, battery telemetry is streamed via Lakeflow into Delta Lake, governed through Unity Catalog, and enriched with Agent Bricks AI agents for real-time health scoring.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Using our Battery Passport solution built on Databricks, manufacturers can deliver a unified battery data + AI platform that brings together:</span><span data-ccp-props="{}"> </span></p>
<ol>
<li><b><span data-contrast="auto"> Lifecycle Traceability</span></b></li>
</ol>
<p><span data-contrast="auto">Databricks enables organizations to ingest and unify data from manufacturing, assembly, logistics, vehicle operations, and recycling systems. Such lineage creates an end-to-end digital history for every battery, which supports both customer transparency and compliance requirements.</span><span data-ccp-props="{}"> </span></p>
<ol start="2">
<li><b><span data-contrast="auto"> Scalable Data Management</span></b></li>
</ol>
<p><span data-contrast="auto">Battery telemetry generates enormous volumes of data. Databricks enables manufacturers to store, process, and analyze structured and unstructured data at scale, creating a centralized repository for battery lifecycle information. </span><span data-ccp-props="{}"> </span></p>
<ol start="3">
<li><b><span data-contrast="auto">Regulatory Readiness</span></b></li>
</ol>
<p><span data-contrast="auto">Global regulations increasingly require visibility into battery sourcing, sustainability, and lifecycle tracking. Databricks provides the governance, lineage, and reporting capabilities needed to support evolving Battery Passport compliance initiatives. </span><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">Turning Battery Data Into Customer Confidence</span></b><span data-ccp-props="{}"> </span></h2>
<p><span data-contrast="auto">The future of mobility depends on trust. Consumers need confidence that their battery will perform as expected, retain value, and remain transparent throughout its lifecycle.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">A Battery Passport bridges that gap by transforming complex battery data into actionable insights for consumers, manufacturers, dealers, insurers, and regulators.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">With the Databricks Data Intelligence Platform serving as the underlying data + AI platform, manufacturers can move beyond fragmented systems to create a connected Battery Passport ecosystem that delivers traceability, intelligence, and business value at scale.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">As regulations like the EU Battery Passport mandate take effect, OEMs that fail to operationalize battery data will face both compliance risk and competitive disadvantage.</span><span data-ccp-props="{}"> </span></p>
<p>The post <a href="https://blogs.perficient.com/from-data-to-trust-powering-battery-passports-through-databricks-ai/">From Data to Trust: Powering Battery Passports through Databricks AI</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/06/Screenshot-2026-06-18-145103.png"/>
<post-id xmlns="com-wordpress:feed-additions:1">391905</post-id>	</item>
		<item>
		<title>5 Takeaways from DAIS 2026 You Need To Know</title>
		<link>https://blogs.perficient.com/5-takeaways-from-dais-2026-you-need-to-know/</link>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Mon, 06 Jul 2026 16:19:59 +0000</pubDate>
				<category><![CDATA[Technical Expertise]]></category>
		<guid isPermaLink="false">https://blogs.perficient.com/?p=391896</guid>

					<description><![CDATA[<p>by Nick Passero, Director AI Data &#38; Analytics, Databricks Practice Lead Each year, the Databricks Data + AI Summit sets the agenda for enterprise data&#8230;</p>
<p>The post <a href="https://blogs.perficient.com/5-takeaways-from-dais-2026-you-need-to-know/">5 Takeaways from DAIS 2026 You Need To Know</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>by Nick Passero, Director AI Data &amp; Analytics, Databricks Practice Lead</em></p>
<p>Each year, the Databricks Data + AI Summit sets the agenda for enterprise data and AI. With more than 30,000 attendees at Moscone Center, this year felt different. Not because of any single announcement, but because of what the announcements collectively signal: we&#8217;ve crossed a threshold. The conversation is no longer about whether AI is capable. It&#8217;s about whether your organization is ready.</p>
<p>Here are my five most important takeaways from DAIS 2026:</p>
<h2>1. AGI Is Already Here, But Your Organization Isn&#8217;t Ready for It</h2>
<p>The most provocative moment of the entire summit came in the opening minutes of CEO Ali Ghodsi&#8217;s keynote. His message was unambiguous: AGI is here, and the problem is no longer about intelligence.</p>
<p>This wasn&#8217;t entirely surprising. Those of us who follow Ghodsi&#8217;s interviews and public commentary have heard him building toward this framing for a while. But hearing it as the opening thesis of a 30,000-person summit, backed by a full product portfolio organized around it, made it land differently.</p>
<p>Databricks organized its entire 2026 product portfolio around four enterprise pain points: context, control, cost, and choice. If AI is already smart enough, the bottleneck is whether your organization can give AI systems the grounding they need to act appropriately on your behalf, within your business, using your data, and according to your rules.</p>
<p>We&#8217;ve watched this shift happen live in client engagements. The question stopped being, &#8220;Can we build this?&#8221; It&#8217;s now entirely about trust, grounding, and governance. That reframing should inform every AI investment decision you&#8217;re making today.</p>
<h2>2. Genie Ontology: The Most Important Foundation Play at DAIS</h2>
<p>Genie Ontology is a continuous-learning semantic layer that automatically extracts business meaning from your data estate: tables, queries, dashboards, and pipelines. Rather than forcing analysts and engineers to manually annotate data assets with business definitions, Genie Ontology learns the language of your organization, including your metrics, processes, KPIs, and organizational hierarchy, and makes that knowledge available to every AI agent operating in your environment.</p>
<p>The capability is genuinely compelling. A general-purpose model doesn&#8217;t know what &#8220;net revenue&#8221; means in your organization, which pipeline feeds your forecasting dashboard, or what your data governance team considers a reliable source. Genie Ontology builds that knowledge automatically, and that changes what AI agents can do inside your environment.</p>
<p>But it raises a question worth sitting with. The traditional practice of building an ontology is a human activity. It requires deliberate decisions about what concepts matter, how they relate, and what to leave out. An automated system that learns from how your organization already queries its data is powerful, but it is only as good as the patterns it learns from. If your data estate has inconsistencies or inherited assumptions baked into years of query history, those will come along for the ride.</p>
<p>We lean toward believing the strongest outcomes will come from pairing Genie Ontology&#8217;s automated extraction with targeted human curation of the concepts that matter most. That said, we are actively exploring how far the automation can take you before curation becomes necessary, and for which use cases the automated layer may be sufficient on its own. This is one of the more interesting questions coming out of DAIS 2026.</p>
<h2>3. Genie One Signals the Arrival of the True AI Coworker, Not Just a Chatbot</h2>
<p>Building directly on the context foundation of Genie Ontology, Databricks launched Genie One, and it represents a meaningful evolution beyond what most enterprises have deployed as AI assistants to date.</p>
<p>Genie One is available across web, iOS, Android, Slack, and Microsoft Teams. It goes well beyond question-and-answer interactions: it creates documents, runs scheduled tasks, and takes external actions via Model Context Protocol tools. Think of a business analyst asking a question in Slack, getting a governed answer drawn from the lakehouse, and scheduling a follow-up report, all without opening a BI tool. Alongside Genie One, Databricks also launched Genie Agents, the evolution of Genie Spaces, which can now be shared externally through a new OpenSharing capability.</p>
<p>The broader point for enterprise leaders is this: the distinction between an AI tool and an AI coworker is moving from marketing language to a real architectural distinction. Genie One is not a chatbot bolted onto a data platform. It is a context-aware agent that understands your business data, takes action on your behalf, and operates across the communication channels your employees already use every day.</p>
<h2>4. Unity AI Gateway Is the Answer to Agent Sprawl</h2>
<p>One of the most underappreciated risks of the agentic AI era is what analysts are already calling agent sprawl: the uncontrolled proliferation of AI models, agents, tools, and workflows independently deployed across an organization without centralized oversight.</p>
<p>Most organizations we are talking to right now have multiple AI initiatives running in parallel with no shared cost visibility, no unified audit trail, and no way to enforce policy across them. Each team did the right thing locally. The problem is organizational, not technical. Nobody planned for the inventory.</p>
<p>Databricks&#8217; answer is Unity AI Gateway, which extends the proven Unity Catalog governance model into the runtime layer of AI workloads. It provides centralized controls for governance, observability, budgeting, model routing, and security across an organization&#8217;s entire AI estate, including tools, MCP services, skills, traces, cost, and runtime behavior.</p>
<p>For technology and risk leaders, the message is clear: start building your AI governance architecture now, before the agent inventory becomes too large to manage.</p>
<h2>5. The Lakehouse Gets Real-Time: LTAP, Lakehouse//RT, and Agentic Data Engineering</h2>
<p>Every enterprise running real-time use cases today is paying a tax: a separate serving layer, a synchronization pipeline, a second governance model. The promise of collapsing all of that into a single platform is not a new idea. Many technologies have tried it. Most have not gotten it right.</p>
<p>Databricks is taking a serious run at it. The centerpiece announcement was LTAP (Lake Transactional/Analytical Processing), a new architecture that unifies OLTP and OLAP on a single copy of data using open formats. The practical foundation is Lakebase, Databricks&#8217; new serverless Postgres offering, which puts operational data inside the lakehouse boundary rather than alongside it. Paired with this is Lakehouse//RT, powered by Reyden, a ground-up compute engine rewrite built for the concurrency and latency demands of real-time analytics.</p>
<p>We have been testing Reyden already. In our own work with a healthcare client running FHIR data at scale, we saw sub-100 millisecond patient-specific lookups across billions of records on a small cluster, without a separate serving layer or a second copy of PHI. The results were compelling enough that we wrote about it in depth. If you want the technical detail, you can read more <a href="https://blogs.perficient.com/exploring-lakehouse-rt-and-reyden-can-databricks-handle-fhir-data-at-scale/">here</a>.</p>
<p>Of all the announcements at DAIS 2026, this is consistently the one our clients are most excited about. The question is not whether the architecture is interesting. It is whether Databricks can deliver on it at enterprise scale across diverse workload types. We are in the field testing it, and we are excited to see where it goes.</p>
<h2>What This Means for Your Organization</h2>
<p>DAIS 2026 painted a coherent and compelling picture of where enterprise data and AI are heading. Databricks is positioning itself as the open foundation for the agentic enterprise: context through Genie Ontology, governance through Unity AI Gateway, real-time infrastructure through Lakehouse//RT and Reyden, and an AI coworker layer through Genie One.</p>
<p>At Perficient, <a href="https://www.perficient.com/Partners/Databricks">our Databricks practice</a> is already working with clients to translate these announcements into actionable roadmaps. Whether you are in the early stages of evaluating the Databricks platform or are a mature Databricks customer looking to accelerate your agentic AI capabilities, the conversation to have right now is where these investments fit within your data and AI strategy.</p>
<p>The post <a href="https://blogs.perficient.com/5-takeaways-from-dais-2026-you-need-to-know/">5 Takeaways from DAIS 2026 You Need To Know</a> appeared first on <a href="https://blogs.perficient.com">Perficient Blogs</a>.</p>
]]></content:encoded>
					
		
		
			<media:content medium="image" url="https://blogs.perficient.com/wp-content/uploads/2026/07/Screenshot-2026-07-06-111735.png"/>
<post-id xmlns="com-wordpress:feed-additions:1">391896</post-id>	</item>
	</channel>
</rss><!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin


Served from: blogs.perficient.com @ 2026-07-23 10:48:30 by W3 Total Cache
-->