【问题标题】:Double auth with requests带有请求的双重身份验证
【发布时间】:2015-09-12 13:38:44
【问题描述】:

我正在使用 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 或任何错误。

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

【问题讨论】:

    标签: python python-requests locust


    【解决方案1】:

    为了测试需要登录的页面,您应该在标题中发送登录用户的信息(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-21
      • 2012-11-29
      • 2017-06-01
      • 1970-01-01
      • 2012-04-11
      • 2020-07-10
      • 2016-03-15
      • 2018-02-26
      • 1970-01-01
      相关资源
      最近更新 更多