Load tests development for website (JMeter)

Our company is engaged in the development, support and maintenance of sites of any complexity. From simple one-page sites to large-scale cluster systems built on micro services. Experience of developers is confirmed by certificates from vendors.
Development and maintenance of all types of websites:
Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    815

Load Testing Development for Websites (JMeter)

Apache JMeter is a mature load testing tool on Java. Supports HTTP, HTTPS, WebSocket, JDBC, LDAP, FTP. Rich GUI for building test plans, plugins for extending functionality, widely used in enterprise.

Test Plan Architecture

Test Plan
├── Thread Group (user group)
│   ├── HTTP Request Defaults (common settings)
│   ├── HTTP Cookie Manager
│   ├── HTTP Header Manager
│   ├── Login Sampler (POST /api/auth/login)
│   ├── Think Time (wait timer)
│   ├── Products Sampler (GET /api/products)
│   └── Assertions
├── Results Tree Listener
├── Aggregate Report Listener
└── Response Time Graph

Creating Test Plan via JMX (XML)

<!-- test-plan.jmx -->
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0">
  <hashTree>
    <TestPlan testname="E-commerce Load Test">
      <hashTree>
        <ThreadGroup testname="User Flow" enabled="true">
          <stringProp name="ThreadGroup.num_threads">100</stringProp>
          <stringProp name="ThreadGroup.ramp_time">60</stringProp>
          <stringProp name="ThreadGroup.duration">300</stringProp>
          <boolProp name="ThreadGroup.scheduler">true</boolProp>
          <hashTree>

            <HTTPSamplerProxy testname="Login">
              <stringProp name="HTTPSampler.domain">${BASE_URL}</stringProp>
              <stringProp name="HTTPSampler.path">/api/auth/login</stringProp>
              <stringProp name="HTTPSampler.method">POST</stringProp>
              <!-- ... -->
            </HTTPSamplerProxy>

          </hashTree>
        </ThreadGroup>
      </hashTree>
    </TestPlan>
  </hashTree>
</jmeterTestPlan>

Running via Command Line (Without GUI)

# Basic run
jmeter -n -t test-plan.jmx \
       -l results.jtl \
       -e -o html-report/ \
       -JBASE_URL=https://staging.example.com \
       -JN_USERS=100 \
       -JRAMP_UP=60

# With plugins from command line
jmeter -n -t test-plan.jmx \
       -Jjmeterengine.force.system.exit=true \
       -l results.jtl \
       -JBASE_URL=https://staging.example.com

Variables and Parameterization

# users.csv — test user data
email,password
[email protected],pass123
[email protected],pass456
[email protected],pass789

In JMeter: Add → Config Element → CSV Data Set Config:

  • Filename: ${__P(data_dir)}/users.csv
  • Variable Names: email,password
  • Sharing Mode: All threads

Assertions

Response Assertion:
- Response Code: equals 200
- Response Body: contains "access_token"

Duration Assertion:
- Duration in milliseconds: <= 1000

JSON Path Assertion:
- JSON Path: $.data[0].id
- Expected Value: (not empty)

Beanshell/Groovy Post-processor

// Groovy JSR223 PostProcessor — extract JWT from response
import groovy.json.JsonSlurper

def response = prev.getResponseDataAsString()
def json = new JsonSlurper().parseText(response)
vars.put("auth_token", json.access_token)
vars.put("user_id", json.user.id.toString())

Distributed Testing

# Master-slave configuration
# remote_hosts in jmeter.properties
remote_hosts=192.168.1.11,192.168.1.12,192.168.1.13

# Run on all nodes
jmeter -n -t test-plan.jmx -r -l results.jtl

Grafana Integration via InfluxDB

# jmeter.properties
backend_listener_client=kg.apc.jmeter.reporters.influxdb2.InfluxDbBackendListenerClient

# Backend Listener Config
influxDBHost: localhost
influxDBPort: 8086
influxDBToken: your-token
influxDBOrganization: myorg
influxDBBucket: jmeter

Implementation Timeline

Developing a JMeter test plan with 5–7 load scenarios: 3–6 days.