我正在使用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,或者任何错误。
请帮我正确地做到这一点。
答案 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})