locust 2.14.3.dev29__py3-none-any.whl → 2.15.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of locust might be problematic. Click here for more details.

locust/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '2.14.3.dev29'
4
- __version_tuple__ = version_tuple = (2, 14, 3, 'dev29')
3
+ __version__ = version = '2.15.1'
4
+ __version_tuple__ = version_tuple = (2, 15, 1)
locust/env.py CHANGED
@@ -41,7 +41,6 @@ class Environment:
41
41
  available_user_classes: Optional[Dict[str, User]] = None,
42
42
  available_shape_classes: Optional[Dict[str, LoadTestShape]] = None,
43
43
  ):
44
-
45
44
  self.runner: Optional[Runner] = None
46
45
  """Reference to the :class:`Runner <locust.runners.Runner>` instance"""
47
46
 
locust/html.py CHANGED
@@ -4,6 +4,7 @@ import pathlib
4
4
  import datetime
5
5
  from itertools import chain
6
6
  from .stats import sort_stats
7
+ from . import stats as stats_module
7
8
  from .user.inspectuser import get_ratio
8
9
  from html import escape
9
10
  from json import dumps
@@ -94,6 +95,8 @@ def get_html_report(environment, show_download_link=True):
94
95
  show_download_link=show_download_link,
95
96
  locustfile=environment.locustfile,
96
97
  tasks=dumps(task_data),
98
+ percentile1=stats_module.PERCENTILES_TO_CHART[0],
99
+ percentile2=stats_module.PERCENTILES_TO_CHART[1],
97
100
  )
98
101
 
99
102
  return res
locust/main.py CHANGED
@@ -100,6 +100,24 @@ def main():
100
100
  user_classes[key] = value
101
101
  available_user_classes[key] = value
102
102
 
103
+ if len(stats.PERCENTILES_TO_CHART) != 2:
104
+ logging.error("stats.PERCENTILES_TO_CHART parameter should be 2 parameters \n")
105
+ sys.exit(1)
106
+
107
+ def is_valid_percentile(parameter):
108
+ try:
109
+ if 0 < float(parameter) < 1:
110
+ return True
111
+ return False
112
+ except ValueError:
113
+ return False
114
+
115
+ for percentile in stats.PERCENTILES_TO_CHART:
116
+ if not is_valid_percentile(percentile):
117
+ logging.error(
118
+ "stats.PERCENTILES_TO_CHART parameter need to be float and value between. 0 < percentile < 1 Eg 0.95\n"
119
+ )
120
+ sys.exit(1)
103
121
  # parse all command line options
104
122
  options = parse_options()
105
123
 
@@ -160,7 +178,6 @@ def main():
160
178
  user_classes = list(user_classes.values())
161
179
 
162
180
  if os.name != "nt" and not options.master:
163
-
164
181
  try:
165
182
  import resource
166
183
 
@@ -180,6 +197,7 @@ See https://github.com/locustio/locust/wiki/Installation#increasing-maximum-numb
180
197
 
181
198
  # create locust Environment
182
199
  locustfile_path = None if not locustfile else os.path.basename(locustfile)
