双重身份验证请求

时间:2015-09-12 13:38:44

标签: python python-requests locust

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

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

问题是即使跳过第二次身份验证,Locust也不会显示失败。换句话说,如果我执行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,或者任何错误。

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

1 个答案:

答案 0 :(得分:3)

要测试登录所需页面,您应该在标题中发送loged-in用户的信息(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})