4 python load http python-requests locust
我想在网站上做一些负载测试。首先,这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
我正在运行 locust :locust --host= https://my_host。
我总是收到 405 err 错误报告:
11 POST /sign_in: "CatchResponseError('登录失败',)"
有人可以向我解释如何确保我已登录以及如何使用 locust 执行此操作吗?我有点困惑,因为我也尝试过使用令牌等使事情工作,但仍然相同。
小智 11
您可能需要尝试一些“愚蠢”的事情,具体取决于您的 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
Run Code Online (Sandbox Code Playgroud)
在我的情况下,调用sign_in, 返回 akey然后我将其用作我的请求的令牌。希望这会有所帮助,我对 Locust 也很陌生。
| 归档时间: |
|
| 查看次数: |
5812 次 |
| 最近记录: |