2014-11-07 13 views
5

Nie chcę testować mojej aplikacji internetowej django z locust.io. W formie ha mam problem, że jest zabezpieczony tokenem CSRF. Wykonuję następujące czynności:jak zachować sesję i token CSRF w teście locus

class WebsiteTasks(TaskSet): 
    def on_start(self): 
     print("On start") 

    @task 
    def post_answer(self): 
     self.client.get("/polls/2/vote") 
     self.client.post("/polls/2/vote/", {"choice": "8"}) 

Dlaczego pojawia się błąd 403? dokumentacja szarańcza, że ​​post jest fobidden, mówi, że obiekty klienckie utrzymuje sesję żyje ..

Odpowiedz

13

zmienić swój kod jako:

@task 
def post_answer(self): 
    response = self.client.get("/polls/2/vote") 
    csrftoken = response.cookies['csrftoken'] 

    self.client.post("/polls/2/vote/", 
        {"choice": "8"}, 
        headers={"X-CSRFToken": csrftoken}) 
+0

to nieudanej na kolbie-wtf myślę . Czy powinienem przeanalizować "session = ....", aby uzyskać csrftoken w kolbie? – jiamo

1

wpadłem na ten problem uruchomiony test Locust przeciwko Django 1.8.5 a to wymaga dodawania token CSRF do plików cookie, nagłówków i danych formularza POST oraz jak poniżej, aby nie dać się wciągnąć w 403. coś takiego:

@task 
def post_answer(self): 
    response = self.client.get("/polls/2/vote") 
    csrftoken = response.cookies['csrftoken'] 

    self.client.post("/polls/2/vote/", {"choice": "8", 
        "csrfmiddlewaretoken": csrftoken}, 
        headers={"X-CSRFToken": csrftoken}, 
        cookies={"csrftoken": csrftoken})