debugging 如何在Locus测试中保留会话和CSRF令牌

um6iljoc  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(124)

我不想用locust.io来测试我的Django web应用。在一个表单中,我遇到了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错误?post是被禁止的,locus文档说客户端对象使会话保持活动状态。

j9per5c4

j9per5c41#

将代码更改为:

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

c2e8gylq2#

我在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})

相关问题