Laravel Toaster Magic is a powerful, lightweight, and flexible toast notification library designed for modern web applications. The post Laravel…

I’m working on performance testing a multi-tenant application using Apache JMeter. I want to simulate load coming from three different clients, where each client’s data is stored in a separate CSV file. The load should be distributed like this:

Client 1: 60%
Client 2: 30%
Client 3: 10%

All CSV files have the same structure (columns), but contain different data per client.
My Goal:
I want each thread to randomly and proportionally pick data from the appropriate CSV file based on the percentages above and use it in the HTTP requests without data overlap or inconsistency.
What I Tried:
Approach 1: Dynamically set file path using a variable
My Jmeter Test Plan structure is,
Test Plan
|– User Defined Variables
|– CSV Data Set Config
|– Stepping Thread Group
|– |– JSR223 PreProcessor
|– |– HTTP Request Sampler 1
|– |– HTTP Request Sampler 2
|– |– HTTP Request Sampler n
|– View Result Tree
|– Summary Report

In the Test Plan, I have a variable path defined in User Defined Variables as:
path = D:/jmeter/project

I then set the Filename in CSV Data Set Config to ${csvFile}.
Inside a JSR223 PreProcessor, I tried setting the csvFile variable like this:
def randomValue = Math.random()
if (randomValue < 0.6) {
vars.put(‘csvFile’, “${path}/file1.csv”)
} else if (randomValue < 0.9) {
vars.put(‘csvFile’, “${path}/file2.csv”)
} else {
vars.put(‘csvFile’, “${path}/file3.csv”)
}

The issue is, even though csvFile gets set correctly in the JSR223 PreProcessor, the CSV Data Set Config doesn’t pick up the value dynamically.
Approach 2: Dynamically set file path using a variable and place the CSV Data Set Config after the JSR223 PreProcessor
My Jmeter Test Plan structure is,
Test Plan
|– User Defined Variables
|– Stepping Thread Group
|– |– JSR223 PreProcessor
|– |– CSV Data Set Config
|– |– HTTP Request Sampler 1
|– |– HTTP Request Sampler 2
|– |– HTTP Request Sampler n
|– View Result Tree
|– Summary Report

Still the result is the same as in Approach 1.
I suspect it’s due to the execution order, as JMeter processes the CSV Data Set Config before the PreProcessor runs.
My Question:
What is the correct way in JMeter to:

Dynamically and proportionally distribute threads across multiple CSV files
Ensure clean separation of data per thread (no variable conflicts)
Avoid data overlap or race conditions between threads

Note: I cannot share actual screenshots or project files due to employer restrictions, but I’m looking for a JMeter-safe and scalable way to simulate this kind of weighted load across clients using separate CSV files or anything other suggestion for tackling this issue.
Any ideas or recommendations for managing this effectively?

 Introduction: Why Practice on Demo Websites?In today’s fast-paced software development world, automation testing skills are in high demand. Whether you’re preparing for a QA interview, upskilling your team, or building a test automation framework from scratch, having access to reliable, free demo websites is invaluable.This comprehensive guide covers 50+ demo websites categorized by:Skill level (Beginner → Advanced)Testing type (Web, Mobile, API)Technology stack (React, Angular, JQuery)Real-world scenarios (E-commerce, Banking, SaaS)We’ve also included:✔ Pro tips for maximizing each demo site✔ Common interview questions per website✔ Recommended test scenarios✔ Troubleshooting adviceSection 1: Beginner-Friendly Websites (0-6 Months Experience)1. SauceDemo (https://www.saucedemo.com/)Best for: Login flows, inventory managementKey Elements:Standard/login error casesProduct sorting functionalityCart managementSample Test Case: python# Verify locked_out_user cannot login
driver.find_element(By.ID, “user-name”).send_keys(“locked_out_user”)
driver.find_element(By.ID, “password”).send_keys(“secret_sauce”)
driver.find_element(By.ID, “login-button”).click()
assert “Epic sadface” in driver.page_sourcePro Tip: Use this site to practice Data-Driven Testing by creating CSV files with different user credentials.2. The Internet (https://the-internet.herokuapp.com/)Modules Worth Testing:File Upload (Great for send_keys() practice)Dynamic Loading (Perfect for explicit waits)JavaScript Alerts (Alert handling techniques)Interview Question:”How would you handle a dynamically generated element that takes 10+ seconds to load?”Answer Framework: pythonfrom selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.ID, “slow-loader”))
)Section 2: Intermediate Level (6-18 Months Experience)3. Automation Exercise (https://automationexercise.com/)Full E-commerce Suite Including:User registration with email verificationProduct search and filteringCheckout process with payment gatewayFramework Practice:Implement Page Object Model (POM)Create utility classes for:Screenshot on failureRandom test data generationEmail validationMobile Testing Bonus:The site is responsive – perfect for practicing Appium tests on browser stacks.4. ParaBank (https://parabank.parasoft.com/)Banking-Specific Scenarios:Fund transfers between accountsBill pay schedulingTransaction history validationSecurity Testing Angle:Try negative testing with:SQL injection in login fieldsXSS attempts in contact formsBroken authentication testingSection 3: Advanced Challenges (2+ Years Experience)5. React Shopping Cart (https://react-shopping-cart-67954.firebaseapp.com/)SPA-Specific Challenges:Handling virtualized product listsState management verificationNetwork throttling testsPerformance Testing: javascript// Puppeteer script to measure load times
const perf = await page.metrics();
console.log(`JSHeapUsedSize: ${perf.JSHeapUsedSize}`);6. JQuery UI (https://jqueryui.com/)Complex Interaction Tests:Drag and drop with offset calculationsSlider manipulationDate picker with dynamic calendarsVisual Testing Tip:Use Applitools/Percy to verify positioning after interactions.Section 4: Specialized Testing EnvironmentsAPI + UI IntegrationRecommended Flow:Create user via ReqRes APIVerify in UI using same credentialsPerform actions through both interfacesTools Combination:Postman/Newman for API testsSelenium for UI validationJenkins/GitHub Actions for CI/CDSection 5: Mobile-Specific Demos7. Mobile AngularJS (http://mobileangularui.com/demo/)Hybrid App Patterns:Slide-out menusTouch gesturesOffline mode simulationConclusion: Building Your Practice Plan30-Day Challenge: markdownWeek 1: Master all beginner sitesWeek 2: Build POM framework on intermediate sites Week 3: Create CI pipeline with advanced sitesWeek 4: Combine API+UI+Mobile testing