Summary Report in JMeter

Summary Report in JMeter

After thousands of requests have flown back and forth, someone asks one simple question: how did it go? The Summary Report is the one-page answer, a compact table that turns a mountain of results into numbers you can read in a minute.

Picture a teacher who has just marked an exam for five hundred students. She does not hand the principal five hundred answer sheets and say, “Here, have a look.” She writes a short summary: how many students sat the exam, the average mark, the lowest and highest marks, how many failed, and how spread out the results were. In one glance the principal understands how the class did.

A JMeter load test creates the same problem. A test with a few hundred virtual users can easily produce millions of individual results. Nobody can read millions of lines. You need a summary, and in Apache JMeter one of the oldest and most loved summaries is the Summary Report.

This guide explains it from the very beginning. You will learn what the report is, where it lives, how it collects numbers while a test is running, what every single column means, how to read the numbers without being fooled by them, how it differs from its bigger sibling the Aggregate Report, and how to use it safely in real projects.

1What Is the Summary Report?

The Summary Report is a JMeter listener that shows one row of statistics for each kind of request in your test, plus a final row for everything together.

The Simple Definition

In Apache JMeter, a listener is an element that receives the results of requests and shows or saves them. There are many listeners. Some draw graphs, some show every response, and some write files. The Summary Report is a listener that keeps running totals and displays them as a table. Each row stands for one label, which is simply the name of a request such as “Login” or “Search.” The columns hold the statistics: how many times that request ran, how long it took on average, how many failed, and more.

Everyday Analogy

Think of the scoreboard in a cricket or football stadium. It does not replay every movement of every player. It keeps a few important numbers up to date: runs, wickets, goals, time. The Summary Report is the scoreboard of your test. It does not show every request, only the running score.

What It Does Not Do

The Summary Report does not show the body of any response, so you cannot read what the server actually said. It does not draw graphs. It does not show percentiles such as the ninety-fifth percentile, which are available in the Aggregate Report instead. It is a quick, light, honest table of the basics.

Why It Is So Popular

  • It is light. It keeps small running totals instead of storing every sample, so it uses little memory.
  • It is quick to read. A dozen rows and a handful of columns fit on one screen.
  • It updates live. You can watch the numbers change as the test runs.
  • It exports easily. The table can be saved to a file for sharing.

2Why We Need a Summary at All

Raw results are too many to read. A summary is how humans make decisions from them.

The Problem of Too Much Data

Suppose a test runs fifty virtual users for twenty minutes, and each user sends a request every few seconds. That is easily tens of thousands of results. A long test or a bigger one can reach millions. Each result has a time, a code, a size, a name, and more. Reading them one by one is not just boring; it is impossible.

What a Decision-Maker Needs

The people who read test results usually want to know a handful of things. Was the system fast enough? Did anything fail? How much work did it handle each second? Which part was slowest? A summary table answers these questions directly.

Question People AskSummary Report Column That Answers It
How much did we test?# Samples
How fast was a typical request?Average
What were the best and worst cases?Min and Max
Was the speed steady or erratic?Std. Dev.
How many requests failed?Error %
How much work per second?Throughput
How much data moved?Received KB/sec, Sent KB/sec, Avg. Bytes
i
Good to Know

A summary always hides some detail. That is its purpose, and also its danger. Later chapters show how to read the numbers carefully so the hidden detail does not mislead you.

3Core Concepts You Need First

Six small ideas explain almost everything about the report. Learn them once and the table becomes easy.

Idea

Sampler

An element that sends a request, such as an HTTP Request. Think of it as a messenger who carries a question to the server.

Idea

Sample

The record of one request and its response, with time, size, and success or failure. One messenger trip makes one sample.

Idea

Label

The name of the request. Samples with the same label are counted together in one row.

Idea

Listener

An element that receives samples. The Summary Report is one kind of listener.

Idea

Virtual User

A thread inside JMeter that behaves like one visitor, sending requests in a loop.

Idea

Response Time

The time between sending a request and receiving the full answer, measured in milliseconds.

Milliseconds

A millisecond is one thousandth of a second. A blink of an eye takes about one hundred to four hundred milliseconds. Most times in the Summary Report are in milliseconds, so an average of 850 means just under one second.

Why Labels Matter So Much

The report groups samples by label. If two different requests share the same label, their numbers are blended into one row, and you can no longer tell them apart. If the same request has a different label every time, you get a flood of rows with one sample each. Good labels are the foundation of a readable report, and a later chapter returns to this.

4Adding the Summary Report to a Test Plan

The report is added like any other listener, in a few clicks.

1

Choose a Parent

Right-click the Thread Group, or the Test Plan itself, depending on how much you want it to see.

2

Add the Listener

Choose Add, then Listener, then Summary Report.

3

Give It a Clear Name

Rename it to something like “Summary – Checkout Test” so it is easy to find among other elements.

4

Run the Test

Press the start button. The table fills in as samples arrive.

5

Clear Between Runs

Use the clear button before a new run so numbers from an old run do not mix with the new ones.

Where You Place It Matters

A listener sees the samples within its scope, which is decided by its position in the tree. Placed under one Thread Group, it reports on that group only. Placed directly under the Test Plan, it reports on every group. Placed under a single sampler, it reports on that sampler alone. Many teams put one report at the Test Plan level for the overall picture, and sometimes a second one under a single important request.

i
Pro Tip

If you see fewer rows than you expected, check where the listener sits. A listener placed under the wrong branch silently misses the requests you wanted to see.

5Architecture: Where the Report Sits in JMeter

The report is the last stop on the journey of each request. Understanding the journey explains why the numbers look the way they do.

flowchart TD
    TP["Test Plan"] --> TG["Thread Group: virtual users"]
    TG --> S1["Sampler: Home"]
    TG --> S2["Sampler: Login"]
    TG --> S3["Sampler: Search"]
    S1 --> SYS["System under test"]
    S2 --> SYS
    S3 --> SYS
    SYS --> RES["Responses return to JMeter"]
    RES --> AS["Assertions judge pass or fail"]
    AS --> SR["Summary Report listener"]
    AS --> OT["Other listeners and result files"]
    SR --> TB["Table: one row per label plus Total"]
    
Figure 1: The path from Thread Group to the Summary Report table

Reading the Diagram

Virtual users in the Thread Group run the samplers. Each sampler sends a request to the system under test and receives a response. Assertions then judge whether the response was correct. Finally the finished sample, with its pass or fail status, goes to the listeners. The Summary Report receives it and updates the row for that label, then updates the Total row.

Main Components

  • Thread Group. Creates the virtual users and decides how they behave.
  • Samplers. Send requests and make samples.
  • Assertions. Decide whether a sample counts as failed, which directly changes the Error % column.
  • Listeners. Receive samples. The Summary Report is one of them.
  • Result files. Optional files that store raw samples for later study.
!
Important Link

The report only knows what the sample says. If an assertion marked a sample as failed, the report counts an error. If no assertion exists, an error page with a success code counts as a success. The table is only as honest as the checks that feed it.

6Internal Working: How the Numbers Are Collected

The report does not keep a diary of every request. It keeps small running tallies, and that is why it stays light.

Running Totals

When a sample arrives, the listener finds the row for its label. Into that row it adds the response time to a running sum, adds one to the count, adds the bytes received and sent, and notes whether the sample failed. It also updates the smallest and largest times seen so far, and a running measure that later becomes the standard deviation. The sample itself is then forgotten.

Computing the Columns

The visible numbers are calculated from the tallies whenever the table redraws. The average is the total time divided by the count. The error percentage is failed samples divided by all samples. The throughput is the count divided by the time from the first sample’s start to the last sample’s end. None of this needs old samples, only the tallies.

