Skip to content

Commit

Permalink
Fix Regression in Full History CSV Percentiles (#1873)
Browse files Browse the repository at this point in the history
* full history CSV should use current percentile

Fixes a regression that I believe was introduced in August 18th, 2020. Before then, the full history CSV used current percentiles (starting from December 3rd, 2019).

* Sanity Check

* Debugging logs...

* Remove Sanity Checks from UI

* Remove sanity/debug print statements

* Revert <br> that I accidentally left in.

* Formatting change to appease tox.

* Update unit test to demonstrate fix and prevent future regressions.
  • Loading branch information
TaylorSMarks committed Sep 4, 2021
1 parent 610b3c1 commit bdf5943
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
15 changes: 8 additions & 7 deletions locust/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -842,12 +842,13 @@ def __init__(self, environment, percentiles_to_report):
"Nodes",
]

def _percentile_fields(self, stats_entry):
return (
[int(stats_entry.get_response_time_percentile(x) or 0) for x in self.percentiles_to_report]
if stats_entry.num_requests
else self.percentiles_na
)
def _percentile_fields(self, stats_entry, use_current=False):
if not stats_entry.num_requests:
return self.percentiles_na
elif use_current:
return [int(stats_entry.get_current_response_time_percentile(x) or 0) for x in self.percentiles_to_report]
else:
return [int(stats_entry.get_response_time_percentile(x) or 0) for x in self.percentiles_to_report]

def requests_csv(self, csv_writer):
"""Write requests csv with header and data rows."""
Expand Down Expand Up @@ -1012,7 +1013,7 @@ def _stats_history_data_rows(self, csv_writer, now):
f"{stats_entry.current_rps:2f}",
f"{stats_entry.current_fail_per_sec:2f}",
),
self._percentile_fields(stats_entry),
self._percentile_fields(stats_entry, use_current=self.full_history),
(
stats_entry.num_requests,
stats_entry.num_failures,
Expand Down
29 changes: 27 additions & 2 deletions locust/test/test_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,8 +377,18 @@ def test_csv_stats_writer_full_history(self):
stats_writer = StatsCSVFileWriter(
self.environment, PERCENTILES_TO_REPORT, self.STATS_BASE_NAME, full_history=True
)
self.runner.stats.log_request("GET", "/", 10, content_length=666)

for i in range(10):
self.runner.stats.log_request("GET", "/", 100, content_length=666)

greenlet = gevent.spawn(stats_writer)
gevent.sleep(10)

for i in range(10):
self.runner.stats.log_request("GET", "/", 10, content_length=666)

gevent.sleep(5)

gevent.sleep(_TEST_CSV_STATS_INTERVAL_WAIT_SEC)
gevent.kill(greenlet)
stats_writer.close_files()
Expand All @@ -392,11 +402,26 @@ def test_csv_stats_writer_full_history(self):
reader = csv.DictReader(f)
rows = [r for r in reader]

self.assertEqual(4, len(rows))
self.assertGreaterEqual(len(rows), 130)

self.assertEqual("/", rows[0]["Name"])
self.assertEqual("Aggregated", rows[1]["Name"])
self.assertEqual("/", rows[2]["Name"])
self.assertEqual("Aggregated", rows[3]["Name"])
self.assertEqual("20", rows[-1]["Total Request Count"])

saw100 = False
saw10 = False

for row in rows:
if not saw100 and row["95%"] == "100":
saw100 = True
elif saw100 and row["95%"] == "10":
saw10 = True
break

self.assertTrue(saw100, "Never saw 95th percentile increase to 100")
self.assertTrue(saw10, "Never saw 95th percentile decrease to 10")

def test_csv_stats_on_master_from_aggregated_stats(self):
# Failing test for: https://github.com/locustio/locust/issues/1315
Expand Down

0 comments on commit bdf5943

Please sign in to comment.