2

我正在负载测试一个本地 API,它将根据一些条件重定向用户。Locust 不会重定向模拟用户到达端点,我知道这一点,因为该应用程序记录了所有重定向。如果我使用 手动点击端点curl,我可以看到状态是302并且Location标题已设置。

根据嵌入的clients.HttpSession.request对象,该allow_redirects选项默认设置为 True。

有任何想法吗?

4

2 回答 2

3

我们在 locust 测试中使用重定向,尤其是在登录阶段。重定向为我们处理顺利。打印status_code您返回的响应。是 200、3xx 还是更糟的?

另一个建议:不要将整个测试工作流程放入 locust 文件中。这使得调试问题变得非常困难。相反,创建一个独立的 Python 脚本,直接使用 Python 请求库来模拟您的工作流程。在这个简单的非蝗虫测试脚本中解决任何问题,例如重定向问题。完成该工作后,将所做的工作提取到文件或类中,并让 locust 任务使用该类。

这是我的意思的一个例子。FooApplication做真正的工作。他被 locust 文件和一个简单的测试脚本所消耗。

foo_app.py

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

foo_test_client.py

# 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()

蝗虫文件.py

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()
于 2017-11-17T16:56:16.530 回答
1

由于 Locust 使用 Python 的 Requests HTTP 库,您可能会在那里找到答案。 Response 对象可用于评估是否发生了重定向以及重定向历史记录包含的内容。

is_redirect:

如果此响应是可以自动处理(通过 Session.resolve_redirects)的格式良好的 HTTP 重定向,则为真。

可能有迹象表明重定向格式不正确。

于 2017-10-30T08:00:50.790 回答