sequenceDiagram
    participant V as Virtual User
    participant S as Sampler
    participant A as Assertion
    participant L as Summary Report
    participant T as Table on Screen
    V->>S: Run the request
    S->>S: Send, wait, receive response
    S->>A: Hand over the sample
    A-->>S: Pass or fail added to the sample
    S->>L: Deliver finished sample
    L->>L: Update tallies for this label
    L->>L: Update tallies for Total row
    L->>T: Refresh the visible numbers
    
Figure 2: The life of one sample inside the Summary Report

What the Diagram Shows

The sampler finishes its work, the assertion adds a verdict, and the finished sample reaches the listener. The listener updates two sets of tallies, one for the label and one for the Total, and then the screen refreshes. There is no storage of the sample, which is the secret of the report’s small memory use.

Everyday Analogy

A shopkeeper at closing time does not keep every receipt on the counter. She keeps a running total in a notebook: so many sales, so much money, the biggest sale, the smallest sale. The receipts can go in a box. The notebook is the Summary Report.

7The Table at a Glance

Before studying each column, look at the whole table and learn its shape.

ColumnUnitOne-Line Meaning
LabelTextThe name of the request this row describes
# SamplesCountHow many times that request ran
AverageMillisecondsMean response time
MinMillisecondsFastest response seen
MaxMillisecondsSlowest response seen
Std. Dev.MillisecondsHow much the times vary around the average
Error %PercentShare of samples that failed
ThroughputRequests per second, minute, or hourHow much work was completed per unit of time
Received KB/secKilobytes per secondData received from the server
Sent KB/secKilobytes per secondData sent to the server
Avg. BytesBytesAverage size of a response

The Last Row

The final row is labelled TOTAL. It combines every row above it, so it shows the overall picture of the whole test. Many people read the Total row first, then look at the individual rows to find which request is responsible for any problem.

i
Reading Habit

Read the table from right to left in importance: first Error %, then Throughput, then Average and Max, and only then the rest. A fast but failing system is not a success.

8The Label Column

A row is born the first time a sample with a new label arrives. Naming decides how clear your report will be.

Where Labels Come From

By default, a sample’s label is the name you gave the sampler in the Test Plan tree. If you name a request “HTTP Request,” that is the label, and if you have twenty requests with that default name, all twenty collapse into a single row. This is one of the most common reasons for confusing reports.

Naming Rules That Work

  • Be specific. “Login – submit credentials” says far more than “Request 3.”
  • Be unique per step. Each distinct step should have its own label so it gets its own row.
  • Be stable per run. Do not put changing values such as user names or times into labels, or every sample gets its own row.
  • Use order prefixes. A prefix such as “01 Home” and “02 Login” keeps rows in the order of the journey when you sort the table by label.
  • Avoid secrets. Labels are saved in files and shared in reports.

Include Group Name

The Summary Report panel has an option to include the Thread Group name in the label. This is useful when two groups use requests with the same name, such as two kinds of users both calling “Search.” With the option on, rows read “Shoppers Search” and “Admins Search,” so they stay separate.

!
Watch Out

Variables placed in a sampler name, such as a user id, create a new row for every different value. A table with ten thousand one-sample rows is useless and slow to draw. Keep names fixed.

9The # Samples Column

The simplest column, and one that quietly tells you whether your test did what you planned.

What It Means

# Samples is the number of times the request with this label has run and reported a result. If a request ran 1,200 times, the column shows 1,200. It counts both successes and failures.

Why It Matters

This number is your first sanity check. You can predict it. If you have fifty virtual users and each runs a loop ten times, and every loop passes through the Search request once, you expect 500 samples for Search. If the table shows 480, something is off: maybe some users stopped early, maybe a failure skipped later steps, or maybe the test was stopped before everyone finished.

What Surprising Counts Tell You

What You SeePossible Reason
Fewer samples than predictedUsers stopped early, the test was stopped, a failure skipped later steps, or a condition controller skipped the request
More samples than predictedA loop count was larger than you thought, a retry was added, or embedded resources were counted as separate samples
Different counts for steps in one journeySome users failed part way, or a branch was taken by only some users
Very small counts on one rowThe label contains changing values, or the step is rarely reached
Everyday Analogy

If a school expects five hundred students at an exam and only four hundred and eighty answer sheets arrive, the first question is not about the marks. It is “Where are the missing twenty?” The sample count asks the same question of your test.

Small Counts Mean Weak Evidence

Averages and error rates from a handful of samples can swing wildly. Ten samples with one failure show a ten percent error rate, yet the same single failure among ten thousand samples is almost nothing. Always read statistics together with the count behind them.

10The Average Column

The average is the most quoted number in any test report, and the easiest one to misread.

What It Means

The Average is the mean response time in milliseconds. JMeter adds up the response times of all samples in the row and divides by the count. If three requests took 100, 200, and 600 milliseconds, the average is 300.

What the Time Includes

The response time JMeter records usually runs from just before the request is sent until the last byte of the response is received. It covers the network travel, the server’s thinking time, and the download. It does not include the pause added by timers, because a timer waits before the sampler starts.

The Weakness of Averages

An average squeezes many numbers into one, and it can hide how the numbers are spread. Imagine nine requests that take 100 milliseconds and one that takes 5,100. The average is 600 milliseconds, yet nine of ten visitors enjoyed a very fast answer and one visitor waited more than five seconds. The average describes nobody’s real experience.

Everyday Analogy

If one person in a room is a billionaire and nine people have almost nothing, the average wealth looks high, but nobody in the room is typical. A single extreme number can drag an average away from what most people experience.

Using the Average Wisely

  • Read it together with Min, Max, and Std. Dev., which show the spread.
  • Compare averages between runs of the same test, not between different tests.
  • Use the Aggregate Report, or the dashboard report, when you need percentiles that show what most users really felt.
  • Judge an average against an agreed goal, such as “the Search average should stay below one second.”
!
Watch Out

Failed samples are included in the average. A request that fails instantly with an error page can pull the average down and make the system look faster than it is. Always read Average beside Error %.

11The Min and Max Columns

Min and Max are the edges of the range. They are simple, and they are valuable clues.

What They Mean

Min is the fastest response time seen for this label, and Max is the slowest. Both are in milliseconds, and both are single samples, not averages.

Reading Min

The minimum is roughly the best the system can do when everything goes right. It is often close to the time of an unloaded request. If Min is extremely small, such as a few milliseconds, check that the request actually did real work. A failed request that never reached the server can produce a tiny time and a misleadingly small minimum.

Reading Max

The maximum shows the worst experience any single virtual user had. A very large Max compared with the Average means that at least one request was extremely slow. It could be a one-time event, such as a first request that had to open a connection, or a warm-up effect, or it could be an early sign of trouble. One extreme number does not prove a problem, but it asks for a closer look.

The Gap Tells a Story

PatternWhat It Suggests
Min, Average, and Max close togetherVery steady behaviour
Min and Average close, Max very far awayMostly fine with a few rare stalls
Average much closer to Max than to MinMany slow responses, a broader problem
Max exactly equal to a round number such as 30,000Likely a timeout limit being reached
i
Pro Tip

When a Max value is a suspiciously round number, think “timeout.” Systems often give up at a fixed time, and the report then shows that exact limit as the worst case.

12The Std. Dev. Column

Standard deviation sounds scary, but the idea is gentle: it measures how much the times wobble.

What It Means

Std. Dev. is short for standard deviation. It is a number, in milliseconds, that describes how far the response times typically stray from the average. A small value means the times are tightly packed near the average. A large value means they are scattered.

Everyday Analogy

Two bus routes both take thirty minutes on average. On the first, the bus always takes between twenty-eight and thirty-two minutes. On the second, it sometimes takes ten minutes and sometimes fifty. The averages match, but the second route is far less dependable. Standard deviation is the number that tells these two routes apart.

