class ConstantPacing(User): wait_time = constant_pacing(3) @task def launch(self): time.sleep(2) print("Constant Pacing Demo")
class Read(HttpUser): # Please refer to https://docs.locust.io/en/stable/api.html#locust.wait_time.constant_pacing for docs wait_time = constant_pacing(0.01) def on_start(self): # Retrieve test data from csv user = next(data) self.userId = user[0] self.initPoints = user[1] self.pointsToAdd = user[2] success, result = api.get(self.client, self.userId, name="Get initial score") self.currentscore = score @task(1) def get_score(self): success, result = api.get(self.client, self.userId) # Only log if the score has changed if success and (self.currentscore != score): logger.logscore(runId, 'GET', region, result) self.currentscore = score host = "" # mandatory parameter, leave as blank
class UserSensor(HttpUser): wait_time = constant_pacing(3) weight = 1 @task def login_register_logout(self): print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_") print("Realizando:__ Login Register Logout__") print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_") usuario, contraseña, estado = self.login(Credenciales) if estado == 1: self.register_date() self.logout(usuario, contraseña) def login(self, Credenciales): print("Entrando a Login") if len(Credenciales) > 0: print("Credencial disponible") user, password = Credenciales.pop() print((user, password)) respuesta = self.client.get("/accounts/login/") csrftoken = respuesta.cookies['csrftoken'] self.client.post("/accounts/login/", { 'username': user, 'password': password }, headers={'X-CSRFToken': csrftoken}) status = 1 else: print("No hay credencial disponible") status = 0 user = "" password = "" return user, password, status def register_date(self): ubc_var = ['RC', 'SAM', 'GD'] ubc_selec = random.randint(0, 2) dat_var_num = [ random.randint(-10, 50 - 1), random.randint(880, 1080 - 1), random.randint(0, 100 - 1) ] csftoken = self.client.get("/registro/ingresar").cookies['csrftoken'] self.client.post("/registro/privado", { 'ubicacion': ubc_var[ubc_selec], 'temperatura': dat_var_num[0], 'presion': dat_var_num[1], 'humedad': dat_var_num[2] }, headers={'X-CSRFToken': csftoken}) def logout(self, user, password): self.client.get("/accounts/logout/") print("Devolviendo Credencial a disposicion..") Credenciales.append((user, password)) print("Nueva Credencial disponible")
class MyUser(User): # wait_time=between(1,3) # wait_time=constant(3) wait_time = constant_pacing(5) @task def login_URL(self): print(datetime.now())
class QuickstartUser(HttpUser): wait_time = constant_pacing(1) @task def index_page(self): self.client.get("/owners/find") @task(3) def gen_error(self): self.client.get("/oups")
class K8SAgent(FastHttpUser): wait_time = constant_pacing(30) jobid = 0 userid = None max_retries = {{ locust_http_max_retries }} connection_timeout = {{ locust_http_connection_timeout }} network_timeout = {{ locust_http_network_timeout }} def on_start(self): self.userid = str(uuid.uuid4())
class User(HttpUser): # constant_pacing for an adaptive time that ensures the task runs (at most) once every X seconds wait_time = constant_pacing(5) host = c.BACKEND_HOST @task def submit_job_task(self): headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } data = {'input': 48} self.client.post('/api/v1/jobs', json=data, headers=headers)
class QuickstartUser(HttpUser): wait_time = constant_pacing(1) # note: this URL is a form, thus doing a POST request with a search would be more appropriate @task def owners_find(self): self.client.get("/owners/find") @task def owners_list(self): self.client.get("/owners") @task(3) def gen_error(self): self.client.get("/oups")
class NotifyApiUser(HttpUser): wait_time = constant_pacing(60) host = "https://api.staging.notification.cdssandbox.xyz" @task def send_notifications(self): headers = {"Authorization": AUTH_HEADER} json = { "email_address": "*****@*****.**", "template_id": "9c17633c-126a-4ad3-ad2f-b14c3a85314a", "personalisation": {"colour": "Fulvous"}, } self.client.post("/v2/notifications/email", json=json, headers=headers)
class CloudAIUser(OAuth2Locust): task_set = CloudAITaskSet wait_time = constant_pacing(QPS) def __init__(self, *args, **kwargs): super(CloudAIUser, self).__init__(*args, **kwargs) @classmethod def _download_gcs_json(cls, file_url): parsed_url = urlparse(file_url) if parsed_url.scheme == 'gs': file_uri = file_url else: if parsed_url.netloc == GCS_HOST: file_uri = "gs:/{}".format(file_path) else: raise Exception( "Host URL is not a Google Cloud Storage URI: {}".format( file_url)) gcs_client = GCSClient() with BytesIO() as json_in: gcs_client.download_blob_to_file(file_uri, json_in) json_in.seek(0) json_string = json_in.read().decode('utf-8') return json_string @staticmethod def _load_local_json(path): with open(path, 'r') as json_in: json_string = json_in.read() return json_string @classmethod def _get_model_config(cls): if GCS_CONFIG_PATH_KEY not in os.environ: raise Exception( "You must set '{}' env var to the GCS path to the config". format(GCS_CONFIG_PATH_KEY)) gcs_config = os.environ[GCS_CONFIG_PATH_KEY] json_string = cls._download_gcs_json(gcs_config) cls.model_config = json.loads(json_string) def setup(self): self._get_model_config()
class QuickstartUser(HttpUser): wait_time = constant_pacing(1) # note: this URL is a form, thus doing a POST request with a search would be more appropriate @task def owners_find(self): self.client.get("/owners/find") @task def owners_list(self): self.client.get("/owners") @task(3) def gen_error(self): # because 500 error is expected, we treat any other result as failure with self.client.get("/oups", catch_response=True) as response: if response.status_code == 500: response.success() else: response.failure('unexpected status code = {}'.format(response.status_code))
class K8SAgent(FastHttpUser): #wait_time = between(10, 10) wait_time = constant_pacing(30) jobid = 0 userid = None max_retries = 3 connection_timeout = 18000 network_timeout = 18000 def on_start(self): self.userid = str(uuid.uuid4()) ''' @task(1) def submitjob(self): hostname = os.environ['MY_POD_NAME'] jobname = "stresstest-{0}-{1}-{2}".format(hostname, self.userid, self.jobid) self.jobid = self.jobid + 1 template_data = generate_from_template_dict(job_template, jobname, "stress") openpai_headers = { "Authorization": "Bearer {0}".format(pai_token), "Content-Type": "text/yaml" } self.client.post( "/rest-server/api/v2/jobs", headers=openpai_headers, data=template_data ) ''' @task(10) def listjoball(self): openpai_headers = { "Authorization": "Bearer {0}".format(pai_token), } self.client.get("/rest-server/api/v2/jobs", headers=openpai_headers) '''
class Add(HttpUser): # Please refer to https://docs.locust.io/en/stable/api.html#locust.wait_time.constant_pacing for docs wait_time = constant_pacing(2) def on_start(self): # Retrieve test data from csv user = next(data) self.userId = user[0] self.initPoints = user[1] self.pointsToAdd = user[2] @task(1) def operations(self): success, result = api.add(self.client, self.userId, self.pointsToAdd) if success: result['userId'] = self.userId result['pointsToAdd'] = self.pointsToAdd logger.logscore(runId, 'ADD', region, result) host = "" # mandatory parameter, leave as blank
class UserSensor(HttpUser): wait_time = constant_pacing(3) weight = 1 def on_start(self): self.login() self.login_and_register_date() self.on_stop() def login(self): respuesta = self.client.get("/accounts/login/") csrftoken = respuesta.cookies['csrftoken'] self.client.post("/accounts/login/", { 'username': '******', 'password': '******' }, headers={'X-CSRFToken': csrftoken}) def login_and_register_date(self): ubc_var = ['RC', 'SAM', 'GD'] ubc_selec = random.randint(0, 2) dat_var_num = [ random.randint(-10, 50 - 1), random.randint(880, 1080 - 1), random.randint(0, 100 - 1) ] csftoken = self.client.get("/registro/ingresar").cookies['csrftoken'] self.client.post("/registro/privado", { 'ubicacion': ubc_var[ubc_selec], 'temperatura': dat_var_num[0], 'presion': dat_var_num[1], 'humedad': dat_var_num[2] }, headers={'X-CSRFToken': csftoken}) def on_stop(self): self.client.get("/accounts/logout/")
class MyUser(User): wait_time = constant_pacing(0.1)
class FooBarLocust(FastHttpUser): tasks = {FooBar: 1} wait_time = constant_pacing(1.0)
class WebsiteUser(HttpLocust): """ Locust user class that does requests to the locust web server running on localhost """ wait_time = constant_pacing(1) task_set = UserTasks
class User(Locust): wait_time = constant_pacing(0.1)
class WebsiteUser(HttpUser): tasks = [UserTaskSet] wait_time = constant_pacing(1) host = 'http://localhost:8080'
class UserSensor(HttpUser): wait_time = constant_pacing (900) weight = 1 @task def login_register_logout(self): print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_") print("Realizando:__ Login Register Logout__") print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_") usuario,contraseña,estado=self.login(Credenciales) if estado ==1: self.register_date() self.logout(usuario,contraseña) def login(self,Credenciales): print("______________Proceso de Login_____________") status=0 if len(Credenciales) > 0: user,password=Credenciales.pop() respuesta = self.client.get("/accounts/login/") if respuesta.status_code==200: csrftoken = respuesta.cookies['csrftoken'] respuesta_1=self.client.post("/accounts/login/", {'username': user, 'password': password},headers={'X-CSRFToken': csrftoken}) if respuesta_1.status_code==200: print("____________Exito Login_________________") status=1 else: print("____________Falla Login _________________") Credenciales.append((user, password)) else: print("____________ Falla Login al ingresar a la pagina_________________") Credenciales.append((user, password)) else: print("No hay credencial disponible") user="" password="" return user,password,status def register_date(self): print("_________Subiendo Datos_________") ubc_var = ['RC', 'SAM', 'GD'] ubc_selec = random.randint(0, 2) dat_var_num = [random.randint(-10, 50-1), random.randint(880, 1080-1), random.randint(0, 100-1)] csftoken=self.client.get("/registro/ingresar").cookies['csrftoken'] posteo=self.client.post("/registro/privado", {'ubicacion':ubc_var[ubc_selec],'temperatura':dat_var_num[0],'presion':dat_var_num[1],'humedad':dat_var_num[2]},headers={'X-CSRFToken': csftoken}) if (posteo.status_code == 200): print("_______Exito en la subida de datos ____________") else: print("_____________Fallo el registro de datos______________") def logout(self,user,password): print("______________Proceso de Logout____________") respuesta=self.client.get("/accounts/logout/") while (respuesta.status_code != 200): print(" __________Intentando nuevamente logout________ ") respuesta = self.client.get("/accounts/logout/") print("-----------------Logout exitoso---------------") Credenciales.append((user, password))
class WebsiteUser(HttpUser): wait_time = constant_pacing(0.5) #wait_time = between(1, 3) def on_start(self): self.client.verify = False self.db = sqlite3.connect('../gogs/data/gogs.db') def repoCreate(self): self.client.post( '/repo/create', data= '_csrf=st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA&user_id=1&repo_name=locust&description=&gitignores=&license=&readme=Default', headers={ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "application/x-www-form-urlencoded", }, cookies={ "webauthn-session": "MTYxNzYzNDIzMXxEdi1CQkFFQ180SUFBUkFCRUFBQV9nR3hfNElBQWdaemRISnBibWNNRGdBTWNtVm5hWE4wY21GMGFXOXVCMXRkZFdsdWREZ0tjQUJ1ZXlKamFHRnNiR1Z1WjJVaU9pSnhUbVpPVmpneWJUQXlURFZuVWxFeVdrNVBWSEoxYXpaTVgxWklSbTE2Tkd0R1VVcHlXbTl2VTAxcklpd2lkWE5sY2w5cFpDSTZJa0ZSUVVGQlFVRkJRVUZCUVVGQlBUMGlMQ0oxYzJWeVZtVnlhV1pwWTJGMGFXOXVJam9pSW4wR2MzUnlhVzVuREJBQURtRjFkR2hsYm5ScFkyRjBhVzl1QjF0ZGRXbHVkRGdLX19nQV9fVjdJbU5vWVd4c1pXNW5aU0k2SWprMldWcGpTSEZFTm5sdVdXZEtTelE0VlRkdVdpMDFTRTlEYzJaUWRWQTJPSGg0TmpaeVRYUjRabU1pTENKMWMyVnlYMmxrSWpvaVFWRkJRVUZCUVVGQlFVRkJRVUU5UFNJc0ltRnNiRzkzWldSZlkzSmxaR1Z1ZEdsaGJITWlPbHNpVEU5WVNUTjRabWxNZGtsUU1EUk5SQzlUTWxwdFFUQk1aVmRMTlRsTVJtcEhaMHN3ZVRkVFQxb3pTQ3QzVHpOMWIwaDVTRll6WTJock9EQjVMM2hUVW0xQk9HNWFjVTFEWmtVMGEwdFdURzFsU21JMVZIbG5jRmRxWTJ4clREZzVjbU5ZUTNaWkx6WjZWbTg5SWwwc0luVnpaWEpXWlhKcFptbGpZWFJwYjI0aU9pSWlmUT09fPM5mxCP9cOjsL944xPOW4UsbPnQ-j9VaNdaFY3WB5xz", "lang": "en-US", "i_like_gogs": "ec3be125ff416d1c", "_csrf": "st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA", }, ) @tag('repoDelete') @task def repoDelete(self): self.repoCreate() self.client.post( '/damian/locust/settings', data= '-----------------------------28639370898985976491015983472\r\nContent-Disposition: form-data; name="_csrf"\r\n\r\nst48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA\r\n-----------------------------28639370898985976491015983472\r\nContent-Disposition: form-data; name="action"\r\n\r\ndelete\r\n-----------------------------28639370898985976491015983472\r\nContent-Disposition: form-data; name="repo_name"\r\n\r\nlocust\r\n-----------------------------28639370898985976491015983472\r\nContent-Disposition: form-data; name="auth_text"\r\n\r\nConfirm repository delete: damian/locust\r\n-----------------------------28639370898985976491015983472\r\nContent-Disposition: form-data; name="assertion"\r\n\r\n{"id":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","rawId":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","type":"public-key","response":{"authenticatorData":"SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAAAg","clientDataJSON":"eyJjaGFsbGVuZ2UiOiJxTUp6QjNBTEkxWlZibUxJLXJ2eTJsVHkzWFA0V1hIQUFDWEhCcDlNc1FrIiwiY2xpZW50RXh0ZW5zaW9ucyI6eyJ0eEF1dGhTaW1wbGUiOiJDb25maXJtIHJlcG9zaXRvcnkgZGVsZXRlOiBkYW1pYW4vbG9jdXN0In0sImhhc2hBbGdvcml0aG0iOiJTSEEtMjU2Iiwib3JpZ2luIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODA4MSIsInR5cGUiOiJ3ZWJhdXRobi5nZXQifQ","signature":"MEQCIHOAkg_nhy5QCCVOkdb96ym0y0YaSCf2eYwvO3wj_Y7uAiA7y0vSX2DCSF9TCYL1JQJnd2iBLaTuhnzAAgZGOA7z-Q"}}\r\n-----------------------------28639370898985976491015983472--\r\n', headers={ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "multipart/form-data; boundary=---------------------------28639370898985976491015983472", }, cookies={ "webauthn-session": "MTYxNzYzNjUxMnxEdi1CQkFFQ180SUFBUkFCRUFBQV9nR3hfNElBQWdaemRISnBibWNNRUFBT1lYVjBhR1Z1ZEdsallYUnBiMjRIVzExMWFXNTBPQXJfLUFEXzlYc2lZMmhoYkd4bGJtZGxJam9pY1UxS2VrSXpRVXhKTVZwV1ltMU1TUzF5ZG5reWJGUjVNMWhRTkZkWVNFRkJRMWhJUW5BNVRYTlJheUlzSW5WelpYSmZhV1FpT2lKQlVVRkJRVUZCUVVGQlFVRkJRVDA5SWl3aVlXeHNiM2RsWkY5amNtVmtaVzUwYVdGc2N5STZXeUpNVDFoSk0zaG1hVXgyU1ZBd05FMUVMMU15V20xTU1VWlViSEZ1UTA5M1RXZFJkMEpFVmxGRVVXNU9Wa0Y1VEdOa09WbGhOalJTVWpSVE1FbzBPVU42U1V4QldYbFRlVEpPUmtGQmNsVjJZM2RJUkN0YVZsQnhWRFl4Y210WFJWTnhUMkZDTVcxR1IzSmtZejBpWFN3aWRYTmxjbFpsY21sbWFXTmhkR2x2YmlJNklpSjlCbk4wY21sdVp3d09BQXh5WldkcGMzUnlZWFJwYjI0SFcxMTFhVzUwT0Fwd0FHNTdJbU5vWVd4c1pXNW5aU0k2SWtFd1NrcFBTSE41WkhRemFteHhVMTlXY0RCWVptVnVXVWt3V25WeVMwUXhUMXB6TFVwc2EyZHdVa2tpTENKMWMyVnlYMmxrSWpvaVFWRkJRVUZCUVVGQlFVRkJRVUU5UFNJc0luVnpaWEpXWlhKcFptbGpZWFJwYjI0aU9pSWlmUT09fOclc4GTd0RDNSCY0dg1-52eWCf9H0OpBBBW9qnDYOrV", "lang": "en-US", "i_like_gogs": "ec3be125ff416d1c", "_csrf": "st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA", }, ) @tag('addSSHKey') @task def addSSHKey(self): self.client.post( '/user/settings/ssh', data= '-----------------------------28855191761370269280744625011\r\nContent-Disposition: form-data; name="_csrf"\r\n\r\nst48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA\r\n-----------------------------28855191761370269280744625011\r\nContent-Disposition: form-data; name="title"\r\n\r\nSlo\r\n-----------------------------28855191761370269280744625011\r\nContent-Disposition: form-data; name="content"\r\n\r\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDq1oWk52VynOu479FJh4xqw/y1jVpK+mOtKzFr8uKDg2rZO3Ip7/55raI0nnaupx7sWyqE8FR8EPLXLK1Nl+3Dhs/1EQaRlcVTcbC1GoYihTXfjtafgUgsCdUyq24/a1dD00yEGpjzTghNi4u20VmuDs136pVaaCDjsBwUAHeeM2WsASlTrVvzThVxpAc8LsgZItPYDtnl+3SiS05E89Ff1dPRKRl0vICjCyVthlNtUsyKq8bsLRoA7K3dsCNrrPhIqp7CZiF0R4ooRR5lqAoOOajXrXSWKhUrQC5tFcW0pk7aZfiDOamkVXaoZWEhYtOZ5KwJhGxaY+FN21/eKDQf/2guWMyLX0UPn4d1/eXFq1ATupzjEPkuMzqnseCShO2KwC20JgpfZxcQ2vcQK1SFlXT7XqpWRCZNVt/QdV21xb8ChdQKdJ7ql9R+xtOZN2JMrtqqdJVO4LmlGzoQ6bLi6ouoWYjwoqLacE3uqRkGbKgf6ThA6dVy32A6MnY2VQkYeHJxNPouUqHm2o3T6AwsSws4sjglSqEUamYezBVvWmrme/fADsc9SCe5gZWYMIH2s9KW+7ewnct+TIo0ucQdc1Adzq5vi7DbY50eZZdO/7HobKx/kddR75bsbmo6ZvcU524rEwrrkJIGQRABOGSUhYGWTLJDX8YK6un6APoyvQ== [email protected]\r\n-----------------------------28855191761370269280744625011\r\nContent-Disposition: form-data; name="auth_text"\r\n\r\nAdd SSH key named: Slo\r\n-----------------------------28855191761370269280744625011\r\nContent-Disposition: form-data; name="assertion"\r\n\r\n{"id":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","rawId":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","type":"public-key","response":{"authenticatorData":"SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAAAQ","clientDataJSON":"eyJjaGFsbGVuZ2UiOiItUlliS3lpcVh0c3BuSDdWbEtSR0ZPdkVUaldaXzByb0xLcVpaa051Z0RnIiwiY2xpZW50RXh0ZW5zaW9ucyI6eyJ0eEF1dGhTaW1wbGUiOiJBZGQgU1NIIGtleSBuYW1lZDogU2xvIn0sImhhc2hBbGdvcml0aG0iOiJTSEEtMjU2Iiwib3JpZ2luIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODA4MSIsInR5cGUiOiJ3ZWJhdXRobi5nZXQifQ","signature":"MEYCIQCmtDqrIovs6WADRuyE2vB_O1gSdwjtA6ZeVnYAV81fjwIhAKyqkKhkNdfyJa_GuWCOMzstjjL0bWsMdrv47uLFNw3I"}}\r\n-----------------------------28855191761370269280744625011--\r\n', headers={ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "multipart/form-data; boundary=---------------------------28855191761370269280744625011", }, cookies={ "webauthn-session": "MTYxNzYzNjcyNXxEdi1CQkFFQ180SUFBUkFCRUFBQV9nR3hfNElBQWdaemRISnBibWNNRUFBT1lYVjBhR1Z1ZEdsallYUnBiMjRIVzExMWFXNTBPQXJfLUFEXzlYc2lZMmhoYkd4bGJtZGxJam9pTFZKWllrdDVhWEZZZEhOd2JrZzNWbXhMVWtkR1QzWkZWR3BYV2w4d2NtOU1TM0ZhV210T2RXZEVaeUlzSW5WelpYSmZhV1FpT2lKQlVVRkJRVUZCUVVGQlFVRkJRVDA5SWl3aVlXeHNiM2RsWkY5amNtVmtaVzUwYVdGc2N5STZXeUpNVDFoSk0zaG1hVXgyU1ZBd05FMUVMMU15V20xTU1VWlViSEZ1UTA5M1RXZFJkMEpFVmxGRVVXNU9Wa0Y1VEdOa09WbGhOalJTVWpSVE1FbzBPVU42U1V4QldYbFRlVEpPUmtGQmNsVjJZM2RJUkN0YVZsQnhWRFl4Y210WFJWTnhUMkZDTVcxR1IzSmtZejBpWFN3aWRYTmxjbFpsY21sbWFXTmhkR2x2YmlJNklpSjlCbk4wY21sdVp3d09BQXh5WldkcGMzUnlZWFJwYjI0SFcxMTFhVzUwT0Fwd0FHNTdJbU5vWVd4c1pXNW5aU0k2SWt0bmJHRklPVlU0V0hWNVRscE1URWxITjFkUWNVUkxYME5YVlVOUldUUkNkbU4xTUZKU1ZYVk1hR01pTENKMWMyVnlYMmxrSWpvaVFWRkJRVUZCUVVGQlFVRkJRVUU5UFNJc0luVnpaWEpXWlhKcFptbGpZWFJwYjI0aU9pSWlmUT09fD_-e6R-Q0-TYqVYYrx4ZjWFkOL7vkxUibQL-cwAKu6K", "lang": "en-US", "i_like_gogs": "ec3be125ff416d1c", "_csrf": "st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA", }, ) @tag('deleteSSHKey') @task def deleteSSHKey(self): self.addSSHKey() # Change the ID of the new SSH key to 21 since delete only works on id=21 self.db.execute('update public_key set id=142 where name="Slo";') self.db.commit() self.client.post( '/user/settings/ssh/delete', data= '-----------------------------35060146163145915068482167655\r\nContent-Disposition: form-data; name="_csrf"\r\n\r\nst48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA\r\n-----------------------------35060146163145915068482167655\r\nContent-Disposition: form-data; name="id"\r\n\r\n142\r\n-----------------------------35060146163145915068482167655\r\nContent-Disposition: form-data; name="auth_text"\r\n\r\nDelete SSH key named: Slo\r\n-----------------------------35060146163145915068482167655\r\nContent-Disposition: form-data; name="assertion"\r\n\r\n{"id":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","rawId":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","type":"public-key","response":{"authenticatorData":"SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAAAg","clientDataJSON":"eyJjaGFsbGVuZ2UiOiIwNUJ3ZEpYTzl6RVVzbE1YdnlaYVRtUWN2WV9WZWZ5WHh2YmRFUVlpekY4IiwiY2xpZW50RXh0ZW5zaW9ucyI6eyJ0eEF1dGhTaW1wbGUiOiJEZWxldGUgU1NIIGtleSBuYW1lZDogU2xvIn0sImhhc2hBbGdvcml0aG0iOiJTSEEtMjU2Iiwib3JpZ2luIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODA4MSIsInR5cGUiOiJ3ZWJhdXRobi5nZXQifQ","signature":"MEYCIQDUS7i9chpkm3pFVrbGWKY9xzZ-3Aw19W1H1c9QK0J7EgIhALwAoVzzU5TCGe9Qccc1hcFP04I74iUwmQzbyTuoLHx4"}}\r\n-----------------------------35060146163145915068482167655--\r\n', headers={ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "multipart/form-data; boundary=---------------------------35060146163145915068482167655", }, cookies={ "webauthn-session": "MTYxNzYzNjc4OXxEdi1CQkFFQ180SUFBUkFCRUFBQV9nR3hfNElBQWdaemRISnBibWNNRGdBTWNtVm5hWE4wY21GMGFXOXVCMXRkZFdsdWREZ0tjQUJ1ZXlKamFHRnNiR1Z1WjJVaU9pSkxaMnhoU0RsVk9GaDFlVTVhVEV4SlJ6ZFhVSEZFUzE5RFYxVkRVVmswUW5aamRUQlNVbFYxVEdoaklpd2lkWE5sY2w5cFpDSTZJa0ZSUVVGQlFVRkJRVUZCUVVGQlBUMGlMQ0oxYzJWeVZtVnlhV1pwWTJGMGFXOXVJam9pSW4wR2MzUnlhVzVuREJBQURtRjFkR2hsYm5ScFkyRjBhVzl1QjF0ZGRXbHVkRGdLX19nQV9fVjdJbU5vWVd4c1pXNW5aU0k2SWpBMVFuZGtTbGhQT1hwRlZYTnNUVmgyZVZwaFZHMVJZM1paWDFabFpubFllSFppWkVWUldXbDZSamdpTENKMWMyVnlYMmxrSWpvaVFWRkJRVUZCUVVGQlFVRkJRVUU5UFNJc0ltRnNiRzkzWldSZlkzSmxaR1Z1ZEdsaGJITWlPbHNpVEU5WVNUTjRabWxNZGtsUU1EUk5SQzlUTWxwdFRERkdWR3h4YmtOUGQwMW5VWGRDUkZaUlJGRnVUbFpCZVV4alpEbFpZVFkwVWxJMFV6QktORGxEZWtsTVFWbDVVM2t5VGtaQlFYSlZkbU4zU0VRcldsWlFjVlEyTVhKclYwVlRjVTloUWpGdFJrZHlaR005SWwwc0luVnpaWEpXWlhKcFptbGpZWFJwYjI0aU9pSWlmUT09fGbQqU7CE4lNYA1oP_1IH3y7ZeWO4YyAKh5kZYezifHQ", "lang": "en-US", "i_like_gogs": "ec3be125ff416d1c", "_csrf": "st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA", }, ) @tag('settingsChangeEmail') @task def settingsChangeEmail(self): self.client.post( '/user/settings', data= '-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="_csrf"\r\n\r\nst48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="name"\r\n\r\ndamian\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="full_name"\r\n\r\n\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="email"\r\n\r\[email protected]\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="website"\r\n\r\n\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="location"\r\n\r\n\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="auth_text"\r\n\r\nConfirm profile details: username damian email [email protected]\r\n-----------------------------25729813608612628233745707030\r\nContent-Disposition: form-data; name="assertion"\r\n\r\n{"id":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","rawId":"LOXI3xfiLvIP04MD_S2ZmL1FTlqnCOwMgQwBDVQDQnNVAyLcd9Ya64RR4S0J49CzILAYySy2NFAArUvcwHD-ZVPqT61rkWESqOaB1mFGrdc","type":"public-key","response":{"authenticatorData":"SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAAAw","clientDataJSON":"eyJjaGFsbGVuZ2UiOiJLcUkyb0xmdG05ZHlsZWhtZUowa1M4WVE5aTBFVEZ5WW1vNlZCamdSQ2o0IiwiY2xpZW50RXh0ZW5zaW9ucyI6eyJ0eEF1dGhTaW1wbGUiOiJDb25maXJtIHByb2ZpbGUgZGV0YWlsczogdXNlcm5hbWUgZGFtaWFuIGVtYWlsIHRlc3RAZW1haWwuY29tIn0sImhhc2hBbGdvcml0aG0iOiJTSEEtMjU2Iiwib3JpZ2luIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6ODA4MSIsInR5cGUiOiJ3ZWJhdXRobi5nZXQifQ","signature":"MEYCIQCU6qt64NXYvrpOcauB954HgeKLRH9NW2CN1Wjt99leHgIhAN43ri1muQjLxi4rgMHpXWf8aSTUhbRnGq95O2LAX9j4"}}\r\n-----------------------------25729813608612628233745707030--\r\n', headers={ "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Content-Type": "multipart/form-data; boundary=---------------------------25729813608612628233745707030" }, cookies={ "_csrf": "st48teqCv6sq03z6OSCqLGk538Q6MTYxNzU1OTA3ODc2OTkyNTkxNA", "lang": "en-US", "i_like_gogs": "ec3be125ff416d1c", "webauthn-session": "MTYxNzYzNjk0NXxEdi1CQkFFQ180SUFBUkFCRUFBQV9nR3hfNElBQWdaemRISnBibWNNRGdBTWNtVm5hWE4wY21GMGFXOXVCMXRkZFdsdWREZ0tjQUJ1ZXlKamFHRnNiR1Z1WjJVaU9pSkxaMnhoU0RsVk9GaDFlVTVhVEV4SlJ6ZFhVSEZFUzE5RFYxVkRVVmswUW5aamRUQlNVbFYxVEdoaklpd2lkWE5sY2w5cFpDSTZJa0ZSUVVGQlFVRkJRVUZCUVVGQlBUMGlMQ0oxYzJWeVZtVnlhV1pwWTJGMGFXOXVJam9pSW4wR2MzUnlhVzVuREJBQURtRjFkR2hsYm5ScFkyRjBhVzl1QjF0ZGRXbHVkRGdLX19nQV9fVjdJbU5vWVd4c1pXNW5aU0k2SWt0eFNUSnZUR1owYlRsa2VXeGxhRzFsU2pCclV6aFpVVGxwTUVWVVJubFpiVzgyVmtKcVoxSkRhalFpTENKMWMyVnlYMmxrSWpvaVFWRkJRVUZCUVVGQlFVRkJRVUU5UFNJc0ltRnNiRzkzWldSZlkzSmxaR1Z1ZEdsaGJITWlPbHNpVEU5WVNUTjRabWxNZGtsUU1EUk5SQzlUTWxwdFRERkdWR3h4YmtOUGQwMW5VWGRDUkZaUlJGRnVUbFpCZVV4alpEbFpZVFkwVWxJMFV6QktORGxEZWtsTVFWbDVVM2t5VGtaQlFYSlZkbU4zU0VRcldsWlFjVlEyTVhKclYwVlRjVTloUWpGdFJrZHlaR005SWwwc0luVnpaWEpXWlhKcFptbGpZWFJwYjI0aU9pSWlmUT09fN8dzZ13MZ1unHqZj8gq0aRLTNcIazFMyH4JUFfrMtQz", })
def constant_ips(ips): return constant_pacing(1.0 / ips)