locust 2.29.2.dev34__py3-none-any.whl → 2.29.2.dev42__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.
Files changed (40) hide show
  1. locust/_version.py +6 -2
  2. locust/contrib/fasthttp.py +1 -1
  3. locust/dispatch.py +7 -6
  4. {locust-2.29.2.dev34.dist-info → locust-2.29.2.dev42.dist-info}/METADATA +31 -26
  5. {locust-2.29.2.dev34.dist-info → locust-2.29.2.dev42.dist-info}/RECORD +16 -46
  6. locust-2.29.2.dev42.dist-info/WHEEL +4 -0
  7. locust-2.29.2.dev42.dist-info/entry_points.txt +3 -0
  8. locust/test/__init__.py +0 -15
  9. locust/test/fake_module1_for_env_test.py +0 -7
  10. locust/test/fake_module2_for_env_test.py +0 -7
  11. locust/test/mock_locustfile.py +0 -56
  12. locust/test/mock_logging.py +0 -28
  13. locust/test/test_debugging.py +0 -39
  14. locust/test/test_dispatch.py +0 -4170
  15. locust/test/test_env.py +0 -283
  16. locust/test/test_fasthttp.py +0 -785
  17. locust/test/test_http.py +0 -325
  18. locust/test/test_interruptable_task.py +0 -48
  19. locust/test/test_load_locustfile.py +0 -228
  20. locust/test/test_locust_class.py +0 -831
  21. locust/test/test_log.py +0 -237
  22. locust/test/test_main.py +0 -2264
  23. locust/test/test_old_wait_api.py +0 -0
  24. locust/test/test_parser.py +0 -450
  25. locust/test/test_runners.py +0 -4476
  26. locust/test/test_sequential_taskset.py +0 -157
  27. locust/test/test_stats.py +0 -866
  28. locust/test/test_tags.py +0 -440
  29. locust/test/test_taskratio.py +0 -94
  30. locust/test/test_users.py +0 -69
  31. locust/test/test_util.py +0 -33
  32. locust/test/test_wait_time.py +0 -79
  33. locust/test/test_web.py +0 -1257
  34. locust/test/test_zmqrpc.py +0 -58
  35. locust/test/testcases.py +0 -248
  36. locust/test/util.py +0 -88
  37. locust-2.29.2.dev34.dist-info/WHEEL +0 -5
  38. locust-2.29.2.dev34.dist-info/entry_points.txt +0 -2
  39. locust-2.29.2.dev34.dist-info/top_level.txt +0 -1
  40. {locust-2.29.2.dev34.dist-info → locust-2.29.2.dev42.dist-info}/LICENSE +0 -0