Rule of Thumb for Reading It

  • Small compared with the average. Steady and predictable behaviour.
  • About as large as the average. Very uneven times; some users have a much worse experience than the average suggests.
  • Larger than the average. Strong outliers are pulling the numbers apart. Investigate the slowest samples.

How It Helps a Tester

A system that is about to hit a limit often becomes erratic before it becomes slow. Queues build up, some requests wait, others pass quickly, and the standard deviation climbs. Watching it grow as you add users can warn you that the system is nearing its breaking point, sometimes earlier than the average does.

i
Good to Know

Standard deviation works best when times follow a roughly bell-like pattern. Real response times often have a long tail of slow cases, so treat it as a hint about steadiness, not as an exact measure of fairness.

13The Error % Column

This is the column that tells you whether the numbers on the other columns can be trusted.

What It Means

Error % is the share of samples in the row that failed, shown as a percentage. If 5 out of 1,000 samples failed, the value is 0.50 percent. A value of 0.00 percent means no sample failed.

What Counts as a Failure

  • Error response codes. By default, JMeter treats HTTP codes in the 4xx and 5xx ranges as failures, and codes in the 2xx and 3xx ranges as successes.
  • Connection problems. Refused connections, resets, and timeouts count as failures.
  • Assertion failures. Any assertion that fails marks the sample as failed.
  • Extractor and script problems. Some elements can mark a sample failed when they cannot do their work.

The Great Danger: False Zero

A zero error rate feels wonderful, and it is only as good as the checks behind it. Without assertions, a page that says “something went wrong” but carries a 200 code is counted as a success. The report will cheerfully show 0.00 percent errors for a system that is failing. Always add assertions to important requests so the Error % column describes the truth.

Reading Error % With Context

ObservationLikely Meaning
Zero errors but suspiciously fast averagesMaybe no assertions, and the server returns quick error pages with success codes
Errors rise as users increaseThe system is running out of capacity
Errors on one label onlyA specific service or step is the weak spot
Errors from the first secondLikely a script or data problem, not load
Errors that appear in burstsPossible restarts, garbage collection pauses, or a limit being reached
!
Watch Out

The report shows how many samples failed, not why. To learn the reason, look at the error messages in a results file or in a debugging listener such as the View Results Tree during a small run.

14The Throughput Column

Throughput answers a different question from speed: how much work did the system finish in a given time?

What It Means

Throughput is the number of requests completed per unit of time. JMeter calculates it as the number of samples divided by the time between the start of the first sample and the end of the last sample in that row. For a busy system, the unit is usually requests per second. For slow-moving requests, JMeter may show the value per minute or per hour so the number stays readable.

Everyday Analogy

A toll booth has two measures. One is how long each car waits, which is response time. The other is how many cars pass through each minute, which is throughput. A booth can have very quick service and still pass few cars if few cars arrive, and a busy booth can pass many cars even if each takes a while.

Speed and Throughput Are Related but Different

If you add more virtual users and the system keeps up, throughput rises and response times stay steady. When the system reaches its limit, throughput stops rising, then response times grow, and finally errors appear. The point where throughput stops climbing is a good estimate of the system’s capacity for that scenario.

What Controls Throughput

  • Number of virtual users. More users send more requests.
  • Think time. Timers that make users pause reduce the rate of requests.
  • Response time. Slower answers mean each user completes fewer requests.
  • Test length and ramp-up. The measured time includes quiet periods at the start and end.
  • The load generator. An overloaded test machine cannot send requests quickly enough.
i
Pro Tip

Throughput measured per row depends on when that request ran during the test. A request used only at the start of a journey and a request used only at the end are measured over different windows, so compare per-row throughput with care and trust the Total row for the overall rate.

15The Received KB/sec and Sent KB/sec Columns

These two columns measure the traffic in kilobytes, showing how much data flowed each second.

What They Mean

Received KB/sec is the amount of data JMeter received from the server per second, which is the size of the responses. Sent KB/sec is the amount of data JMeter sent to the server per second, which is the size of the requests. A kilobyte is about one thousand bytes, a small amount of data such as a short text.

Why They Matter

  • Network limits. Every network link can carry only so much data per second. If received data approaches the capacity of the link, the network, not the application, may be the bottleneck.
  • Page weight changes. If received traffic suddenly doubles for the same number of requests, the pages have become heavier.
  • Load generator limits. The test machine’s own network card can be the bottleneck, which would limit the load you can apply.
  • Cost. In cloud environments, data transfer can be billed, so the numbers help estimate cost.

An Example Reading

Imagine the Total row shows 2,000 Received KB/sec. That is about two megabytes per second, or around sixteen megabits per second. On a link rated for a hundred megabits, this is comfortable. On a link rated for fifteen, it would explain why requests are slow regardless of how fast the servers are.

i
Unit Reminder

Kilobytes are different from kilobits. Network speeds are often quoted in bits, and one byte is eight bits. Multiply the kilobyte numbers by eight to compare with a link quoted in kilobits per second.

16The Avg. Bytes Column

The average size of a response, a quiet column that often explains a loud problem.

What It Means

Avg. Bytes is the average size, in bytes, of the responses for that label. A byte is the tiny unit used for storing one character of text. A page of about 50,000 bytes is roughly the size of a modest web page without its images.

Why It Is a Great Detective

Response size is a fingerprint of correctness. A search that normally returns about 40,000 bytes suddenly averaging 600 bytes is almost certainly returning an error message or an empty page, even if the response code says success. Many silent failures are first noticed by someone saying, “Why did the bytes drop?”

Uses

  • Spotting hidden errors. A sudden fall in size often means error pages replaced real content.
  • Spotting bloat. A sudden rise in size after a release means a page grew heavier, which may slow users on poor connections.
  • Checking caching. A smaller size on repeat visits can show that compression or caching works.
  • Choosing a Size Assertion. The normal size is a sensible starting point for a size check.
i
Pro Tip

Before a big test, run one user and write down the Avg. Bytes of each important label. During the real test, any big departure from those numbers is a clue to investigate.

17Reading the TOTAL Row

The last row blends everything into one line. It is the headline of your test, with a few traps hidden inside.

How It Is Built

The Total row accumulates every sample from every label. Its sample count is the sum of all counts. Its average is the average over all samples together. Its minimum and maximum are the extremes across all rows. Its error percentage is all failures divided by all samples. Its throughput is the overall rate for the whole test.

The Blending Trap

Because the Total mixes different kinds of requests, its average can mislead. Suppose a light request that takes 100 milliseconds is used nine times for every one use of a heavy request that takes 3,000 milliseconds. The Total average is about 390 milliseconds, which does not describe either request. It describes the mix.

LabelSamplesAverage
Browse (light)9,000100 ms
Report (heavy)1,0003,000 ms
TOTAL10,000390 ms

When Total Is Useful

  • Overall error rate. A quick yes or no on whether the test went well.
  • Overall throughput. The rate of work the whole system handled.
  • Comparing identical tests. If the mix of requests is the same in two runs, the Total averages can be compared fairly.

When Total Is Misleading

If the mix of requests changes between runs, the Total average changes even when no single request changed. Always look at the individual rows before drawing a conclusion from the Total.

18The Controls Around the Table

Above and below the table sit a few settings. They are small, but they decide what gets shown and saved.

Name and Comments

Like every element, the listener has a Name and a Comments box. Give it a name that says what it covers, and use the comment to record anything a colleague should know, such as “Placed at Test Plan level to cover all groups.”

The File Section

The panel has a filename box with a Browse button. If you type a file name, the listener writes each result to that file while the test runs. If you leave it empty, nothing is written to a file by this listener, and the table exists only on screen. The same box can be used to read an older results file back into the table for analysis.

Errors and Successes Filters

Two check boxes, usually called “Errors” and “Successes,” decide which kinds of samples are logged to the file. Turning on only Errors makes a smaller file that contains only the failures, which is a very useful trick for long tests. The table on screen still counts everything.

