Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

801
Views
Locust: ¿cómo comparto la cookie de autenticación con el resto de tareas solo para el usuario actual de Locust?

Estoy buscando mover mi secuencia de comandos de Python de subprocesos múltiples a Locust.

Una explicación simple de lo que hace mi script es:

  1. Crear un hilo por usuario
  2. En cada hilo autentica al usuario y obtiene la cookie de autenticación.
  3. Con esa cookie de autenticación, realice varias llamadas API en un intervalo establecido

Cuando comencé a investigar Locust, me di cuenta de que la única forma de realizar cada tarea en su propio intervalo específico, necesitaría crear un conjunto de tareas por tarea.

Esto planteó un problema de cómo comparto la cookie de autenticación para el usuario generado dado entre conjuntos de tareas. Dado que, a la larga, también necesito compartir datos de respuesta entre el conjunto de tareas para el usuario generado dado, ya que difiere entre los usuarios generados.

En el código de muestra a continuación, todos los usuarios generados por Locust comparten el mismo "storage.cookie". ¿Hay alguna manera de mantener storage.cookie única por usuario, compartirla con todos los conjuntos de tareas para el usuario generado por langosta? ¿Locust informa sobre qué usuario está ejecutando la tarea actualmente?

 from __future__ import print_function from locust import Locust, TaskSet, task, HttpLocust import json def auth(l): payload = {"username":"some_username","password":"some_password"} resp = l.client.post('/auth', data = json.dumps(payload)) storage.cookie = # get auth cookie from resp def do_i_auth(l): if len(storage.cookie) == 0: auth(l) class storage(object): cookie == '' class first_call(TaskSet): def on_start(self): do_i_auth(self) @task def get_api_a(self): headers = {"Cookie":storage.cookie} self.client.get('/api_a', headers) class second_call(TaskSet): def on_start(self): do_i_auth(self) @task def get_api_b(self): headers = {"Cookie":storage.cookie} self.client.get('/api_b', headers) class api_A(HttpLocust): task_set = first_call min_wait = 5000 max_wait = 5000 class api_B(HttpLocust): task_set = second_call min_wait = 10000 max_wait = 10000
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede intentar que su función de autorización devuelva la cookie y que se almacene en cada clase por separado. Algo como esto:

 from __future__ import print_function from locust import Locust, TaskSet, task, HttpLocust import json def auth(l): payload = {"username":"some_username","password":"some_password"} resp = l.client.post('/auth', data = json.dumps(payload)) cookie = # get auth cookie from resp return cookie class first_call(TaskSet): cookie = "" def on_start(self): self.cookie = auth(self) @task def get_api_a(self): headers = {"Cookie":self.cookie} self.client.get('/api_a', headers)
over 4 years ago · Santiago Trujillo Report

0

Creo que la solución aquí es no tener clases separadas para cada llamada, sino tener las llamadas como métodos en una sola clase. De esa manera, puede almacenar las cookies en los objetos (referenciados a través self.cookie ).

Esto funcionó para mí:

https://gist.github.com/MatrixManAtYrService/1d83abd54adc9d4181f9ebb98b9799f7

over 4 years ago · Santiago Trujillo Report

0

Recientemente implementé cookies en un script de prueba de carga de aplicaciones DotNet.

Las cookies deben pasarse mediante objetos de diccionario.

 cookiedict={} cookiedict['Key1'] = 'Value1' cookiedict['Key2'] = 'Value2' #Auth API self.auth_response = self.gettoken(cookiedict) self.token = self.auth_response.cookies['RequestVerificationToken'] self.cookies = self.auth_response.cookies #Login API cookiedict['RequestVerificationToken'] = self.token ` self.login_response=self.login(self.user_name,self.password,self.token,cookiedict)

También tenga en cuenta que también necesita usar HttpSession

 from locust.clients import HttpSession self.requests = HttpSession(consumer_cfg.rest_api_url) executor = self.requests.post if method == 'PUT': executor = self.requests.put elif method == 'GET': executor = self.requests.get self._request_proceed(method='GET', url=url, data=formdata,catch_response=catch_response, cookies = CookiesSent,allow_redirects = True)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!