@@ -1,831 +0,0 @@
1
- from locust import HttpUser, TaskSet, User, constant, task
2
- from locust.env import Environment
3
- from locust.exception import (
4
- CatchResponseError,
5
- InterruptTaskSet,
6
- RescheduleTask,
7
- RescheduleTaskImmediately,
8
- ResponseError,
9
- StopUser,
10
- )
11
-
12
- import gevent
13
- from gevent import sleep
14
- from gevent.pool import Group
15
-
16
- from .testcases import LocustTestCase, WebserverTestCase
17
-
18
-
19
- class TestTaskSet(LocustTestCase):
20
- def setUp(self):
21
- super().setUp()
22
-
23
- class MyUser(User):
24
- host = "127.0.0.1"
25
-
26
- self.locust = MyUser(self.environment)
27
-
28
- def test_task_ratio(self):
29
- t1 = lambda l: None
30
- t2 = lambda l: None
31
-
32
- class MyTasks(TaskSet):
33
- tasks = {t1: 5, t2: 2}
34
-
35
- l = MyTasks(self.locust)
36
-
37
- t1_count = len([t for t in l.tasks if t == t1])
38
- t2_count = len([t for t in l.tasks if t == t2])
39
-
40
- self.assertEqual(t1_count, 5)
41
- self.assertEqual(t2_count, 2)
42
-
43
- def test_tasks_missing_gives_user_friendly_exception(self):
44
- class MyTasks(TaskSet):
45
- tasks = None
46
-
47
- class MyUser(User):
48
- wait_time = constant(0.5)
49
- tasks = [MyTasks]
50
-
51
- l = MyTasks(MyUser(self.environment))
52
- self.assertRaisesRegex(Exception, "No tasks defined on MyTasks.*", l.run)
53
- l.tasks = []
54
- self.assertRaisesRegex(Exception, "No tasks defined on MyTasks.*", l.run)
55
- MyTasks.task = object()
56
- self.assertRaisesRegex(Exception, ".*but you have set a 'task' attribute.*", l.run)
57
-
58
- def test_tasks_missing_from_user_gives_user_friendly_exception(self):
59
- class MyUser(User):
60
- wait_time = constant(0.5)
61
-
62
- l = MyUser(self.environment)
63
- self.assertRaisesRegex(Exception, "No tasks defined on MyUser.*", l.run)
64
- MyUser.task = object()
65
- self.assertRaisesRegex(Exception, ".*but you have set a 'task' attribute.*", l.run)
66
-
67
- def test_task_decorator_ratio(self):
68
- t1 = lambda l: None
69
- t2 = lambda l: None
70
-
71
- class MyTasks(TaskSet):
72
- tasks = {t1: 5, t2: 2}
73
- host = ""
74
-
75
- @task(3)
76
- def t3(self):
77
- pass
78
-
79
- @task(13)
80
- def t4(self):
81
- pass
82
-
83
- l = MyTasks(self.locust)
84
-
85
- t1_count = len([t for t in l.tasks if t == t1])
86
- t2_count = len([t for t in l.tasks if t == t2])
87
- t3_count = len([t for t in l.tasks if t.__name__ == MyTasks.t3.__name__])
88
- t4_count = len([t for t in l.tasks if t.__name__ == MyTasks.t4.__name__])
89
-
90
- self.assertEqual(t1_count, 5)
91
- self.assertEqual(t2_count, 2)
92
- self.assertEqual(t3_count, 3)
93
- self.assertEqual(t4_count, 13)
94
-
95
- def test_tasks_on_locust(self):
96
- class MyUser(User):
97
- @task(2)
98
- def t1(self):
99
- pass
100
-
101
- @task(3)
102
- def t2(self):
103
- pass
104
-
105
- l = MyUser(self.environment)
106
- self.assertEqual(2, len([t for t in l.tasks if t.__name__ == MyUser.t1.__name__]))
107
- self.assertEqual(3, len([t for t in l.tasks if t.__name__ == MyUser.t2.__name__]))
108
-
109
- def test_tasks_on_abstract_locust(self):
110
- class AbstractUser(User):
111
- abstract = True
112
-
113
- @task(2)
114
- def t1(self):
115
- pass
116
-
117
- class MyUser(AbstractUser):
118
- @task(3)
119
- def t2(self):
120
- pass
121
-
122
- l = MyUser(self.environment)
123
- self.assertEqual(2, len([t for t in l.tasks if t.__name__ == MyUser.t1.__name__]))
124
- self.assertEqual(3, len([t for t in l.tasks if t.__name__ == MyUser.t2.__name__]))
125
-
126
- def test_taskset_on_abstract_locust(self):
127
- v = [0]
128
-
129
- class AbstractUser(User):
130
- abstract = True
131
-
132
- @task
133
- class task_set(TaskSet):
134
- @task
135
- def t1(self):
136
- v[0] = 1
137
- raise StopUser()
138
-
139
- class MyUser(AbstractUser):
140
- pass
141
-
142
- l = MyUser(self.environment)
143
- # check that the User can be run
144
- l.run()
145
- self.assertEqual(1, v[0])
146
-
147
- def test_task_decorator_on_taskset(self):
148
- state = [0]
149
-
150
- class MyUser(User):
151
- @task
152
- def t1(self):
153
- pass
154
-
155
- @task
156
- class MyTaskSet(TaskSet):
157
- @task
158
- def subtask(self):
159
- state[0] = 1
160
- raise StopUser()
161
-
162
- self.assertEqual([MyUser.t1, MyUser.MyTaskSet], MyUser.tasks)
163
- MyUser(self.environment).run()
164
- self.assertEqual(1, state[0])
165
-
166
- def test_on_start(self):
167
- class MyTasks(TaskSet):
168
- t1_executed = False
169
- t2_executed = False
170
-
171
- def on_start(self):
172
- self.t1()
173
-
174
- def t1(self):
175
- self.t1_executed = True
176
-
177
- @task
178
- def t2(self):
179
- self.t2_executed = True
180
- raise InterruptTaskSet(reschedule=False)
181
-
182
- l = MyTasks(self.locust)
183
- self.assertRaises(RescheduleTask, lambda: l.run())
184
- self.assertTrue(l.t1_executed)
185
- self.assertTrue(l.t2_executed)
186
-
187
- def test_on_stop_interrupt(self):
188
- class MyTasks(TaskSet):
189
- t2_executed = False
190
- on_stop_executed = False
191
-
192
- def on_stop(self):
193
- self.on_stop_executed = True
194
-
195
- @task
196
- def t2(self):
197
- self.t2_executed = True
198
- self.interrupt(reschedule=False)
199
-
200
- ts = MyTasks(self.locust)
201
- self.assertRaises(RescheduleTask, lambda: ts.run())
202
- self.assertTrue(ts.t2_executed)
203
- self.assertTrue(ts.on_stop_executed)
204
-
205
- def test_on_stop_interrupt_reschedule(self):
206
- class MyTasks(TaskSet):
207
- t2_executed = False
208
- on_stop_executed = False
209
-
210
- def on_stop(self):
211
- self.on_stop_executed = True
212
-
213
- @task
214
- def t2(self):
215
- self.t2_executed = True
216
- self.interrupt(reschedule=True)
217
-
218
- ts = MyTasks(self.locust)
219
- self.assertRaises(RescheduleTaskImmediately, lambda: ts.run())
220
- self.assertTrue(ts.t2_executed)
221
- self.assertTrue(ts.on_stop_executed)
222
-
223
- def test_on_stop_when_locust_stops(self):
224
- class MyTasks(TaskSet):
225
- def on_stop(self):
226
- self.user.on_stop_executed = True
227
-
228
- @task
229
- def t2(self):
230
- self.user.t2_executed = True
231
-
232
- class MyUser(User):
233
- t2_executed = False
234
- on_stop_executed = False
235
-
236
- tasks = [MyTasks]
237
- wait_time = constant(0.1)
238
-
239
- group = Group()
240
- user = MyUser(self.environment)
241
- user.start(group)
242
- sleep(0.05)
243
- user.stop()
244
- sleep(0)
245
-
246
- self.assertTrue(user.t2_executed)
247
- self.assertTrue(user.on_stop_executed)
248
-
249
- def test_schedule_task(self):
250
- self.t1_executed = False
251
- self.t2_arg = None
252
-
253
- def t1(l):
254
- self.t1_executed = True
255
-
256
- def t2(l, arg="t2 argument"):
257
- self.t2_arg = arg
258
-
259
- class MyTasks(TaskSet):
260
- tasks = [t1, t2]
261
-
262
- taskset = MyTasks(self.locust)
263
- taskset.schedule_task(t1)
264
- taskset.execute_next_task()
265
- self.assertTrue(self.t1_executed)
266
-
267
- taskset.schedule_task(t2)
268
- taskset.execute_next_task()
269
- self.assertEqual("t2 argument", self.t2_arg)
270
-
271
- def test_schedule_task_bound_method(self):
272
- class MyTasks(TaskSet):
273
- host = ""
274
-
275
- @task()
276
- def t1(self):
277
- self.t1_executed = True
278
- self.schedule_task(self.t2)
279
-
280
- def t2(self):
281
- self.t2_executed = True
282
-
283
- taskset = MyTasks(self.locust)
284
- taskset.schedule_task(taskset.get_next_task())
285
- taskset.execute_next_task()
286
- self.assertTrue(taskset.t1_executed)
287
- taskset.execute_next_task()
288
- self.assertTrue(taskset.t2_executed)
289
-
290
- def test_taskset_inheritance(self):
291
- def t1(l):
292
- pass
293
-
294
- class MyBaseTaskSet(TaskSet):
295
- tasks = [t1]
296
- host = ""
297
-
298
- class MySubTaskSet(MyBaseTaskSet):
299
- @task
300
- def t2(self):
301
- pass
302
-
303
- l = MySubTaskSet(self.locust)
304
- self.assertEqual(2, len(l.tasks))
305
- self.assertEqual([t1, MySubTaskSet.t2], l.tasks)
306
-
307
- def test_task_decorator_with_or_without_argument(self):
308
- class MyTaskSet(TaskSet):
309
- @task
310
- def t1(self):
311
- pass
312
-
313
- taskset = MyTaskSet(self.locust)
314
- self.assertEqual(len(taskset.tasks), 1)
315
-
316
- class MyTaskSet2(TaskSet):
317
- @task()
318
- def t1(self):
319
- pass
320
-
321
- taskset = MyTaskSet2(self.locust)
322
- self.assertEqual(len(taskset.tasks), 1)
323
-
324
- class MyTaskSet3(TaskSet):
325
- @task(3)
326
- def t1(self):
327
- pass
328
-
329
- taskset = MyTaskSet3(self.locust)
330
- self.assertEqual(len(taskset.tasks), 3)
331
-
332
- def test_wait_function(self):
333
- class MyTaskSet(TaskSet):
334
- a = 1
335
- b = 2
336
- wait_time = lambda self: 1 + (self.b - self.a)
337
-
338
- taskset = MyTaskSet(self.locust)
339
- self.assertEqual(taskset.wait_time(), 2.0)
340
-
341
- def test_sub_taskset(self):
342
- class MySubTaskSet(TaskSet):
343
- constant(1)
344
-
345
- @task()
346
- def a_task(self):
347
- self.user.sub_locust_task_executed = True
348
- self.interrupt()
349
-
350
- class MyTaskSet(TaskSet):
351
- tasks = [MySubTaskSet]
352
-
353
- self.sub_locust_task_executed = False
354
- loc = MyTaskSet(self.locust)
355
- loc.schedule_task(loc.get_next_task())
356
- self.assertRaises(RescheduleTaskImmediately, lambda: loc.execute_next_task())
357
- self.assertTrue(self.locust.sub_locust_task_executed)
358
-
359
- def test_sub_taskset_tasks_decorator(self):
360
- class MyTaskSet(TaskSet):
361
- @task
362
- class MySubTaskSet(TaskSet):
363
- wait_time = constant(0.001)
364
-
365
- @task()
366
- def a_task(self):
367
- self.user.sub_locust_task_executed = True
368
- self.interrupt()
369
-
370
- self.sub_locust_task_executed = False
371
- loc = MyTaskSet(self.locust)
372
- loc.schedule_task(loc.get_next_task())
373
- self.assertRaises(RescheduleTaskImmediately, lambda: loc.execute_next_task())
374
- self.assertTrue(self.locust.sub_locust_task_executed)
375
-
376
- def test_on_start_interrupt(self):
377
- class SubTaskSet(TaskSet):
378
- def on_start(self):
379
- self.interrupt(reschedule=False)
380
-
381
- class RescheduleSubTaskSet(TaskSet):
382
- def on_start(self):
383
- self.interrupt(reschedule=True)
384
-
385
- class MyUser(User):
386
- host = ""
387
- tasks = [SubTaskSet]
388
-
389
- l = MyUser(Environment())
390
- task_set = SubTaskSet(l)
391
- reschedule_task_set = RescheduleSubTaskSet(l)
392
- self.assertRaises(RescheduleTaskImmediately, lambda: reschedule_task_set.run())
393
- self.assertRaises(RescheduleTask, lambda: task_set.run())
394
-
395
- def test_parent_attribute(self):
396
- from locust.exception import StopUser
397
-
398
- parents = {}
399
-
400
- class SubTaskSet(TaskSet):
401
- def on_start(self):
402
- parents["sub"] = self.parent
403
-
404
- @task
405
- class SubSubTaskSet(TaskSet):
406
- def on_start(self):
407
- parents["subsub"] = self.parent
408
-
409
- @task
410
- def stop(self):
411
- raise StopUser()
412
-
413
- class RootTaskSet(TaskSet):
414
- tasks = [SubTaskSet]
415
-
416
- class MyUser(User):
417
- host = ""
418
- tasks = [RootTaskSet]
419
-
420
- l = MyUser(Environment())
421
- l.run()
422
- self.assertTrue(isinstance(parents["sub"], RootTaskSet))
423
- self.assertTrue(isinstance(parents["subsub"], SubTaskSet))
424
-
425
- def test_user_is_read_only(self):
426
- class MyTaskSet(TaskSet):
427
- raised_attribute_error = False
428
-
429
- @task
430
- def overwrite_user(self):
431
- try:
432
- self.user = "whatever"
433
- except AttributeError:
434
- MyTaskSet.raised_attribute_error = True
435
- raise StopUser()
436
-
437
- class MyUser(User):
438
- host = ""
439
- tasks = [MyTaskSet]
440
-
441
- MyUser(Environment()).run()
442
- self.assertTrue(MyTaskSet.raised_attribute_error)
443
-
444
-
445
- class TestLocustClass(LocustTestCase):
446
- def test_locust_wait(self):
447
- log = []
448
-
449
- class TestUser(User):
450
- wait_time = constant(0.01)
451
-
452
- @task
453
- def t(self):
454
- log.append(0)
455
- self.wait()
456
- log.append(1)
457
- raise StopUser()
458
-
459
- l = TestUser(self.environment)
460
- l.run()
461
- self.assertEqual([0, 1], log)
462
-
463
- def test_locust_on_start(self):
464
- class MyUser(User):
465
- t1_executed = False
466
- t2_executed = False
467
-
468
- def on_start(self):
469
- self.t1()
470
-
471
- def t1(self):
472
- self.t1_executed = True
473
-
474
- @task
475
- def t2(self):
476
- self.t2_executed = True
477
- raise StopUser()
478
-
479
- l = MyUser(self.environment)
480
- l.run()
481
- self.assertTrue(l.t1_executed)
482
- self.assertTrue(l.t2_executed)
483
-
484
- def test_locust_on_stop(self):
485
- class MyUser(User):
486
- on_stop_executed = False
487
- t2_executed = True
488
-
489
- def on_stop(self):
490
- self.on_stop_executed = True
491
-
492
- @task
493
- def t2(self):
494
- self.t2_executed = True
495
- raise StopUser()
496
-
497
- l = MyUser(self.environment)
498
- l.run()
499
- self.assertTrue(l.on_stop_executed)
500
- self.assertTrue(l.t2_executed)
501
-
502
- def test_locust_start(self):
503
- class TestUser(User):
504
- wait_time = constant(0.1)
505
- test_state = 0
506
-
507
- @task
508
- def t(self):
509
- self.test_state = 1
510
- sleep(0.1)
511
- raise StopUser()
512
-
513
- group = Group()
514
- user = TestUser(self.environment)
515
- greenlet = user.start(group)
516
- sleep(0)
517
- self.assertEqual(1, len(group))
518
- self.assertIn(greenlet, group)
519
- self.assertEqual(1, user.test_state)
520
- timeout = gevent.Timeout(1)
521
- timeout.start()
522
- group.join()
523
- timeout.cancel()
524
-
525
- def test_locust_graceful_stop(self):
526
- class TestUser(User):
527
- test_state = 0
528
-
529
- @task
530
- def t(self):
531
- self.test_state = 1
532
- sleep(0.1)
533
- self.test_state = 2
534
-
535
- group = Group()
536
- user = TestUser(self.environment)
537
- greenlet = user.start(group)
538
- sleep(0)
539
- self.assertEqual(1, user.test_state)
540
-
541
- # stop User gracefully
542
- user.stop(force=False)
543
- sleep(0)
544
- # make sure instance is not killed right away
545
- self.assertIn(greenlet, group)
546
- self.assertEqual(1, user.test_state)
547
- sleep(0.2)
548
- # check that locust instance has now died and that the task got to finish
549
- self.assertEqual(0, len(group))
550
- self.assertEqual(2, user.test_state)
551
-
552
- def test_locust_forced_stop(self):
553
- class TestUser(User):
554
- test_state = 0
555
-
556
- @task
557
- def t(self):
558
- self.test_state = 1
559
- sleep(0.1)
560
- self.test_state = 2
561
-
562
- group = Group()
563
- user = TestUser(self.environment)
564
- greenlet = user.start(group)
565
- sleep(0)
566
- self.assertIn(greenlet, group)
567
- self.assertEqual(1, user.test_state)
568
-
569
- # stop User gracefully
570
- user.stop(force=True)
571
- sleep(0)
572
- # make sure instance is killed right away, and that the task did NOT get to finish
573
- self.assertEqual(0, len(group))
574
- self.assertEqual(1, user.test_state)
575
-
576
- def test_deprecated_locust_class(self):
577
- def test_locust():
578
- from locust import Locust
579
-
580
- class MyLocust(Locust):
581
- pass
582
-
583
- def test_http_locust():
584
- from locust import HttpLocust
585
-
586
- class WebLocust(HttpLocust):
587
- pass
588
-
589
- def test_fast_http_locust():
590
- from locust.contrib.fasthttp import FastHttpLocust
591
-
592
- class FastLocust(FastHttpLocust):
593
- pass
594
-
595
- def assert_importing_locust_class_raises(func):
596
- try:
597
- func()
598
- except ImportError as e:
599
- self.assertIn(
600
- "Locust class has been renamed to",
601
- e.args[0],
602
- "ImportError was raised, but with the wrong error message",
603
- )
604
- else:
605
- self.fail("ImportError was not raised")
606
-
607
- assert_importing_locust_class_raises(test_locust)
608
- assert_importing_locust_class_raises(test_http_locust)
609
- assert_importing_locust_class_raises(test_fast_http_locust)
610
-
611
-
612
- class TestWebLocustClass(WebserverTestCase):
613
- def test_get_request(self):
614
- self.response = ""
615
-
616
- def t1(l):
617
- self.response = l.client.get("/ultra_fast")
618
-
619
- class MyUser(HttpUser):
620
- tasks = [t1]
621
- host = "http://127.0.0.1:%i" % self.port
622
-
623
- my_locust = MyUser(self.environment)
624
- t1(my_locust)
625
- self.assertEqual(self.response.text, "This is an ultra fast response")
626
-
627
- def test_client_request_headers(self):
628
- class MyUser(HttpUser):
629
- host = "http://127.0.0.1:%i" % self.port
630
-
631
- locust = MyUser(self.environment)
632
- self.assertEqual("hello", locust.client.get("/request_header_test", headers={"X-Header-Test": "hello"}).text)
633
-
634
- def test_client_get(self):
635
- class MyUser(HttpUser):
636
- host = "http://127.0.0.1:%i" % self.port
637
-
638
- locust = MyUser(self.environment)
639
- self.assertEqual("GET", locust.client.get("/request_method").text)
640
-
641
- def test_client_get_absolute_url(self):
642
- class MyUser(HttpUser):
643
- host = "http://127.0.0.1:%i" % self.port
644
-
645
- locust = MyUser(self.environment)
646
- self.assertEqual("GET", locust.client.get("http://127.0.0.1:%i/request_method" % self.port).text)
647
-
648
- def test_client_post(self):
649
- class MyUser(HttpUser):
650
- host = "http://127.0.0.1:%i" % self.port
651
-
652
- locust = MyUser(self.environment)
653
- self.assertEqual("POST", locust.client.post("/request_method", {"arg": "hello world"}).text)
654
- self.assertEqual("hello world", locust.client.post("/post", {"arg": "hello world"}).text)
655
-
656
- def test_client_put(self):
657
- class MyUserHttpUser(HttpUser):
658
- host = "http://127.0.0.1:%i" % self.port
659
-
660
- locust = MyUserHttpUser(self.environment)
661
- self.assertEqual("PUT", locust.client.put("/request_method", {"arg": "hello world"}).text)
662
- self.assertEqual("hello world", locust.client.put("/put", {"arg": "hello world"}).text)
663
-
664
- def test_client_delete(self):
665
- class MyUser(HttpUser):
666
- host = "http://127.0.0.1:%i" % self.port
667
-
668
- locust = MyUser(self.environment)
669
- self.assertEqual("DELETE", locust.client.delete("/request_method").text)
670
- self.assertEqual(200, locust.client.delete("/request_method").status_code)
671
-
672
- def test_client_head(self):
673
- class MyUser(HttpUser):
674
- host = "http://127.0.0.1:%i" % self.port
675
-
676
- locust = MyUser(self.environment)
677
- self.assertEqual(200, locust.client.head("/request_method").status_code)
678
-
679
- def test_client_basic_auth(self):
680
- class MyUser(HttpUser):
681
- host = "http://127.0.0.1:%i" % self.port
682
-
683
- class MyAuthorizedUser(HttpUser):
684
- host = "http://locust:menace@127.0.0.1:%i" % self.port
685
-
686
- class MyUnauthorizedUser(HttpUser):
687
- host = "http://locust:wrong@127.0.0.1:%i" % self.port
688
-
689
- locust = MyUser(self.environment)
690
- unauthorized = MyUnauthorizedUser(self.environment)
691
- authorized = MyAuthorizedUser(self.environment)
692
- response = authorized.client.get("/basic_auth")
693
- self.assertEqual(200, response.status_code)
694
- self.assertEqual("Authorized", response.text)
695
- self.assertEqual(401, locust.client.get("/basic_auth").status_code)
696
- self.assertEqual(401, unauthorized.client.get("/basic_auth").status_code)
697
-
698
- def test_log_request_name_argument(self):
699
- class MyUser(HttpUser):
700
- tasks = []
701
- host = "http://127.0.0.1:%i" % self.port
702
-
703
- @task()
704
- def t1(l):
705
- l.client.get("/ultra_fast", name="new name!")
706
-
707
- my_locust = MyUser(self.environment)
708
- my_locust.t1()
709
-
710
- self.assertEqual(1, self.runner.stats.get("new name!", "GET").num_requests)
711
- self.assertEqual(0, self.runner.stats.get("/ultra_fast", "GET").num_requests)
712
-
713
- def test_redirect_url_original_path_as_name(self):
714
- class MyUser(HttpUser):
715
- host = "http://127.0.0.1:%i" % self.port
716
-
717
- l = MyUser(self.environment)
718
- l.client.get("/redirect")
719
-
720
- self.assertEqual(1, len(self.runner.stats.entries))
721
- self.assertEqual(1, self.runner.stats.get("/redirect", "GET").num_requests)
722
- self.assertEqual(0, self.runner.stats.get("/ultra_fast", "GET").num_requests)
723
-
724
-
725
- class TestCatchResponse(WebserverTestCase):
726
- def setUp(self):
727
- super().setUp()
728
-
729
- class MyUser(HttpUser):
730
- host = "http://127.0.0.1:%i" % self.port
731
-
732
- self.locust = MyUser(self.environment)
733
-
734
- self.num_failures = 0
735
- self.num_success = 0
736
-
737
- def on_request(request_type, name, response_time, response_length, exception, context, **kwargs):
738
- if exception:
739
- self.num_failures += 1
740
- self.last_failure_exception = exception
741
- else:
742
- self.num_success += 1
743
-
744
- self.environment.events.request.add_listener(on_request)
745
-
746
- def test_catch_response(self):
747
- self.assertEqual(500, self.locust.client.get("/fail").status_code)
748
- self.assertEqual(1, self.num_failures)
749
- self.assertEqual(0, self.num_success)
750
-
751
- with self.locust.client.get("/ultra_fast", catch_response=True):
752
- pass
753
- self.assertEqual(1, self.num_failures)
754
- self.assertEqual(1, self.num_success)
755
-
756
- with self.locust.client.get("/ultra_fast", catch_response=True):
757
- raise ResponseError("Not working")
758
-
759
- self.assertEqual(2, self.num_failures)
760
- self.assertEqual(1, self.num_success)
761
-
762
- def test_catch_response_http_fail(self):
763
- with self.locust.client.get("/fail", catch_response=True):
764
- pass
765
- self.assertEqual(1, self.num_failures)
766
- self.assertEqual(0, self.num_success)
767
-
768
- def test_catch_response_http_manual_fail(self):
769
- with self.locust.client.get("/ultra_fast", catch_response=True) as response:
770
- response.failure("Haha!")
771
- self.assertEqual(1, self.num_failures)
772
- self.assertEqual(0, self.num_success)
773
- self.assertTrue(
774
- isinstance(self.last_failure_exception, CatchResponseError),
775
- "Failure event handler should have been passed a CatchResponseError instance",
776
- )
777
-
778
- def test_catch_response_http_manual_success(self):
779
- with self.locust.client.get("/fail", catch_response=True) as response:
780
- response.success()
781
- self.assertEqual(0, self.num_failures)
782
- self.assertEqual(1, self.num_success)
783
-
784
- def test_catch_response_allow_404(self):
785
- with self.locust.client.get("/does/not/exist", catch_response=True) as response:
786
- self.assertEqual(404, response.status_code)
787
- if response.status_code == 404:
788
- response.success()
789
- self.assertEqual(0, self.num_failures)
790
- self.assertEqual(1, self.num_success)
791
-
792
- def test_interrupt_taskset_with_catch_response(self):
793
- class MyTaskSet(TaskSet):
794
- @task
795
- def interrupted_task(self):
796
- with self.client.get("/ultra_fast", catch_response=True):
797
- raise InterruptTaskSet()
798
-
799
- class MyUser(HttpUser):
800
- host = "http://127.0.0.1:%i" % self.port
801
- tasks = [MyTaskSet]
802
-
803
- l = MyUser(self.environment)
804
- ts = MyTaskSet(l)
805
- self.assertRaises(InterruptTaskSet, lambda: ts.interrupted_task())
806
- self.assertEqual(0, self.num_failures)
807
- self.assertEqual(0, self.num_success)
808
-
809
- def test_catch_response_connection_error_success(self):
810
- class MyUser(HttpUser):
811
- host = "http://127.0.0.1:1"
812
-
813
- l = MyUser(self.environment)
814
- with l.client.get("/", catch_response=True) as r:
815
- self.assertEqual(r.status_code, 0)
816
- self.assertEqual(None, r.content)
817
- r.success()
818
- self.assertEqual(1, self.num_success)
819
- self.assertEqual(0, self.num_failures)
820
-
821
- def test_catch_response_connection_error_fail(self):
822
- class MyUser(HttpUser):
823
- host = "http://127.0.0.1:1"
824
-
825
- l = MyUser(self.environment)
826
- with l.client.get("/", catch_response=True) as r:
827
- self.assertEqual(r.status_code, 0)
828
- self.assertEqual(None, r.content)
829
- r.failure("Manual fail")
830
- self.assertEqual(0, self.num_success)
831
- self.assertEqual(1, self.num_failures)