Configure

The Configure button opens a window where you choose which fields are saved to the file, such as time stamps, labels, response codes, messages, thread names, bytes, and latency. Fewer fields mean smaller files and less work for the test machine.

Include Group Name in Label

This option adds the name of the Thread Group to each label. It keeps rows separate when different groups call requests with the same name.

Save Table Data and Table Header

At the bottom of the panel, a button saves the visible table to a file, and a box lets you decide whether the column titles are included at the top. This is the simplest way to copy the final numbers into a spreadsheet or a report.

i
Pro Tip

Saving the table is not the same as saving the raw results. The table holds only the summary numbers. If you may need to analyse the run later, also save the raw results file.

19Saving Results and Why Files Matter

A table on a screen disappears when the window closes. A file lasts, and can be studied again.

Two Kinds of Records

The Table

  • Quick and easy to read
  • Small, one row per label
  • Cannot be re-sliced by time or user
  • Lost when JMeter closes unless saved

The Raw Results File

  • Holds every sample
  • Can be loaded into reports and dashboards later
  • Allows new questions about the same run
  • Can become very large without careful field choices

A Sensible Habit

For every serious test, write raw results to a file with a name that includes the date and a short description, such as the test name and build number. Keep the table you saved beside it. Months later, when somebody asks how the system behaved before a change, you can answer with evidence instead of memory.

File Format

JMeter can write results as plain comma-separated text or as structured XML. The plain text format is smaller and faster to write, and most analysis tools can read it. Choose it by default unless you have a special reason to use XML.

!
Watch Out

If a file with the same name already exists, new results may be appended to it or mixed with old ones. Use a fresh file name for every run, or delete old files first, so two different runs do not blend into one set of numbers.

20Summary Report Versus Aggregate Report

Two listeners look almost alike. Knowing what separates them saves you from choosing the wrong one.

The Family Resemblance

The Aggregate Report is the Summary Report’s closest relative. Both show one row per label plus a total, and both show sample counts, averages, error percentages, and throughput. The differences are in what else each one offers and in how much memory each uses.

FeatureSummary ReportAggregate Report
RowsOne per label plus TotalOne per label plus Total
Average, Min, Max, Error %, ThroughputYesYes
Standard deviationYesNo standard deviation column in the usual layout
MedianNoYes
90, 95, and 99 percent linesNoYes
Average bytes columnYesNo
Received and Sent KB/secYesYes
Memory useLow: keeps running totalsHigher: keeps response times so it can compute percentiles
Best forQuick checks and long testsStudying what most users experienced

What Percentiles Add

A percentile answers “what response time was good enough for this share of users?” A 90 percent line of 800 milliseconds means that nine out of ten requests finished in 800 milliseconds or less. Percentiles describe the typical experience much better than the average, which is why the Aggregate Report matters even though it is heavier.

Why Percentiles Need More Memory

To know the ninety-fifth percentile, a listener must remember the actual response times and sort them. That needs storage proportional to the number of samples. The Summary Report avoids this and therefore cannot give percentiles.

i
Good to Know

Layouts can differ between JMeter versions, so open both listeners in your own version and compare the column headers. The idea that only the Aggregate Report offers percentiles has held for a long time.

21Choosing the Right Listener

JMeter offers many ways to look at results. Each answers a different question.

flowchart TD
    Q["What do I need to see?"] --> A{"Need to read actual responses?"}
    A -->|"Yes, to debug"| V["View Results Tree with a small run"]
    A -->|"No"| B{"Need percentiles like the 95 percent line?"}
    B -->|"Yes"| AG["Aggregate Report or HTML dashboard report"]
    B -->|"No"| C{"Need graphs over time?"}
    C -->|"Yes"| GR["Dashboard report, Backend Listener, or graph listeners"]
    C -->|"No"| D{"Long test or very large volume?"}
    D -->|"Yes"| SR["Summary Report with results saved to file"]
    D -->|"No"| SR2["Summary Report is a quick, light choice"]
    
Figure 3: A decision path for choosing a results listener

Reading the Diagram

If you need to see the actual words a server returned, you need the View Results Tree, but only with small runs, because it keeps everything. If you need percentiles, choose the Aggregate Report or the generated dashboard. If you need graphs over time, use the dashboard or a backend listener that sends data to a graphing tool. If none of these is needed, the Summary Report is the light, quick choice, especially for long tests.

A Quick Comparison

ListenerStrengthWeakness
Summary ReportLight, quick table of basicsNo percentiles, no graphs
Aggregate ReportPercentiles and medianUses more memory
View Results TreeShows full requests and responsesVery heavy; for debugging only
Graph listenersVisual trends in the GUIHeavy and not for large tests
Backend ListenerSends live data to external dashboardsNeeds extra systems set up
HTML dashboard reportRich report with percentiles and graphsGenerated after the test from a results file

22Memory and Performance Cost

Every listener costs the test machine something. The Summary Report costs less than most, but it is not free.

Why It Is Light

The report keeps a few numbers per label, not a record per sample. Even after ten million samples, the memory used is tiny, as long as the number of labels stays small. This makes it safe for long tests where heavier listeners would run the machine out of memory.

Where Costs Still Appear

  • Redrawing the table. In the graphical interface, the table refreshes while the test runs. A busy test with many samples makes the interface work hard.
  • Writing a file. If the filename is set, every sample is written to disk. Many fields and many samples mean a lot of writing.
  • Too many labels. If labels contain changing values, thousands of rows are created and memory grows.
  • The graphical interface itself. Running big tests with the windows open takes resources away from the test.

How to Keep It Cheap

Tip

Run Big Tests Without the Interface

Use the command line mode for the heavy run, and look at the results file afterwards.

Tip

Choose Fewer Fields

Use Configure to save only the fields you will really use.

Tip

Keep Labels Stable

No user names, times, or ids inside request names.

Tip

Log Only Errors if Files Grow Large

The Errors option writes only the failures, which keeps files small.

!
Watch Out

If the test machine is overloaded, requests leave late, and the numbers include that delay. Watch the processor and memory of the load generator throughout the test, and treat the machine’s health as part of the evidence.

23Graphical Mode and Command Line Mode

JMeter has two ways of running. The Summary Report behaves a little differently in each.

Graphical Mode

In the graphical interface, you build the test and can watch listeners fill live. This is perfect for designing, debugging, and short trials. It is not recommended for large load tests, because the interface consumes the test machine’s resources and can distort results.

Command Line Mode

Also called non-graphical mode, this runs the test without windows. Nothing is displayed in a table, because there is no screen for it. Instead, JMeter writes results to a file as instructed, and it can print a short progress summary to the console at regular intervals. These console lines show running totals such as the number of samples, the rate, the average, the minimum, the maximum, and the number and share of errors. They are produced by a built-in summariser, a separate helper from the Summary Report listener.

QuestionGraphical ModeCommand Line Mode
Best useDesigning and debuggingReal load runs
Summary table visible liveYesNo; console progress lines instead
Impact on the test machineHigherLower
How to see the final tableLook at the window or save the tableLoad the results file into the listener afterwards, or build the dashboard report

Looking at Results Afterwards

After a command line run, open JMeter’s graphical interface, add a Summary Report, and use its file box to read the saved results file. The table is rebuilt from the saved samples, so you get the familiar view without having paid the graphical cost during the test.

i
Pro Tip

Use graphical mode to build and check your plan with one or two users, then run the real load in command line mode and read the results in the interface afterwards.

24Warm-Up, Ramp-Up, and Steady State

A test has phases. A summary that blends them all can hide the truth about the part you care about.

The Phases of a Typical Test

1

Ramp-Up

Users are added gradually. Load is low and growing, so numbers are not yet representative.

2

Warm-Up

