2014-11-07 9 views
5

Ich möchte meine django Web App mit locust.io testen. In ha Form habe ich das Problem, dass es mit einem CSRF Token gesichert ist. Ich folgendes tun:wie man Session und CSRF Token im Locustest hält

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

Warum erhalte ich einen 403 Fehler entdeckt? Dass die Post fobidden ist, sagt die Heuschrecke Dokumentation, dass die Client-Objekte die Sitzung am Leben hält ..

Antwort

13

Code ändern:

@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

Dieses über gescheiterte wird Kolben-wtf ich denke, . Soll ich die "Session = ...." analysieren, um csrftoken in der Flasche zu bekommen? – jiamo

1

ich in dieses Problem lief ein Locust-Test gegen Django läuft 1.8.5 und es bedurfte Hinzufügen des csrf Token zu den Cookies, Header und Form POST-Daten als auch wie unten, um nicht mit einem 403. so etwas zu verfangen:

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