请求双重授权

Double auth with requests

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

我第一次使用 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 或任何与此相关的错误。

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

为了测试需要登录的页面,您应该在 header 中发送 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})