Caches fill, connections open, and code compiles on the server. The first requests are often slower than later ones.

3

Steady State

Full load is applied and the system settles. This is the period that best represents real capacity.

4

Ramp-Down

Users finish and leave. Throughput falls, and the final seconds are not representative either.

The Problem for a Single Table

The Summary Report keeps one set of numbers for the whole run. It mixes ramp-up, warm-up, steady state, and ramp-down into one average. If the steady state was healthy but the first minute was slow, the average is slightly worse than reality. If the test ended with a failure storm, the error rate includes it.

How to Work Around It

  • Make the steady-state part long compared with ramp-up and ramp-down, so it dominates the numbers.
  • Save raw results and analyse only the steady-state window using a dashboard or a spreadsheet.
  • Run a short warm-up before the measured run, and clear the table before the measured part begins.
  • Use a scheduler or a delay in the Thread Group so that all users start working together once warmed up.

25The Summary Report and Transaction Controllers

Business steps often group several requests. The report shows these groups in a way that surprises many beginners.

What a Transaction Controller Does

A Transaction Controller wraps several samplers into one named business step, such as “Checkout.” It measures the time of the whole step, from the start of the first request to the end of the last one.

Two Modes, Two Looks

The controller has a setting called “Generate parent sample.” When it is off, the report shows the individual requests as usual and also adds an extra row for the transaction itself. When it is on, the controller produces one parent sample for the whole step, and the individual requests inside it are not shown as separate rows in simple listeners.

SettingRows You Will SeeCareful With
Generate parent sample offEach request plus a row for the transactionThe total sample count includes both, so the Total row counts work twice
Generate parent sample onOne row per transactionYou lose the per-request detail in the table

The Counting Trap

When both individual requests and their transaction appear as rows, the Total row adds all of them together. Its sample count is therefore larger than the number of real requests, and its throughput appears higher than the true request rate. Read the transaction rows separately from the request rows, and be careful when quoting Total throughput.

!
Important

The transaction’s own error status follows its contents. If any request inside fails, the transaction is marked failed. This is helpful, because the business step then shows an honest error rate.

26How Assertions, Timers, and Think Time Change the Table

Other elements in your plan quietly shape the numbers. Knowing how helps you explain surprises.

Assertions

An assertion marks a sample as failed when a check fails, which raises the Error % column. It does not change the response time. A strict assertion can therefore lift the error rate dramatically without any change in speed. That is the point: it reveals failures that codes alone would hide.

Timers

A timer makes a virtual user pause before sending a request, to imitate a person thinking or reading. The pause is not part of the response time, so the Average column does not include it. But the pause reduces how many requests the users send, so it lowers Throughput.

Think Time and the Capacity Question

If you run a test with long pauses, fifty users may send only a few requests per second. The report will show a low throughput and good response times, which does not prove the system can handle a high request rate. To test capacity, either use more users, shorten the pauses, or use a throughput-shaping timer designed to produce a target rate.

Change in the PlanAverageError %Throughput
Add a strict assertionNo changeMay riseNo change
Add a long timerNo changeNo changeFalls
Add more usersRises when the system is stressedRises at the limitRises, then flattens
Remove pausesMay rise from higher pressureMay riseRises

27The Summary Report in Distributed Testing

When one machine cannot create enough load, several machines work together, and the report must combine their results.

How Distributed Mode Works

In distributed testing, one machine acts as the controller and the others act as workers. The controller sends the Test Plan to every worker. Each worker runs the plan with its own virtual users and sends its samples back. The listener on the controller receives samples from every worker and builds one combined table.

Points to Remember

  • Users multiply. If the plan says fifty users and there are four workers, you get two hundred users, not fifty.
  • Counts add up. The # Samples column is the sum across all workers.
  • The controller can become a bottleneck. It receives every sample, so a very large test can overload it. Using result files on workers and merging them afterwards is sometimes safer.
  • Clocks should agree. Machines with different clocks make time-based analysis harder, so keep their time synchronised.
  • Same plan and data. Every worker needs the same plan and any data files at the same paths.
i
Pro Tip

If the table shows strange behaviour from only some requests, find out whether it comes from one worker. Include the thread name in saved results so you can tell which worker produced each sample.

28A Routine for Reading the Table

When the test ends and the table is full, a fixed routine keeps you from jumping to the wrong conclusion.

flowchart TD
    S["Test finished"] --> C1{"Sample counts match the plan?"}
    C1 -->|"No"| F1["Find out why: early stops, skipped steps, labels"]
    C1 -->|"Yes"| C2{"Error % acceptable on every row?"}
    C2 -->|"No"| F2["Investigate failures before trusting any speed numbers"]
    C2 -->|"Yes"| C3{"Throughput reached the target?"}
    C3 -->|"No"| F3["Check users, think time, and load generator health"]
    C3 -->|"Yes"| C4{"Average, Max, and Std. Dev. within goals?"}
    C4 -->|"No"| F4["Find the slow label and study its raw samples"]
    C4 -->|"Yes"| C5{"Bytes and data rates look normal?"}
    C5 -->|"No"| F5["Suspect silent errors or page changes"]
    C5 -->|"Yes"| OK["Record results and compare with the previous run"]
    
Figure 4: A step-by-step routine for reading a Summary Report

Why This Order

Each question protects the next. If counts are wrong, nothing else can be trusted, because you are not looking at the test you planned. If errors are high, speed numbers are suspect, because failed requests are often quick. Only when counts and errors are sound do speed numbers become meaningful. Finally, response sizes act as an independent cross-check against silent failures.

Write the Answer Down

For each question, write one short line with the actual numbers. A routine that ends with a written record gives you something to compare with next time, and something to show others when they ask what the test proved.

i
Pro Tip

Compare against a baseline. A number alone, such as “average 640 ms,” means little. The same number next to last month’s 420 ms tells a clear story.

29A Worked Example: Reading a Real-Looking Table

Let us read an imagined table for a small shop test with fifty users. The numbers are invented to teach the method.

LabelSamplesAverageMinMaxStd. Dev.Error %ThroughputAvg. Bytes
01 Home500210901,100800.00%4.1/sec38,000
02 Login5004201502,3001901.20%4.1/sec9,400
03 Search4949802009,8001,4500.00%4.0/sec520
04 Add to cart4943301201,9001400.40%4.0/sec2,100
05 Pay4911,5006006,2008008.50%3.9/sec3,000
TOTAL2,479685909,8008702.00%20.1/sec10,700

Reading It Step by Step

  1. Counts. Home and Login ran 500 times. Search and Add to cart ran 494, and Pay ran 491. Six users did not reach Search after Login, which matches the 1.2 percent login failures, since six of five hundred is 1.2 percent. The counts tell a consistent story.
  2. Errors. Pay has an 8.5 percent error rate, far worse than the others. That is the first place to investigate. It is a business-critical step.
  3. Speed. Pay is also the slowest on average, at 1,500 milliseconds. Search has a lower average of 980, but its maximum is 9,800 and its standard deviation of 1,450 is larger than its average. Search is erratic, with a few very slow cases.
  4. Bytes. Search returns only 520 bytes on average, while a real search result list should be much larger. This suggests the search is returning something very small, perhaps empty results or an error message, even though the error column says zero. A content assertion is needed on Search.
  5. Throughput. The Total of 20.1 per second equals the sum of the rows, as expected here, because there are no extra transaction rows.
!
Lesson

The most worrying finding was not the loud 8.5 percent error rate. It was the quiet 520 bytes on a request with 0.00 percent errors. Reading Avg. Bytes found a hidden problem the error column could not see.

30Step-by-Step: Producing a Trustworthy Report

A repeatable recipe from empty plan to a table you can stand behind.

1

Name Every Request Clearly

Give each sampler a unique, stable, readable name with an order prefix.

2

Add Assertions to Important Steps

