如何在locus测试中保持会话和CSRF令牌

时间:2014-11-07 15:10:36

标签: debugging csrf locust

我不想用locust.io测试我的django网络应用程序。在ha形式中,我遇到了使用CSRF令牌保护的问题。我做了以下事情:

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

为什么会出现403错误?该帖子被fobidden,蝗虫文档说客户端对象保持会话活着..

2 个答案:

答案 0 :(得分:15)

将您的代码更改为:

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

答案 1 :(得分:1)

我遇到了针对Django 1.8.5运行Locust测试的问题,并且需要将csrf令牌添加到cookie,标题和表单POST数据以及下面的内容,以便不会遇到403.像:

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