【问题标题】:Why am I getting a 403 error when running Locust?为什么我在运行 Locust 时收到 403 错误?
【发布时间】:2015-01-31 09:45:43
【问题描述】:

我正在使用Locust (python) 在 Django Web 应用程序上加载测试。我在运行脚本时不断收到 403 错误。

代码如下:

  from locust import HttpLocust, TaskSet

def index(l):
    l.client.get("/")
def login(l):
    l.client.post("/login/", {"username":"an@id.com", "password":"education")
def upload(l):
    l.client.get("/upload-image/")
def home(l):
	 l.client.get("/home/")
def settings(l):
	l.client.get("/settings/")
def logout(l):
	l.client.get("/logout/")
class UserBehavior(TaskSet):
    tasks = {index:1, upload:1, home:1, settings:1, logout:1}

    def on_start(self):
        login(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=5000
    max_wait=9000

【问题讨论】:

  • 状态 403 表示禁止,因此您的凭据错误。用户不存在或者您忘记将 CSRF 令牌传递给您的视图。
  • 怎么传入crsf token
  • 请注意,将注销作为任务意味着 Locust 有时会选择它,然后您将有未经授权的客户端尝试与您的应用程序交互,您将再次遇到 401/403 错误。

标签: python django load-testing http-status-code-403 locust


【解决方案1】:

要扩展 ZacDelagrange 的答案,当您使用 https 时,您还必须设置 Referer 标头,因此在此示例中您可以这样做

def on_start(self):
    """ Run on start for every Locust hatched """
    r = self.client.get('')
    self.client.headers['Referer'] = self.client.base_url
    self.client.post('/accounts/login/', 
        {'email': 'email', 'password': 'password',
         'csrfmiddlewaretoken': r.cookies['csrftoken']})

【讨论】:

  • 谢谢,在我阅读您的回答之前,我认为推荐人是我的问题。
【解决方案2】:

在您的根页面或登录页面上获取,从响应 cookie 中获取 csrf 令牌,然后使用 csrftoken 发布到您的登录 url。这应该将 csrf 令牌添加到客户端的 cookie 中并允许您浏览页面。

def on_start(self):
    """ Run on start for every Locust hatched """
    r = self.client.get('')
    self.client.post('/accounts/login/', 
        {'email': 'email', 'password': 'password',
         'csrfmiddlewaretoken': r.cookies['csrftoken']})

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 2017-10-20
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2019-10-28
    • 2010-09-15
    相关资源
    最近更新 更多