Use positive content checks so the Error % column reflects real success.

3

Add the Summary Report

Place it at the Test Plan level so it covers all groups.

4

Run One User First

Confirm that the table shows the rows and sizes you expect, and write down baseline bytes.

5

Set a Results File

Give the file a dated name, choose a sensible set of fields, and keep one file per run.

6

Run the Real Test in Command Line Mode

Use the interface only to build and check; run the heavy load without windows.

7

Open the Results and Read the Table

Load the file into a Summary Report in the interface and follow the reading routine.

8

Save the Table and Notes

Save the table, the raw file, the plan version, and notes about the environment together.

31Monitoring, Logging, and Metrics Around the Report

The table tells you what the client saw. To explain why, you need to look at the other side of the conversation too.

The Two Viewpoints

The Summary Report shows the test’s viewpoint: how long answers took and how many failed. It cannot show what happened inside the server. If the average rises, the table alone cannot say whether the processor was busy, the database was slow, or the network was crowded. You need server-side monitoring alongside it.

What to Watch Beside the Report

  • Server processor and memory. A busy processor often explains rising times.
  • Database activity. Slow queries and waiting connections show up here.
  • Network traffic. Compare with the Received and Sent KB/sec columns.
  • Application logs. Errors and warnings explain failures counted in Error %.
  • Load generator health. The test machine’s own processor, memory, and network.

Matching Times

To connect events, write down the start and end time of the test, and note when the table first showed trouble. Looking at server charts for that exact period lets you line up cause and effect. Saved raw results include time stamps, which makes this possible even after the test.

Logging in JMeter Itself

JMeter writes its own log file with warnings and errors from the test machine, such as scripts that failed or connections that could not open. Check it after a surprising result; it often reveals problems that never show up in the table.

Everyday Analogy

A patient’s temperature chart says there is a fever, but a doctor also needs blood tests to learn the cause. The Summary Report is the temperature chart. Server monitoring is the blood test.

32Security and Safety Considerations

Reports and result files look harmless, but they can reveal more than you expect.

What Can Leak

  • Labels. Request names appear in tables and files. They may reveal internal service names, paths, or even account details if careless names are used.
  • Result files. Raw files can hold addresses, response messages, and thread names. If you save response data, they may contain personal information.
  • Saved tables. A screenshot or spreadsheet of a table may be shared widely, and it reveals how much load your system can take.
  • Environment details. Reports often mention server names and build numbers.

Good Habits

  • Use synthetic test accounts and fake data, never real customer records.
  • Avoid saving full response bodies unless you must, and delete files you no longer need.
  • Keep result files in access-controlled storage, not on shared public folders.
  • Choose generic labels that do not reveal secrets.
  • Share capacity numbers only with people who should know them. A report that shows exactly where a system breaks is useful to an attacker too.

Test Only What You Are Allowed To Test

Load testing sends large volumes of traffic. Run it only against systems you own or have written permission to test, and tell the people who run the system so that your test is not mistaken for an attack. Many cloud providers and hosting companies have rules about load tests.

!
Watch Out

Passwords and tokens used in a test can end up in saved request details. Check the fields chosen in Configure before saving results from a test that uses real credentials.

33Advantages, Disadvantages, and Trade-Offs

Every tool is good at some things and weak at others. Here is an honest list for the Summary Report.

Advantages

  • Very light on memory, even for long tests
  • Quick to add and quick to read
  • Shows size and data rate as well as speed
  • Includes standard deviation and a Total row
  • Updates live in the interface
  • Can save the table and raw samples
  • Works well with files from command line runs

Disadvantages

  • No percentiles or median
  • No graphs or trends over time
  • Blends warm-up, steady state, and ramp-down
  • Averages can hide user experience
  • No view of response content or error reasons
  • Total row can mislead when request mixes differ
  • Not displayed in command line mode

Trade-Offs

ChoiceGainCost
Use the Summary Report onlyLow overhead and a simple viewMiss percentiles and trends
Also use the Aggregate ReportPercentiles for real user experienceMore memory
Generate the dashboard report afterwardsGraphs, percentiles, and error tablesAn extra step and bigger files
Save every field to the fileMaximum detail for later analysisLarge files and more work for the test machine

34Design Patterns and Anti-Patterns

Years of testing teams have found the same helpful habits and the same repeated traps.

Good Patterns

Pattern

Light Live, Rich Later

Keep the Summary Report for live checks and analyse the saved raw file with richer tools afterwards.

Pattern

Baseline First

Run one user before every campaign and record bytes and times as a reference.

Pattern

Honest Errors

Add positive assertions so the Error % column describes truth, not just codes.

Pattern

Stable Labels

Clear, unique, ordered names without changing values.

Pattern

Steady-State Window

Measure after warm-up and clear the table before the measured period.

Pattern

Pair With Server Metrics

Always look at server and generator health beside the table.

Anti-Patterns

AP-1 Avoid Quoting Only the Average
What Happens

A report says “average 600 ms” and nothing more.

Why It Hurts

Slow tails and erratic behaviour stay hidden, and goals are met on paper while users suffer.

Better Approach

Quote Min, Max, Std. Dev., and error rate, and get percentiles from the Aggregate Report or dashboard.

AP-2 Avoid Trusting a Zero Error Rate Without Assertions
What Happens

No content checks exist, so error pages with success codes count as passes.

Why It Hurts

The system is declared healthy while it is failing.

Better Approach

Add assertions and cross-check Avg. Bytes.

AP-3 Avoid Big Tests With the Interface Open and Heavy Listeners
What Happens

A large load run is started from the graphical interface with many listeners enabled.

Why It Hurts

The test machine slows down, and measured times include its own struggle.

Better Approach

Run in command line mode and write results to a file.

AP-4 Avoid Mixing Runs in One Table
What Happens

The table is not cleared between runs, or results are appended to an old file.

Why It Hurts

Numbers from different conditions blend into meaningless averages.

Better Approach

Clear the table and use a fresh, dated file name for every run.

35Best Practices and Common Mistakes

A short list that separates calm, trustworthy test reports from confusing ones.

Best Practices

  • Name labels well. Specific, ordered, stable, and free of secrets.
  • Add assertions first. The report is only as honest as its checks.
  • Read in order. Counts, errors, throughput, speed, then bytes.
  • Save raw results. A file allows new questions later.
  • Clear before each run. Never mix runs.
  • Run big tests in command line mode. Keep the interface for design and review.
  • Watch the load generator. Its health is part of the evidence.
  • Compare with a baseline. Numbers mean more beside last time’s numbers.
  • Record the context. Build number, environment, user count, and date.

Common Mistakes

MistakeResultFix
Using default sampler namesDifferent requests blended into one rowGive each step its own name
Variables inside labelsThousands of one-sample rowsUse fixed names
Reading the Total as the truthMisleading blended averageRead each row first
Comparing runs with different request mixesFalse improvements or regressionsCompare rows, not only Total
Ignoring ramp-up and warm-upPessimistic averagesMeasure steady state
Forgetting timers when judging throughputCapacity underestimatedAccount for think time
Not saving the table or fileNo evidence afterwardsSave both, with dated names
Treating Max as always meaningfulPanic over one outlierCheck how often slow cases occur

36Real-World Examples

These are teaching illustrations of how teams typically use the report. They are not descriptions of any particular company’s practice.

A Pre-Sale Check for an Online Shop

A week before a big sale, the team runs a stepped test and reads the Summary Report after each step. They watch Throughput climb until it flattens and Error % begins to rise. The point where it flattens becomes their estimate of safe capacity, and they plan extra servers for the sale.

A Release Gate for an Internal API

Every release candidate is tested for ten minutes. The team saves the table and compares each row with the previous release. A rise in Average or a drop in Avg. Bytes on any label stops the release for investigation.

A Long Soak Test