200
+
183
201
  environment = create_environment(
184
202
  user_classes,
185
203
  options,
locust/static/locust.js CHANGED
@@ -219,8 +219,8 @@ function update_stats_charts(){
219
219
  responseTimeChart.chart.setOption({
220
220
  xAxis: {data: stats_history["time"]},
221
221
  series: [
222
- {data: stats_history["response_time_percentile_50"], markLine: createMarkLine()},
223
- {data: stats_history["response_time_percentile_95"]},
222
+ {data: stats_history["response_time_percentile_1"], markLine: createMarkLine()},
223
+ {data: stats_history["response_time_percentile_2"]},
224
224
  ]
225
225
  });
226
226
 
@@ -235,7 +235,7 @@ function update_stats_charts(){
235
235
 
236
236
  // init charts
237
237
  var rpsChart = new LocustLineChart($(".charts-container"), "Total Requests per Second", ["RPS", "Failures/s"], "reqs/s", ['#00ca5a', '#ff6d6d']);
238
- var responseTimeChart = new LocustLineChart($(".charts-container"), "Response Times (ms)", ["Median Response Time", "95% percentile"], "ms");
238
+ var responseTimeChart = new LocustLineChart($(".charts-container"), "Response Times (ms)", [(percentile1 * 100).toString() + "th percentile" , (percentile2 * 100).toString() + "th percentile"], "ms");
239
239
  var usersChart = new LocustLineChart($(".charts-container"), "Number of Users", ["Users"], "users");
240
240
  charts.push(rpsChart, responseTimeChart, usersChart);
241
241
  echarts.connect([rpsChart.chart,responseTimeChart.chart,usersChart.chart])
@@ -264,8 +264,8 @@ function updateStats() {
264
264
  stats_history["user_count"].push({"value": null});
265
265
  stats_history["current_rps"].push({"value": null});
266
266
  stats_history["current_fail_per_sec"].push({"value": null});
267
- stats_history["response_time_percentile_50"].push({"value": null});
268
- stats_history["response_time_percentile_95"].push({"value": null});
267
+ stats_history["response_time_percentile_1"].push({"value": null});
268
+ stats_history["response_time_percentile_2"].push({"value": null});
269
269
  }
270
270
 
271
271
  // update stats chart to ensure the stop spacing appears as part
@@ -301,8 +301,8 @@ function updateStats() {
301
301
  stats_history["user_count"].push({"value": report.user_count});
302
302
  stats_history["current_rps"].push({"value": total.current_rps, "users": report.user_count});
303
303
  stats_history["current_fail_per_sec"].push({"value": total.current_fail_per_sec, "users": report.user_count});
304
- stats_history["response_time_percentile_50"].push({"value": report.current_response_time_percentile_50, "users": report.user_count});
305
- stats_history["response_time_percentile_95"].push({"value": report.current_response_time_percentile_95, "users": report.user_count});
304
+ stats_history["response_time_percentile_1"].push({"value": report.current_response_time_percentile_1, "users": report.user_count});
305
+ stats_history["response_time_percentile_2"].push({"value": report.current_response_time_percentile_2, "users": report.user_count});
306
306
  update_stats_charts();
307
307
 
308
308
  } catch(i){
locust/stats.py CHANGED
@@ -133,6 +133,8 @@ CachedResponseTimes = namedtuple("CachedResponseTimes", ["response_times", "num_
133
133
 
134
134
  PERCENTILES_TO_REPORT = [0.50, 0.66, 0.75, 0.80, 0.90, 0.95, 0.98, 0.99, 0.999, 0.9999, 1.0]
135
135
 
136
+ PERCENTILES_TO_CHART = [0.50, 0.95]
137
+
136
138
 
137
139
  class RequestStatsAdditionError(Exception):
138
140
  pass
@@ -888,8 +890,10 @@ def stats_history(runner: "Runner") -> None:
888
890
  "time": datetime.datetime.now(tz=datetime.timezone.utc).strftime("%H:%M:%S"),
889
891
  "current_rps": stats.total.current_rps or 0,
890
892
  "current_fail_per_sec": stats.total.current_fail_per_sec or 0,
891
- "response_time_percentile_95": stats.total.get_current_response_time_percentile(0.95) or 0,
892
- "response_time_percentile_50": stats.total.get_current_response_time_percentile(0.5) or 0,
893
+ "response_time_percentile_1": stats.total.get_current_response_time_percentile(PERCENTILES_TO_CHART[0])
894
+ or 0,
895
+ "response_time_percentile_2": stats.total.get_current_response_time_percentile(PERCENTILES_TO_CHART[1])
896
+ or 0,
893
897
  "user_count": runner.user_count or 0,
894
898
  }
895
899
  stats.history.append(r)
@@ -180,7 +180,7 @@
180
180
  <tr>
181
181
  <th class="stats_label" href="#" data-sortkey="method">Type</th>
182
182
  <th class="stats_label" href="#" data-sortkey="name">Name</th>
183
- <th class="stats_label numeric nowrap" href="#" data-sortkey="num_requests" title="Number of successful requests"># Requests</th>
183
+ <th class="stats_label numeric nowrap" href="#" data-sortkey="num_requests" title="Number of requests"># Requests</th>
184
184
  <th class="stats_label numeric nowrap" href="#" data-sortkey="num_failures" title="Number of failures"># Fails</th>
185
185
  <th class="stats_label numeric" href="#" data-sortkey="median_response_time" title="Median response time">Median (ms)</th>
186
186
  <th class="stats_label numeric" href="#" data-sortkey="ninetieth_response_time" title="Ninetieth percentile response time, because the response time greater than 100ms is rounded, you may see it greater than the max response time">90%ile (ms)</th>
@@ -357,6 +357,8 @@
357
357
  ]]>
358
358
  </script>
359
359
  <script type="text/javascript">
360
+ var percentile1 = {{ percentile1|tojson }};
361
+ var percentile2 = {{ percentile2|tojson }};
360
362
  {% include 'stats_data.html' %}
361
363
  </script>
362
364
  <script type="text/javascript" src="./static/chart.js?v={{ version }}"></script>
@@ -198,8 +198,10 @@
198
198
 
199
199
  <script>
200
200
  {% include 'stats_data.html' %}
201
+ var percentile1 = {{ percentile1|tojson }}
202
+ var percentile2 = {{ percentile2|tojson }}
201
203
  var rpsChart = new LocustLineChart($(".charts-container"), "Total Requests per Second", ["RPS", "Failures/s"], "reqs/s", ['#00ca5a', '#ff6d6d']);
202
- var responseTimeChart = new LocustLineChart($(".charts-container"), "Response Times (ms)", ["Median Response Time", "95% percentile"], "ms");
204
+ var responseTimeChart = new LocustLineChart($(".charts-container"), "Response Times (ms)", [(percentile1*100).toString() + "th percentile" , (percentile2*100).toString() + "th percentile"], "ms");
203
205
  var usersChart = new LocustLineChart($(".charts-container"), "Number of Users", ["Users"], "users");
204
206
 
205
207
  if(stats_history["time"].length > 0){
@@ -214,8 +216,8 @@
214
216
  responseTimeChart.chart.setOption({
215
217
  xAxis: {data: stats_history["time"]},
216
218
  series: [
217
- {data: stats_history["response_time_percentile_50"]},
218
- {data: stats_history["response_time_percentile_95"]},
219
+ {data: stats_history["response_time_percentile_1"]},
220
+ {data: stats_history["response_time_percentile_2"]},
219
221
  ]
220
222
  });
221
223
 
@@ -1,10 +1,10 @@
1
- {% set time_data = [] %}{% set user_count_data = [] %}{% set current_rps_data = [] %}{% set current_fail_per_sec_data = [] %}{% set response_time_percentile_50_data = [] %}{% set response_time_percentile_95_data = [] %}{% for r in history %}{% do time_data.append(r.time) %}{% do user_count_data.append({"value": r.user_count}) %}{% do current_rps_data.append({"value": r.current_rps, "users": r.user_count}) %}{% do current_fail_per_sec_data.append({"value": r.current_fail_per_sec, "users": r.user_count}) %}{% do response_time_percentile_50_data.append({"value": r.response_time_percentile_50, "users": r.user_count}) %}{% do response_time_percentile_95_data.append({"value": r.response_time_percentile_95, "users": r.user_count}) %}{% endfor %}
1
+ {% set time_data = [] %}{% set user_count_data = [] %}{% set current_rps_data = [] %}{% set current_fail_per_sec_data = [] %}{% set response_time_percentile_2_data = [] %}{% set response_time_percentile_1_data = [] %}{% for r in history %}{% do time_data.append(r.time) %}{% do user_count_data.append({"value": r.user_count}) %}{% do current_rps_data.append({"value": r.current_rps, "users": r.user_count}) %}{% do current_fail_per_sec_data.append({"value": r.current_fail_per_sec, "users": r.user_count}) %}{% do response_time_percentile_2_data.append({"value": r.response_time_percentile_2, "users": r.user_count}) %}{% do response_time_percentile_1_data.append({"value": r.response_time_percentile_1, "users": r.user_count}) %}{% endfor %}
2
2
  var stats_history = {
3
3
  "time": {{ time_data | tojson }}.map(server_time => new Date(new Date().setUTCHours(...(server_time.split(":")))).toLocaleTimeString()),
4
4
  "user_count": {{ user_count_data | tojson }},
5
5
  "current_rps": {{ current_rps_data | tojson }},
6
6
  "current_fail_per_sec": {{ current_fail_per_sec_data | tojson }},
7
- "response_time_percentile_50": {{ response_time_percentile_50_data | tojson }},
8
- "response_time_percentile_95": {{ response_time_percentile_95_data | tojson }},
7
+ "response_time_percentile_1": {{ response_time_percentile_1_data | tojson }},
8
+ "response_time_percentile_2": {{ response_time_percentile_2_data | tojson }},
9
9
  "markers": [],
10
10
  };
@@ -3555,7 +3555,6 @@ class TestRampUpUsersFromZeroWithFixed(unittest.TestCase):
3555
3555
  [(1, 1, 1, 1, 1), (200, 0, 0, 0, 0)],
3556
3556
  [(1, 1, 1, 1, 1), (0, 0, 0, 0, 0)],
3557
3557
  ]:
3558
-
3559
3558
  u1_weight, u2_weight, u3_weight, u4_weight, u5_weight = weights
3560
3559
  u1_fixed_count, u2_fixed_count, u3_fixed_count, u4_fixed_count, u5_fixed_count = fixed_counts
3561
3560
 
@@ -3589,7 +3588,6 @@ class TestRampUpUsersFromZeroWithFixed(unittest.TestCase):
3589
3588
 
3590
3589
  for down_to_count in down_counts:
3591
3590
  for target_user_count in target_user_counts:
3592
-
3593
3591
  # Ramp-up to go to `target_user_count` #########
3594
3592
 
3595
3593
  users_dispatcher.new_dispatch(target_user_count=target_user_count, spawn_rate=1)
locust/test/test_main.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import os
3
3
  import platform
4
+
4
5
  import pty
5
6
  import signal
6
7
  import subprocess
@@ -191,6 +192,54 @@ class StandaloneIntegrationTests(ProcessIntegrationTest):
191
192
  self.assertIn("Shutting down (exit code 0)", stderr)
192
193
  self.assertEqual(0, proc.returncode)
193
194
 
195
+ def test_percentile_parameter(self):
196
+ port = get_free_tcp_port()
197
+ with temporary_file(
198
+ content=textwrap.dedent(
199
+ """
200
+ from locust import User, task, constant, events
201
+ from locust.stats import PERCENTILES_TO_CHART
202
+ PERCENTILES_TO_CHART[0] = 0.9
203
+ PERCENTILES_TO_CHART[1] = 0.4
204
+ class TestUser(User):
205
+ wait_time = constant(3)
206
+ @task
207
+ def my_task(self):
208
+ print("running my_task()")
209
+ """
210
+ )
211
+ ) as file_path:
212
+ proc = subprocess.Popen(
213
+ ["locust", "-f", file_path, "--web-port", str(port), "--autostart"], stdout=PIPE, stderr=PIPE, text=True
214
+ )
215
+ gevent.sleep(1)
216
+ response = requests.get(f"http://localhost:{port}/")
217
+ self.assertEqual(200, response.status_code)
218
+ proc.send_signal(signal.SIGTERM)
219
+ stdout, stderr = proc.communicate()
220
+ self.assertIn("Starting web interface at", stderr)
221
+
222
+ def test_invalid_percentile_parameter(self):
223
+ with temporary_file(
224
+ content=textwrap.dedent(
225
+ """
226
+ from locust import User, task, constant, events
227
+ from locust.stats import PERCENTILES_TO_CHART
228
+ PERCENTILES_TO_CHART[0] = 1.2
229
+ class TestUser(User):
230
+ wait_time = constant(3)
231
+ @task
232
+ def my_task(self):
233
+ print("running my_task()")
234
+ """
235
+ )
236
+ ) as file_path:
237
+ proc = subprocess.Popen(["locust", "-f", file_path, "--autostart"], stdout=PIPE, stderr=PIPE, text=True)
238
+ gevent.sleep(1)
239
+ stdout, stderr = proc.communicate()
240
+ self.assertIn("parameter need to be float and value between. 0 < percentile < 1 Eg 0.95", stderr)
241
+ self.assertEqual(1, proc.returncode)
242
+
194
243
  def test_webserver_multiple_locustfiles(self):
195
244
  with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_A) as mocked1:
196
245
  with mock_locustfile(content=MOCK_LOCUSTFILE_CONTENT_B) as mocked2:
locust/web.py CHANGED
@@ -3,6 +3,7 @@ import csv
3
3
  import logging
4
4
  import os.path
5
5
  from functools import wraps
6
+
6
7
  from html import escape
7
8
  from io import StringIO
8
9
  from json import dumps
@@ -339,8 +340,8 @@ class WebUI:
339
340
  "errors": errors,
340
341
  "total_rps": 0.0,
341
342
  "fail_ratio": 0.0,
342
- "current_response_time_percentile_95": None,
343
- "current_response_time_percentile_50": None,
343
+ "current_response_time_percentile_1": None,
344
+ "current_response_time_percentile_2": None,
344
345
  "state": STATE_MISSING,
345
346
  "user_count": 0,
346
347
  }
@@ -388,11 +389,15 @@ class WebUI:
388
389
  report["total_rps"] = stats[len(stats) - 1]["current_rps"]
389
390
  report["fail_ratio"] = environment.runner.stats.total.fail_ratio
390
391
  report[
391
- "current_response_time_percentile_95"
392
- ] = environment.runner.stats.total.get_current_response_time_percentile(0.95)
392
+ "current_response_time_percentile_1"
393
+ ] = environment.runner.stats.total.get_current_response_time_percentile(
394
+ stats_module.PERCENTILES_TO_CHART[0]
395
+ )
393
396
  report[
394
- "current_response_time_percentile_50"
395
- ] = environment.runner.stats.total.get_current_response_time_percentile(0.5)
397
+ "current_response_time_percentile_2"
398
+ ] = environment.runner.stats.total.get_current_response_time_percentile(
399
+ stats_module.PERCENTILES_TO_CHART[1]
400
+ )
396
401
 
