2014-12-03 19 views
5

Witam Używam locustio (python) do testowania obciążenia na webappie (django). Wyzwanie, że zawsze próbuję go przetestować, zawsze otrzymuję błąd 403. On jest kodTestowanie obciążenia 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

status 403 oznacza zakazane, więc poświadczenia jest źle. Albo użytkownik nie istnieje, albo zapomniałeś przekazać token CSRF do widoku. –

+0

Jak przekazać tokenowi crsf – atkawa7

+0

Po prostu wiadomość, że wylogowanie się jako zadanie oznacza, że ​​Locust wybierze to czasami, a następnie będziesz miał nieautoryzowanego klienta próbującego wejść w interakcję z twoją aplikacją, i znowu dostaniesz 401/403 błędów . – Zeroth

Odpowiedz

7

zrobic dostać na swojej stronie głównego lub logowania, chwycić token CSRF z cookie odpowiedzi i dodawać do logowania adresu URL z csrftoken. Powinno to dodać token csrf do plików cookie klienta i umożliwia przeglądanie strony.

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

Aby rozwinąć na odpowiedź ZacDelagrange jest, gdy używasz https, należy również ustawić nagłówek Referer, więc w tym przykładzie można zrobić

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

Dzięki, myślę, że referferer był dla mnie problemem, zanim przeczytam twoją odpowiedź. – goetz

Powiązane problemy