A service is tested for twelve hours at steady load to catch slow leaks. The light Summary Report is ideal, since it will not exhaust memory. The team clears nothing, writes only errors to a file, and watches whether Average and Std. Dev. creep upward over the night.

A Capacity Question From a Manager

A manager asks, “Can we handle double the visitors?” The tester doubles users, runs again, and compares the Total throughput and Error % between the two tables. The tables show that throughput doubled while errors stayed at zero, so the answer is yes for that scenario.

A Teaching Lab

A trainer shows students a small test against a practice site. The Summary Report is chosen because its eleven columns can be explained in one lesson, and students can watch the numbers change as they add users.

37Troubleshooting the Report

When the table looks strange, the cause is usually one of a few familiar suspects.

SymptomLikely CauseWhat To Do
Table stays emptyListener placed under the wrong branch, or the test did not startMove the listener to the Test Plan level and check the test is running
Fewer rows than requestsSeveral samplers share the same nameRename each sampler
Hundreds of one-sample rowsChanging values inside labelsUse fixed names
Numbers look too goodFailures hidden behind success codes, or no assertionsAdd content assertions and read Avg. Bytes
Old numbers mixed with newTable not cleared, or results file appendedClear before each run and use fresh files
Throughput lower than expectedLong timers, too few users, slow responses, or an overloaded test machineReview pauses, user count, and generator health
Total sample count too highTransaction rows counted beside their requestsRead the transaction rows apart or use the parent sample setting
Max is a round numberA timeout is being reachedCheck timeout settings and server behaviour
Average much lower than expectedFast failures are includedLook at Error % and bytes
Interface becomes slowLarge test in graphical modeSwitch to command line mode
Saved table missing detailsTable save holds only summary numbersAlso save the raw results file

A Calm Way to Investigate

Repeat the problem with one user and a small number of loops. Open a debugging listener to see the real requests and responses. Change one thing at a time and write down what changed. When the strange behaviour disappears, you know which change fixed it.

38Terms People Often Confuse

Several pairs of ideas sound alike and mean different things. Separating them removes a lot of confusion.

Pair

Response Time vs Throughput

Response time is how long one request takes. Throughput is how many requests finish per second. A system can have fast responses and low throughput if few requests arrive.

Pair

Average vs Median

The average adds everything and divides. The median is the middle value. Extreme values pull the average but barely move the median. The Summary Report shows the average only.

Pair

Error % vs Error Count

The percentage is the share of failures in the row. A count of ten errors can be tiny among a million samples or huge among twenty.

Pair

Latency vs Response Time

Latency is the time until the first byte arrives. Response time includes the full download. The Summary Report shows response time.

Pair

Sample vs Request

A sample is the recorded result of a request. Embedded files and transactions can produce additional samples around one visible page.

Pair

Summary Report vs Summariser

The report is a listener with a table. The summariser is a small helper that prints progress lines to the console, even in command line mode.

Pair

KB/sec vs Kbit/sec

Kilobytes are about eight times larger than kilobits. Network speeds are often quoted in bits, so convert before comparing.

Pair

Std. Dev. vs Max

Max is a single extreme sample. Standard deviation summarises how scattered all samples are. A big Max with a small standard deviation means a rare outlier.

i
Pro Tip

When two words seem to mean the same thing, write down which one you are using in the report and what it means. Clear terms prevent arguments in review meetings.

39A Case Study: The Fast Test That Fooled Everyone

This is a composed story built to teach. It is an illustration, not an account of a real team.

The Situation

A team tested a new ticket-booking service before launch. After the run, the Summary Report looked beautiful: an average of 180 milliseconds, a maximum under two seconds, and an error rate of exactly zero. They reported success and planned a launch party.

The Doubt

A colleague who had read the table carefully noticed the Avg. Bytes column. The booking confirmation request averaged only 450 bytes. The test environment had shown a confirmation page of about 12,000 bytes during the baseline run with one user. Something was wrong, but the error column said zero.

The Investigation

1

Replay With Few Users

They ran ten users and opened the View Results Tree. The confirmation response was a short “Service busy, try again” message with a success code.

2

Add a Positive Assertion

They added a check for the confirmation phrase on the booking step.

3

Rerun at Full Load

The same load now showed a high error rate on the booking step, clearly separated from other rows.

4

Fix and Retest

After the developers raised a connection limit, the confirmation size returned to normal and the error rate fell to zero, this time for real.

The Lesson

The original speed was real, but it was the speed of delivering a busy message. A single quiet column exposed it. The table was not wrong; it was incomplete, because nobody had told the test what a good answer looked like.

A small number in the Avg. Bytes column can be louder than a thousand lines of logs.

40Using the Report in Automated Pipelines

When tests run on their own after each change, the summary numbers become a gatekeeper.

The Pipeline Picture

Automated pipelines run JMeter in command line mode. Nobody sees a table on a screen. The run writes a results file, and later steps read it. Many teams also let the run produce the HTML dashboard report, which includes percentiles and graphs, and attach it to the build.

Turning Numbers Into a Decision

  • Pick a few guard numbers. For example, overall Error %, the Average of key requests, and Throughput.
  • Agree on limits. Based on past runs, not on hopeful guesses.
  • Compare with the previous run. A change of more than a set percentage marks the build for review.
  • Fail the step loudly. If a limit is crossed, the pipeline should stop and name which number crossed which limit.
  • Keep the history. Store the numbers from each run so trends can be seen over weeks.

Practical Advice

  • Keep pipeline tests short and focused, with a modest steady load.
  • Run longer tests on a schedule, such as nightly.
  • Use a stable, dedicated environment so neighbours do not cause false alarms.
  • Treat a failing run as a real signal first and as noise only after investigation.
  • Pass user counts, durations, and limits through properties so one plan works in every environment.
Everyday Analogy

A smoke detector does not wait for a person to look at it. It sounds on its own. Guard numbers in a pipeline are the smoke detectors of your delivery process, and their value depends on being sensitive enough to notice smoke but not so jumpy that people learn to ignore them.

41Comparing Two Runs Fairly

The most useful thing a Summary Report can do is show whether something got better or worse. That requires a fair comparison.

What Must Stay the Same

  • The plan. The same requests in the same order, with the same assertions.
  • The load. The same user count, ramp-up, pauses, and duration.
  • The data. Similar volumes and kinds of test data.
  • The environment. The same servers, sizes, and settings, with no other heavy work running.
  • The load generator. The same machine type, and healthy in both runs.

What To Compare

ColumnGood SignWarning Sign
# SamplesClose to the previous runLarge difference with no plan change
AverageSame or lowerNoticeably higher on any label
Std. Dev.Same or lowerMuch higher, meaning less steady
Error %Same or lowerAny new errors on a label
ThroughputSame or higher for the same loadLower while users were the same
Avg. BytesSameSudden drop or rise

Allow for Natural Variation

Two runs of the same test never give identical numbers. Network noise, background work, and random timing all cause small differences. Learn how much your numbers normally wobble by repeating a test three times, and treat only larger changes as real.

42Quick Reference

A one-page reminder for the next time you are in a hurry.

ColumnAsk YourselfBeware
LabelIs each step its own row?Shared or changing names
# SamplesDoes it match the plan?Small counts give weak evidence
AverageWithin the goal?Hides spread and includes fast failures
MinIs it realistic?Tiny values from failed requests
MaxIs it a rare outlier or a pattern?Round numbers suggest timeouts
Std. Dev.Is it steady?Large against the average means erratic
Error %Is it honest?False zero without assertions
ThroughputDid we reach the target rate?Timers and ramp phases change it
Received and Sent KB/secIs the network close to its limit?Bytes versus bits
Avg. BytesIs it like the baseline?A drop can signal silent errors
TOTALOverall error and rateBlended average and double counting
11
columns in the table
1
row per label, plus Total
0
percentiles in this report

