2014-12-03 9 views
5

Hallo Ich benutze eine Locustio (Python), um die Last auf einer Webapp (Django) zu testen. Die Herausforderung, dass ich immer einen Fehler 403 bekomme, wenn ich versuche, es zu testen. Er ist der CodeBelastungstest 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

Ein Status von 403 bedeutet, verboten, so dass Ihre Anmeldeinformationen tun könnte sind falsch. Entweder existiert der Benutzer nicht oder Sie haben vergessen, das CSRF-Token an Ihre Ansicht zu übergeben. –

+0

Wie übergeben Sie ein crsf Token – atkawa7

+0

Nur eine Anmerkung, Abmeldung als eine Aufgabe bedeutet, dass Locust wird das manchmal auswählen und dann haben Sie einen nicht autorisierten Client versuchen, mit Ihrer Anwendung zu interagieren, und Sie werden wieder 401/403 Fehler bekommen . – Zeroth

Antwort

7

Sie ein auf Ihre Wurzel oder Login-Seite erhalten, die csrf Token aus der Antwort Cookie greifen, und posten Sie Ihre Login-URL mit dem csrftoken. Dies sollte das csrf-Token zu den Cookies des Clients hinzufügen und Ihnen ermöglichen, die Seite zu durchsuchen.

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

auf ZacDelagrange Antwort zu erweitern, wenn Sie HTTPS verwenden, müssen Sie auch den Referer-Header gesetzt, so in diesem Beispiel Sie

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

Danke, ich denke, der Referer war das Thema für mich, bevor ich deine Antwort gelesen habe. – goetz