3

我正在使用 Locust(它使用 Requests)来进行页面加载测试。该页面有一个弹出窗口,要求用户名和密码访问该页面,并且有一个标准登录页面。

client.auth第一次使用身份验证(在弹出窗口上)打开页面并在 POST 请求中发送数据以登录帐户。

问题是蝗虫从不显示失败,即使我跳过了第二次身份验证。换句话说,如果我进行 client.auth 身份验证,我可以获取任何页面(甚至是需要身份验证的页面,并且我跳过了第二次身份验证)并且 Locust 不会显示 401 错误。所以我在这里做错了。

这是我正在使用的代码:

class UserBehavior(TaskSet):
def on_start(self):
    self.login()

def login(self):
    # Set basic auth credentials
    if BASIC_AUTH_CREDENTIALS:
        self.client.auth = BASIC_AUTH_CREDENTIALS

    headers = {
        'referer': 'http://myreferer.com'
    }
    data = {
        'username': 'John',
        'password': 'Doe',
        'csrfmiddlewaretoken': '123456712345671234567'
    }

    r = self.client.post('/login', data=data, headers=headers)

@task
def progress(self):
    self.client.get("/needed/authorization")

我想要的是测量当许多用户尝试加载页面时加载页面所需的时间。我有几个页面可以测量,一个加载速度快,另一个加载速度慢得多,但测试显示两者的值相同。我认为 Locust 的模拟用户每次都会被重定向到登录页面,因此他们具有相同的响应时间并且不会报告 401 或 404 或任何错误。

请帮助我正确地做到这一点。

4

1 回答 1

3

为了测试需要登录的页面,您应该在标题中发送登录用户的信息(cookie)。

class UserBehavior(TaskSet):

cookie = ""

def on_start(self):
    self.cookie = self.get_user_cookie()

def get_user_cookie(self):
    # Set basic auth credentials
    if BASIC_AUTH_CREDENTIALS:
        self.client.auth = BASIC_AUTH_CREDENTIALS

    headers = {
        'referer': 'http://myreferer.com'
    }
    data = {
        'username': 'John',
        'password': 'Doe',
        'csrfmiddlewaretoken': '123456712345671234567'
    }

    r = self.client.post('/login', data=data, headers=headers)
    if r.status_code == 200:
        return r.request.headers['Cookie']
    else:
        print "User cannot login"

@task
def progress(self):
    self.client.get("/needed/authorization", headers = {"Cookie": self.cookie})
于 2015-09-30T14:18:40.957 回答