397
402
  if isinstance(environment.runner, MasterRunner):
398
403
  workers = []
@@ -555,6 +560,8 @@ class WebUI:
555
560
  "show_userclass_picker": self.userclass_picker_is_active,
556
561
  "available_user_classes": available_user_classes,
557
562
  "available_shape_classes": available_shape_classes,
563
+ "percentile1": stats_module.PERCENTILES_TO_CHART[0],
564
+ "percentile2": stats_module.PERCENTILES_TO_CHART[1],
558
565
  }
559
566
 
560
567
  def _update_shape_class(self, shape_class_name):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.14.3.dev29
3
+ Version: 2.15.1
4
4
  Summary: Developer friendly load testing framework
5
5
  Home-page: https://locust.io/
6
6
  License: MIT
@@ -44,13 +44,13 @@ Requires-Dist: pywin32 ; platform_system == "Windows"
44
44
 
45
45
  # Locust
46
46
 
47
- [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)
48
47
  [![PyPI](https://img.shields.io/pypi/v/locust.svg)](https://pypi.org/project/locust/)
49
48
  [![PyPI](https://img.shields.io/pypi/pyversions/locust.svg)](https://pypi.org/project/locust/)
50
49
  [![Build Status](https://github.com/locustio/locust/workflows/Tests/badge.svg)](https://github.com/locustio/locust/actions?query=workflow%3ATests)
51
50
  [![codecov](https://codecov.io/gh/locustio/locust/branch/master/graph/badge.svg)](https://codecov.io/gh/locustio/locust)
52
51
  [![license](https://img.shields.io/github/license/locustio/locust.svg)](https://github.com/locustio/locust/blob/master/LICENSE)
53
52
  [![GitHub contributors](https://img.shields.io/github/contributors/locustio/locust.svg)](https://github.com/locustio/locust/graphs/contributors)
53
+ [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)
54
54
 
55
55
  Locust is an easy to use, scriptable and scalable performance testing tool. You define the behaviour of your users in regular Python code, instead of being constrained by a UI or domain specific language that only pretends to be real code. This makes Locust infinitely expandable and very developer friendly.
56
56
 
@@ -98,7 +98,12 @@ Even though Locust primarily works with web sites/services, it can be used to te
98
98
 
99
99
  ## Hackable
100
100
 
101
- Locust's code base is intentionally kept small and doesn't solve everything out of the box. Instead, we try to make it easy to adapt to any situation you may come across, using regular Python code. If you want to [send reporting data to that database & graphing system you like](https://github.com/SvenskaSpel/locust-plugins/blob/master/locust_plugins/dashboards/README.md), [wrap calls to a REST API](https://github.com/SvenskaSpel/locust-plugins/blob/master/examples/rest_ex.py) to handle the particulars of your system or run a [totally custom load pattern](https://docs.locust.io/en/latest/custom-load-shape.html#custom-load-shape), there is nothing stopping you!
101
+ Locust's code base is intentionally kept small and doesn't solve everything out of the box. Instead, we try to make it easy to adapt to any situation you may come across, using regular Python code. There is nothing stopping you from:
102
+
103
+ * [Send real time reporting data to TimescaleDB and visualize it in Grafana](https://github.com/SvenskaSpel/locust-plugins/blob/master/locust_plugins/dashboards/README.md)
104
+ * [Wrap calls to handle the peculiarities of your REST API](https://github.com/SvenskaSpel/locust-plugins/blob/8af21862d8129a5c3b17559677fe92192e312d8f/examples/rest_ex.py#L87)
105
+ * [Use a totally custom load shape/profile](https://docs.locust.io/en/latest/custom-load-shape.html#custom-load-shape)
106
+ * ...
102
107
 
103
108
  ## Links
104
109
 
@@ -110,7 +115,7 @@ Locust's code base is intentionally kept small and doesn't solve everything out
110
115
 
111
116
  ## Authors
112
117
 
113
- * [Carl Bystr](http://cgbystrom.com) ([@cgbystrom](https://twitter.com/cgbystrom) on Twitter)
118
+ * [Carl Byström](http://cgbystrom.com) ([@cgbystrom](https://twitter.com/cgbystrom) on Twitter)
114
119
  * [Jonatan Heyman](http://heyman.info) ([@jonatanheyman](https://twitter.com/jonatanheyman) on Twitter)
115
120
  * [Joakim Hamrén](https://github.com/Jahaja) ([@Jahaaja](https://twitter.com/Jahaaja) on Twitter)
116
121
  * [Hugo Heyman](https://github.com/HeyHugo) ([@hugoheyman](https://twitter.com/hugoheyman) on Twitter)
@@ -1,22 +1,22 @@
1
1
  locust/__init__.py,sha256=GH3U2BoGyBrW1qenMoESLLbniRx1dqEefV9yIdaQ7hI,1339
2
2
  locust/__main__.py,sha256=vBQ82334kX06ImDbFlPFgiBRiLIinwNk3z8Khs6hd74,31
3
- locust/_version.py,sha256=omYE80GGEwwuD3fydemKqgUYwS8KX4hB1mRAIot6qGU,177
3
+ locust/_version.py,sha256=kh9KcDYIWPLC66e4OP2w-Irrfpn6Go_B9dkm8nL5f2g,162
4
4
  locust/argument_parser.py,sha256=ErDBcMRWizvfdeutPEZ186_sKZ5r_n34apj1j3X0hJc,24588
5
5
  locust/clients.py,sha256=GJXTWcyBAepE6O-o-V92WboV8XKOXxWR-AixlcL74_w,14768
6
6
  locust/debug.py,sha256=uzeqlIjqEXZXXm3vUy1sCnuqLB_2S3T__TrG1grNuTU,4709
7
7
  locust/dispatch.py,sha256=ujZ5-26V4-CIKtWrNtaIWKargiIZv82ZVL1h6smjDgI,18715
8
- locust/env.py,sha256=bc4XgHlyHRkvn85eSbwltni6tgCQx1Hz15maVbdUW7s,11342
8
+ locust/env.py,sha256=b5tcjig2NApNCcfeQc-VswnpEb4IkRBH9aeUIy_IWwU,11341
9
9
  locust/event.py,sha256=Ps23cUef06dcfLX-6f_1kgYqPJuyD77XH2rV-dj9kMA,5926
10
10
  locust/exception.py,sha256=aGCx5TQmkYZn8P_uDD3Z4ZwxxRoA7R3ml0WJO-nHgFQ,1942
11
- locust/html.py,sha256=I82wK6_4EAFHakYu5qTGzbBb0tmU9ogITIj3PtNz3NA,3423
11
+ locust/html.py,sha256=yV6exRC6d07WJjmrnGGBMiSIGQH26j9J5vGBZzCswcI,3575
12
12
  locust/input_events.py,sha256=ARmzf5K_t4OnsNilkx0adDnNqvU9-NxtQvKOOjwgA_A,3048
13
13
  locust/log.py,sha256=ZOI4BujbYn1le4x0iy4ErP_oMn7GdG1Fcs9eLWukPNc,2773
14
- locust/main.py,sha256=6BYyzTOOKF-eM7LgrwXJqt3Ga7_k8toc3Sdvbcw8G8A,19164
14
+ locust/main.py,sha256=ayrbYnuVcnG3fT7jNo1SPb8liV0YAZx9NOh59CA9dM8,19801
15
15
  locust/py.typed,sha256=gkWLl8yD4mIZnNYYAIRM8g9VarLvWmTAFeUfEbxJLBw,65
16
16
  locust/runners.py,sha256=zaRNUmTSL7ePw0xrbPC7zu1GECIenzmrwSyV4jS98Q4,63973
17
17
  locust/shape.py,sha256=Ug2OeoifODdAGlXPc_vK7Gc67P4lSx6oIJxEHznPVdI,1431
18
- locust/stats.py,sha256=zGMhvqQITOtZDRegm0uswSfnGzQYQIlK6wo9KEdAycg,43988
19
- locust/web.py,sha256=Jyb2kLbT-17Bb1BUh0heOvoQ7XrlIVxl_LhOhPikPuo,24817
18
+ locust/stats.py,sha256=1Mt8newzJroteM1mvym62K5GSXgSm0L3Yu8-4Tmjvtk,44094
19
+ locust/web.py,sha256=Hh6cUUYM1so-NhITq_cGdMCOSG6tKGpd9XevUE8dYEo,25085
20
20
  locust/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  locust/contrib/fasthttp.py,sha256=E4t13Qktps-vE5tymDNur9dE9K478yLCLGHluq-kRi4,26147
22
22
  locust/rpc/__init__.py,sha256=nVGoHWFQxZjnhCDWjbgXIbmFbN9sizAjkhvSs9_642c,58
@@ -27,7 +27,7 @@ locust/static/echarts.common.min.js,sha256=2h6zIZeHk-eGAiC-qYvxv7uW5S1HcyM72K5Fb
27
27
  locust/static/jquery-1.11.3.min.js,sha256=7LkWEzqTdpEfELxcZZlS6wAx5Ff13zZ83lYO2_ujj7g,95957
28
28
  locust/static/jquery.jqote2.min.js,sha256=kkYnMvNSQ0_h-YsHCRzBF3v4yEfRdcEacMusrnW4BK0,3381
29
29
  locust/static/jquery.tools.min.js,sha256=elDu82RR_6K-TWXb2qTSxAz96-upLyHBrnypvQSIu3c,2981
30
- locust/static/locust.js,sha256=u9hATRfV4BdeE0ox3_UfkR0arbRiw3rY00SnIj8-C08,10213
30
+ locust/static/locust.js,sha256=3Z-7JNT9t46dYFXUxRd-wDrfj1VrWbeuMmQu16GVqy0,10264
31
31
  locust/static/tasks.js,sha256=Gi999xLri5s_x_Xr_o_Xo-zsXsgaDSyWNcctmZySnZs,1370
32
32
  locust/static/vintage.js,sha256=aNBHBqGMT-oTINb5wVaeRykd3tFI-FWV8C46qAHcx40,1137
33
33
  locust/static/css/application.css,sha256=IR13u1XE8rRdqdtREp18O6mhH-HHhEdCeYjxKFTqP9c,9151
@@ -44,22 +44,22 @@ locust/static/sass/_base.sass,sha256=UaC1ViXp-Sz_5S6ggjctxurevfaGx8RdFdG6VEZK-lc
44
44
  locust/static/sass/_mixins.sass,sha256=Sy5r_1WTWM0k646SYm0XF1WNN2HJxtQ4QO7rVVkIfoI,69
45
45
  locust/static/sass/application.sass,sha256=v_S916UmdCOno4A0cGfDpVmFFxZxSQ4XOU_0MqjvotU,8512
46
46
  locust/static/sass/tables.sass,sha256=mG3RXKJRU2NTI6jz__1RUEwjAGdJzgzYpuRCP8jLT1I,1361
47
- locust/templates/index.html,sha256=DbZfrgQdEviWhbU_qGzl_08-Q2-j7R9b3lVjWzXTAWY,21770
48
- locust/templates/report.html,sha256=TJTzBi2yAMdNlnqkD3Jss2c2y0abJ5mbeftW-PlHB7E,10512
49
- locust/templates/stats_data.html,sha256=YP9oDcLvR_iMMpX2gxMdfHrftFGsXwLEv7zOK8Bsx94,1274
47
+ locust/templates/index.html,sha256=k0cnN3G13b-USIIAtomDs2PgbyhfbWns7RsSpRoqfjs,21863
48
+ locust/templates/report.html,sha256=Q1NmZWZL61-tLzJaR8kKG2tkjMjI6ry-OXEFvgM4PHM,10667
49
+ locust/templates/stats_data.html,sha256=MoBvJE41VtG3eriHkP4qWgQs3QNTsFTvS03aCenh0j0,1264
50
50
  locust/test/__init__.py,sha256=CaVC4yA4DnCO8EY3LbedPHFg86a9Lqlpe92JuiX3THw,396
51
51
  locust/test/fake_module1_for_env_test.py,sha256=dzGYWCr1SSkd8Yyo68paUNrCNW7YY_QgjRb7sM37gG0,164
52
52
  locust/test/fake_module2_for_env_test.py,sha256=dzGYWCr1SSkd8Yyo68paUNrCNW7YY_QgjRb7sM37gG0,164
53
53
  locust/test/mock_locustfile.py,sha256=N9sGjW-BmJ-J_x-5bEOR82VQ0DhR1hki313BHPOWq4g,1273
54
54
  locust/test/mock_logging.py,sha256=9KC_YXa0DvF44lvpDnWhjV0GLrtwtt2SxZIzM6sJGzU,783
55
- locust/test/test_dispatch.py,sha256=rl7rJBU4cXcSjPP597Bj5VTqJOMyw_30YrMc8We8rPk,164905
55
+ locust/test/test_dispatch.py,sha256=fVK1sdHqNvbNkjtcUraVxiABy4QoQX98VPBtf7uBii0,164903
56
56
  locust/test/test_env.py,sha256=Mp3EKVAjC84j57_yp7Gq67Q5TFyEOSQJ-mZyis_vt1c,6126
57
57
  locust/test/test_fasthttp.py,sha256=DfisLh7jsvgJ2kl_HhcJyLKffB7BMRVk2MnCwb-pXyM,29445
58
58
  locust/test/test_http.py,sha256=XOFRvI6ibbtM3_IRDV-kENGjDEAukNdQwK1T-NmkCa0,11764
59
59
  locust/test/test_load_locustfile.py,sha256=DwPJGhU4RQRT0qU8aL1KmFjzlatvc05VqHX_b6oJka4,5375
60
60
  locust/test/test_locust_class.py,sha256=16HONn6DWQG8E4x0nL1rXpLVfLbEdmezM7AUr21syuE,25546
61
61
  locust/test/test_log.py,sha256=JhLdaG5KkyeBeaSUlOuLwrmkf77v6_H8C7ivbNci3jA,6737
62
- locust/test/test_main.py,sha256=_uq3BgBYinyAeVOdEgsLDstTD-ROQt99U84qXzrM298,57468
62
+ locust/test/test_main.py,sha256=-e6zu98UVQN_Z2aCekvq1ZZDtaAneKQa-kR6OizyIRc,59415
63
63
  locust/test/test_old_wait_api.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  locust/test/test_parser.py,sha256=pKEJET7GP8_nqtsh5MXGzeBR8cn2mmwKtXyqWiQ0peQ,16145
65
65
  locust/test/test_runners.py,sha256=MCW0HOocn88gNB8gQkB2b8oJ0CxS6OzXLSUsjD8c2cI,153803
@@ -87,9 +87,9 @@ locust/util/exception_handler.py,sha256=ULNCoJAjdYTJpoJjdC9fwqWTqZgTt8haXzb_UjiU
87
87
  locust/util/load_locustfile.py,sha256=daKe7BaOrMyZzANORvSFML8UylEPUeTqXm21s7SqjvQ,2636
88
88
  locust/util/rounding.py,sha256=5haxR8mKhATqag6WvPby-MSRRgIw5Ob6thbyvMYZM7o,92
89
89
  locust/util/timespan.py,sha256=rrMk4AR5t9HA59GktWCvOsYBDhkKAwLkk0Orj-l2EGY,997
90
- locust-2.14.3.dev29.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
91
- locust-2.14.3.dev29.dist-info/METADATA,sha256=qFoS1p9yKL7W3k2AsjgppCh9ugkk5Fyw_SmIMrtBvG4,7504
92
- locust-2.14.3.dev29.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
93
- locust-2.14.3.dev29.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
94
- locust-2.14.3.dev29.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
95
- locust-2.14.3.dev29.dist-info/RECORD,,
90
+ locust-2.15.1.dist-info/LICENSE,sha256=78XGpIn3fHVBfaxlPNUfjVufSN7QsdhpJMRJHv2AFpo,1095
91
+ locust-2.15.1.dist-info/METADATA,sha256=hEhlAVYwpeBgI0c-UkXeT0-seKXbVd95Z0QomvUh-lE,7544
92
+ locust-2.15.1.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
93
+ locust-2.15.1.dist-info/entry_points.txt,sha256=RAdt8Ku-56m7bFjmdj-MBhbF6h4NX7tVODR9QNnOg0E,44
94
+ locust-2.15.1.dist-info/top_level.txt,sha256=XSsjgPA8Ggf9TqKVbkwSqZFuPlZ085X13M9orDycE20,7
95
+ locust-2.15.1.dist-info/RECORD,,