2014-11-07 11 views
5

Non voglio testare la mia app web django con locust.io. In forma ho ho il problema che è protetto con un token CSRF. Faccio la seguente:come mantenere la sessione e il token CSRF nel test del 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"}) 

Perché ottengo un errore di 403? Che il post è fobidden, la documentazione locusta dice che gli oggetti client mantiene la sessione in vita ..

risposta

13

modificare il codice come:

@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

Ciò fallito su pallone-WTF credo . Dovrei analizzare la "sessione = ...." per ottenere csrftoken in una fiaschetta? – jiamo

1

mi sono imbattuto in questo problema l'esecuzione di un test di Locuste contro Django 1.8.5 ed è necessario aggiungere il token CSRF ai biscotti, intestazioni e dati dei moduli POST così come qui di seguito, al fine di non farsi prendere con un 403. Qualcosa di simile:

@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})