我想在网站上进行一些负载测试。 首先,这是我的代码:
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def login(self):
post_data = {'username':'my_login', 'password':'my_pass', 'Login':'Login'}
with self.client.post('/sign_in', post_data, catch_response=True) as response:
if 'cookie' not in response.cookies:
response.failure('login failed')
@task(2)
def index(self):
self.client.get("/admin")
@task(1)
def profile(self):
self.client.get("/profile")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
我正在运行蝗虫: locust --host = https://my_host 。
我总是收到405错误报告:
11 POST / sign_in:" CatchResponseError('登录失败',)" 的
有人可以向我解释如何确保我已登录以及如何使用蝗虫进行此操作? 我有点困惑,因为我也尝试过使用令牌等等,但仍然是一样的。
答案 0 :(得分:1)
有些"愚蠢"根据API的工作方式,您可能需要尝试的事项如下:
'/sign_in/'
代替'/sign_in'
。http
时出错,但在使用https
时它可以正常工作。您可能也想尝试一下。 'https://my_host/v1/sign_in/'
。至于使用令牌登录,下面的代码对我来说很好:
from locust import HttpLocust, TaskSet, task
import json
class UserBehavior(TaskSet):
def __init__(self, parent):
super(UserBehavior, self).__init__(parent)
self.token = ""
self.headers = {}
def on_start(self):
self.token = self.login()
self.headers = {'Authorization': 'Token ' + self.token}
def login(self):
response = self.client.post("/sign_in/", data={'username':'my_login', 'password':'my_pass', 'Login':'Login'})
return json.loads(response._content)['key']
@task(2)
def index(self):
self.client.get("/admin/", headers=self.headers)
@task(1)
def profile(self):
self.client.get("/profile/", headers=self.headers)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
在我调用sign_in
的情况下,返回一个key
,然后我将其用作我的请求的令牌。希望这有帮助,我对蝗虫也很陌生。