43Glossary of Terms

Plain-language meanings of the words used in this guide.

TermMeaning
Summary ReportA listener that shows one row of statistics per label plus a Total row.
ListenerAn element that receives and shows or saves test results.
SamplerThe element that sends a request and records the result.
SampleOne recorded request and response.
LabelThe name of a request, used to group samples into rows.
Thread GroupThe element that defines how many virtual users run and how.
Virtual userA thread that behaves like one visitor.
MillisecondOne thousandth of a second.
AverageThe total time divided by the number of samples.
Standard deviationA measure of how scattered the times are around the average.
PercentileThe time below which a given share of requests finished.
ThroughputThe number of requests completed per unit of time.
Error percentageThe share of samples that failed.
AssertionA check that decides whether a response was correct.
TimerAn element that pauses a virtual user before a request.
Think timeThe pause that imitates a person reading or deciding.
Ramp-upThe period in which users are added gradually.
Steady stateThe period of full, stable load.
Transaction ControllerA grouping of requests into one named business step.
Aggregate ReportA related listener that also shows median and percentiles.
Non-GUI modeRunning JMeter from a command line without its windows.
Load generatorThe machine that runs JMeter and creates the load.
BaselineA reference measurement used for comparison.

44A Checklist Before and After Every Important Run

Pilots read a checklist before every flight, however experienced they are. A short list protects a test run in the same way.

Before You Press Start

  • Every request has a clear, unique, stable name.
  • Important steps have positive assertions.
  • The listener is at the right level and the table is cleared.
  • A fresh, dated results file is set with sensible fields and no secrets.
  • Baseline numbers exist from a run with one user.
  • The load is planned. Users, ramp-up, pauses, and duration are written down.
  • The big run uses command line mode with heavy listeners off.
  • The load generator and server are monitored.
  • The target is permitted and the people who run it have been told.

After the Run

  • Read in order: counts, errors, throughput, speed, and bytes.
  • Check server and generator health for the same period.
  • Save the table, the raw file, and notes together.
  • Compare with the previous run, allowing for normal variation.
  • Write the conclusion in one clear paragraph with numbers.
i
Pro Tip

Paste this checklist into your team’s notes and tick it for each important run. A habit that takes two minutes can save a day of arguing about numbers that turn out to be meaningless.

45Finding the Limit: Capacity From Several Tables

One table describes one load. Several tables, taken at rising loads, reveal where a system starts to struggle.

The Stepped Approach

Run the same test several times with more users each time, for example twenty, forty, sixty, and eighty. Clear the table before each run, and save each table with a clear name. Then place the Total rows side by side. The pattern across the rows is far more informative than any single table.

UsersThroughputAverageError %What It Says
2010/sec200 ms0.0%Comfortable
4020/sec210 ms0.0%Rate doubled, speed steady
6027/sec380 ms0.2%Rate grows slower, speed worsens, first errors
8028/sec900 ms4.0%Rate has flattened, system saturated

These numbers are invented to show the shape. Notice that adding users from sixty to eighty added almost no throughput, but speed collapsed and errors appeared. The knee of the curve, somewhere between forty and sixty users, is the practical capacity of this scenario.

Why the Shape Matters

  • Linear growth. While throughput rises in step with users, the system has spare room.
  • The bend. When throughput grows more slowly than users, queues are starting to form.
  • The plateau. When throughput stops growing, the system is saturated and extra users only wait longer.
  • The collapse. Past the plateau, errors rise and sometimes throughput itself falls.
Everyday Analogy

A motorway carries more cars per hour as more cars join, until it fills up. After that, adding cars makes everyone slower and sometimes reduces the number that get through. The stepped test finds the point where the motorway is full.

!
Important

Keep a safety margin. Running a production system at the exact edge leaves no room for sudden bursts, so plan to operate well below the measured limit.

46Explaining the Report to People Who Are Not Testers

Managers, product owners, and customers care about outcomes, not columns. Translating the table is part of the job.

From Column to Plain Sentence

ColumnPlain Sentence
# Samples“We simulated this many actions.”
Average“A typical action took about this long.”
Max“The slowest single action took this long.”
Std. Dev.“Times were steady,” or “times were uneven.”
Error %“This share of actions failed.”
Throughput“The system completed this many actions every second.”
Avg. Bytes“Each answer was about this size, as expected,” or “unusually small, which we are checking.”

Tell a Short Story

People remember stories better than tables. A good summary has three parts: what we tested, what we found, and what we recommend. For example: “We simulated two hundred shoppers for twenty minutes. Everything was fast and reliable until about one hundred and fifty shoppers, when payments began to slow and fail. We recommend fixing the payment connection limit before the sale.”

Be Honest About Limits

  • Say which scenario was tested, and which was not.
  • Say that the test environment may differ from production.
  • Say when a number comes from a short run and may vary.
  • Avoid false precision. “About one second” is better than “1,003.7 milliseconds” when the number wobbles between runs.

Attach Evidence

Keep the saved table and the raw results file available. If anyone doubts a conclusion, you can reopen the evidence and show how the numbers were found. Trust in test results grows when the work can be inspected.

47Frequently Asked Questions

Q1What is the difference between the Summary Report and the Aggregate Report?

The Summary Report keeps light running totals and shows standard deviation and data sizes. The Aggregate Report keeps response times so it can show the median and percentile lines, and so it uses more memory.

Q2Why is there no 95th percentile in the Summary Report?

Percentiles need the actual response times to be remembered and sorted. The Summary Report forgets each sample after updating its totals, which is why it stays light.

Q3Can I use the Summary Report in command line mode?

It has no screen to draw on there, but you can save a results file during the run and open it in the report afterwards. A console summariser also prints progress lines during the run.

Q4Why does my Total row show a higher sample count than my requests?

Transaction rows are counted beside the requests inside them. The Total adds both, so the count looks inflated.

Q5My Error % is zero but users complain. Why?

Probably no assertions exist, so error pages with success codes count as successes. Add content checks and look at Avg. Bytes for sudden changes.

Q6Does the average include think time?

No. Timers pause before the sampler starts, so the pause is not part of the measured response time. It does lower the throughput, though.

Q7How should I handle warm-up?

Run a short warm-up first, clear the table, and measure during steady state. Or save raw results and analyse only the steady window.

Q8Is the table saved automatically?

No. Use the save table button for the table, and set a filename on the listener to save raw samples.

Q9Why do I see so many rows with one sample each?

Request names probably contain changing values, such as ids or times. Use fixed names so samples group together.

Q10Can the Summary Report show graphs?

No. For graphs, use the HTML dashboard report generated from a results file, a backend listener with an external dashboard, or the graph listeners for small tests.

Q11What is a good Std. Dev.?

It depends on your goals, but a value much smaller than the average means steady behaviour, while one as large as the average means very uneven times.

Q12Should I always read the Total row first?

Read it for overall error rate and throughput, but check each row before trusting the Total average, which blends different requests.

48Summary and Key Takeaways

The Summary Report is the scoreboard of a JMeter test: eleven columns, one row per label, and a Total. It is light, quick, and honest only when the test behind it is honest.

  • The Summary Report keeps small running totals instead of every sample, which makes it light enough for long tests.
  • Read the table in order: counts, Error %, throughput, speed, then bytes, and never trust speed before errors are understood.
  • Average alone misleads. Read it beside Min, Max, and Std. Dev., and use the Aggregate Report or dashboard for percentiles.
  • A zero error rate is only as honest as your assertions, and a sudden drop in Avg. Bytes can reveal silent failures.
  • Clear labels decide the quality of the report: unique, stable, ordered, and free of changing values and secrets.
  • Run big tests in command line mode, save raw results with dated names, and clear the table between runs.
  • Compare against a baseline, watch server and generator health beside the table, and test only systems you are allowed to test.