11

我正在使用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

4

2 回答 2

16

要扩展 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']})
于 2015-12-23T22:57:42.453 回答
7

在您的根页面或登录页面上获取,从响应 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']})
于 2015-01-20T21:30:45.940 回答