我正在负载测试一个本地 API,它将根据一些条件重定向用户。Locust 不会重定向模拟用户到达端点,我知道这一点,因为该应用程序记录了所有重定向。如果我使用 手动点击端点curl
,我可以看到状态是302
并且Location
标题已设置。
根据嵌入的clients.HttpSession.request对象,该allow_redirects
选项默认设置为 True。
有任何想法吗?
我正在负载测试一个本地 API,它将根据一些条件重定向用户。Locust 不会重定向模拟用户到达端点,我知道这一点,因为该应用程序记录了所有重定向。如果我使用 手动点击端点curl
,我可以看到状态是302
并且Location
标题已设置。
根据嵌入的clients.HttpSession.request对象,该allow_redirects
选项默认设置为 True。
有任何想法吗?
我们在 locust 测试中使用重定向,尤其是在登录阶段。重定向为我们处理顺利。打印status_code
您返回的响应。是 200、3xx 还是更糟的?
另一个建议:不要将整个测试工作流程放入 locust 文件中。这使得调试问题变得非常困难。相反,创建一个独立的 Python 脚本,直接使用 Python 请求库来模拟您的工作流程。在这个简单的非蝗虫测试脚本中解决任何问题,例如重定向问题。完成该工作后,将所做的工作提取到文件或类中,并让 locust 任务使用该类。
这是我的意思的一个例子。FooApplication
做真正的工作。他被 locust 文件和一个简单的测试脚本所消耗。
class FooApplication():
def __init__(self, client):
self.client = client
self.is_logged_in = False
def login(self):
self.client.cookies.clear()
self.is_logged_in = False
name = '/login'
response = self.client.post('/login', {
'user': 'testuser',
'password': '12345'
}, allow_redirects=True, name=name)
if not response.ok:
self.log_failure('Login failed', name, response)
def load_foo(self):
name = '/foo'
response = self.client.get('/foo', name=name)
if not response.ok:
self.log_failure('Foo request failed ', name, response)
def log_failure(self, message, name, response):
pass # add some logging
# Use this test file to iron out kinks in your request workflow
import requests
from locust.clients import HttpSession
from foo_app import FooApplication
client = HttpSession('http://dev.foo.com')
app = FooApplication(client)
app.login()
app.load_foo()
from foo_app import FooApplication
class FooTaskSet(TaskSet):
def on_start(self):
self.foo = FooApplication(self.client)
@task(1)
def login(self):
if not self.foo.is_logged_in:
self.foo.login()
@task(5) # 5x more likely to load a foo vs logging in again
def load_foo(self):
if self.foo.is_logged_in:
self.load_foo()
else:
self.login()
由于 Locust 使用 Python 的 Requests HTTP 库,您可能会在那里找到答案。 Response 对象可用于评估是否发生了重定向以及重定向历史记录包含的内容。
is_redirect:
如果此响应是可以自动处理(通过 Session.resolve_redirects)的格式良好的 HTTP 重定向,则为真。
可能有迹象表明重定向格式不正确。