1+ # run with locust -f locust_files/load_testing.py
2+ # then set number of users and spawn rate in web interface
3+ # e.g. test with 100 users, and 15 users/sec
4+ # web interface: http://0.0.0.0:8089/
5+
16import datetime
7+ import json
28import random
39from uuid import uuid4
410
5- from locust import User , between
11+ from locust import HttpUser , between , task
612
13+ from mapswipe_workers .definitions import logger
714from mapswipe_workers .utils import user_management
815
916
10- class MapSwipeUser (User ):
11- wait_time = between (0.5 , 10 )
12-
13- def __init__ (self ):
14- self .project_id = "-MYg8CEf2k1-RitN62X0"
15- random_string = uuid4 ()
16- self .email = f"test_{ random_string } @mapswipe.org"
17- self .username = f"test_{ random_string } "
18- self .password = "mapswipe"
19- self .user_id = None
20- self .signed_in_user = None
17+ class MapSwipeUser (HttpUser ):
18+ # assuming that users need between 30 sec and 120 sec to map a group
19+ wait_time = between (30 , 120 )
2120
2221 def set_up_user (self ):
2322 # check if is already signed in
2423 if self .signed_in_user is None :
25- print ("user is not signed in. Will create a new user." )
24+ logger . info ("user is not signed in. Will create a new user." )
2625 # create user if not exists
2726 user = user_management .create_user (self .email , self .username , self .password )
2827 self .user_id = user .uid
@@ -31,9 +30,9 @@ def set_up_user(self):
3130 self .signed_in_user = user_management .sign_in_with_email_and_password (
3231 self .email , self .password
3332 )
34- print ("Created a new user." )
33+ logger . info ("Created a new user." )
3534 else :
36- print ("user is already signed in." )
35+ logger . info ("user is already signed in." )
3736 pass
3837
3938 def create_mock_result (self , group ):
@@ -54,12 +53,20 @@ def create_mock_result(self, group):
5453
5554 data = {
5655 "results" : results ,
57- "timestamp" : end_time ,
5856 "startTime" : start_time ,
5957 "endTime" : end_time ,
6058 }
6159 return data
6260
61+ def set_firebase_db (self , path , data , token = None ):
62+ request_ref = f"{ path } .json?auth={ token } "
63+ headers = {"content-type" : "application/json; charset=UTF-8" }
64+ self .client .patch (
65+ request_ref , headers = headers , data = json .dumps (data ).encode ("utf-8" )
66+ )
67+ logger .info (f"set data in firebase for { path } .json" )
68+
69+ @task
6370 def map_a_group (self ):
6471 """Get a group from Firebase for this user.
6572
@@ -104,12 +111,14 @@ def map_a_group(self):
104111
105112 # upload results in firebase
106113 path = f"/v2/results/{ self .project_id } /{ next_group_id } /{ self .user_id } "
107- user_management .set_firebase_db (path , result , self .signed_in_user ["idToken" ])
108-
114+ self .set_firebase_db (path , result , self .signed_in_user ["idToken" ])
109115
110- if __name__ == "__main__" :
111- mapswipe_user = MapSwipeUser ()
112- mapswipe_user .set_up_user ()
113- mapswipe_user .map_a_group ()
114- mapswipe_user .map_a_group ()
115- mapswipe_user .map_a_group ()
116+ def on_start (self ):
117+ self .project_id = "-MYg8CEf2k1-RitN62X0"
118+ random_string = uuid4 ()
119+ self .email = f"test_{ random_string } @mapswipe.org"
120+ self .username = f"test_{ random_string } "
121+ self .password = "mapswipe"
122+ self .user_id = None
123+ self .signed_in_user = None
124+ self .set_up_user ()
0 commit comments