2014-12-03 25 views
5

Ciao Sto usando un locustio (python) per testare il carico su una webapp (django). La sfida che ottengo sempre un errore 403 quando provo a testarlo. Egli è il codiceTest di carico django locustio

from locust import HttpLocust, TaskSet 
 

 
def index(l): 
 
    l.client.get("/") 
 
def login(l): 
 
    l.client.post("/login/", {"username":"[email protected]", "password":"education") 
 
def upload(l): 
 
    l.client.get("/upload-image/") 
 
def home(l): 
 
\t l.client.get("/home/") 
 
def settings(l): 
 
\t l.client.get("/settings/") 
 
def logout(l): 
 
\t l.client.get("/logout/") 
 
class UserBehavior(TaskSet): 
 
    tasks = {index:1, upload:1, home:1, settings:1, logout:1} 
 

 
    def on_start(self): 
 
     login(self) 
 

 
class WebsiteUser(HttpLocust): 
 
    task_set = UserBehavior 
 
    min_wait=5000 
 
    max_wait=9000

+0

Lo stato 403 significa proibito, in modo che le credenziali sono sbagliati. O l'utente non esiste o hai dimenticato di passare il token CSRF alla tua vista. –

+0

Come si passa in un token crsf – atkawa7

+0

Solo una nota, con il logout come attività significa che Locust lo sceglierà a volte e quindi si avrà un client non autorizzato che tenta di interagire con l'applicazione, e si otterranno nuovamente errori 401/403 . – Zeroth

risposta

7

Fare un ottenere sulla tua pagina principale o di login, afferrare il token CSRF dal cookie di risposta, e inserire nel tuo URL di login con il csrftoken. Questo dovrebbe aggiungere il token csrf ai cookie del client e consentire di esplorare la pagina.

def on_start(self): 
    """ Run on start for every Locust hatched """ 
    r = self.client.get('') 
    self.client.post('/accounts/login/', 
     {'email': 'email', 'password': 'password', 
     'csrfmiddlewaretoken': r.cookies['csrftoken']}) 
5

Ad ampliare la risposta di ZacDelagrange, quando si utilizza HTTPS, è necessario anche impostare l'intestazione di provenienza, quindi in questo esempio si potrebbe fare

def on_start(self): 
    """ Run on start for every Locust hatched """ 
    r = self.client.get('') 
    self.client.headers['Referer'] = self.client.base_url 
    self.client.post('/accounts/login/', 
     {'email': 'email', 'password': 'password', 
     'csrfmiddlewaretoken': r.cookies['csrftoken']}) 
+0

Grazie, penso che il referente è stato il problema per me prima di leggere la tua risposta. – goetz