使用蝗虫httpsession可以将catch_response默认为true

发布于 2025-02-12 03:03:42 字数 78 浏览 1 评论 0原文

我们最终在几乎每个请求上都设置了Catch_Response = true。是否存在将此设置默认为true而不是false的配置或另一种方式?

We end up setting catch_response = True on almost every request we make. Is there a configuration or another way of defaulting this setting to true instead of false?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贱贱哒 2025-02-19 03:03:42

是的!您可以覆盖该方法,类似于它在Reltuser中的完成方式( https://github.com/svenskaspel/locust-plugins/blob/master/locust_plugins/rest.py.py

此方法所做的不仅仅是设置cate> catch_response = true ,直接在用户上,而不是在会话上,但应该让您开始:

@contextmanager
def rest(
    self, method, url, headers: Optional[dict] = None, **kwargs
) -> Generator[RestResponseContextManager, None, None]:
    headers = {"Content-Type": "application/json", "Accept": "application/json"} if headers is None else headers
    with self.client.request(method, url, catch_response=True, headers=headers, **kwargs) as resp:
        resp: RestResponseContextManager
        resp.js = None
        if resp.text is None:
            # round the response time to nearest second to improve error grouping
            response_time = round(resp.request_meta["response_time"] / 1000, 1)
            resp.failure(
                f"response body None, error {resp.error}, response code {resp.status_code}, response time ~{response_time}s"
            )
        else:
            if resp.text:
                try:
                    resp.js = autoviv.loads(resp.text)
                except JSONDecodeError as e:
                    resp.failure(
                        f"Could not parse response as JSON. {resp.text[:250]}, response code {resp.status_code}, error {e}"
                    )
        try:
            resp: RestResponseContextManager  # pylint is stupid
            yield resp
        except AssertionError as e:
            if e.args:
                if e.args[0].endswith(","):
                    short_resp = resp.text[:200] if resp.text else resp.text
                    resp.failure(f"{e.args[0][:-1]}, response was {short_resp}")
                else:
                    resp.failure(e.args[0])
            else:
                resp.failure("Assertion failed")

        except Exception as e:
            error_lines = []
            for l in traceback.format_exc().split("\n"):
                m = self._callstack_regex.match(l)
                if m:
                    filename = re.sub(r"/(home|Users/\w*)/", "~/", m.group(1))
                    error_lines.append(filename + ":" + m.group(2) + m.group(3))
                short_resp = resp.text[:200] if resp.text else resp.text
                resp.failure(f"{e.__class__.__name__}: {e} at {', '.join(error_lines)}. Response was {short_resp}")

Yes! You can override the method, similar to how it is done in RestUser (https://github.com/SvenskaSpel/locust-plugins/blob/master/locust_plugins/users/rest.py)

This method does a little more than just set catch_response=True, and is directly on the User instead of on the session but is should get you started:

@contextmanager
def rest(
    self, method, url, headers: Optional[dict] = None, **kwargs
) -> Generator[RestResponseContextManager, None, None]:
    headers = {"Content-Type": "application/json", "Accept": "application/json"} if headers is None else headers
    with self.client.request(method, url, catch_response=True, headers=headers, **kwargs) as resp:
        resp: RestResponseContextManager
        resp.js = None
        if resp.text is None:
            # round the response time to nearest second to improve error grouping
            response_time = round(resp.request_meta["response_time"] / 1000, 1)
            resp.failure(
                f"response body None, error {resp.error}, response code {resp.status_code}, response time ~{response_time}s"
            )
        else:
            if resp.text:
                try:
                    resp.js = autoviv.loads(resp.text)
                except JSONDecodeError as e:
                    resp.failure(
                        f"Could not parse response as JSON. {resp.text[:250]}, response code {resp.status_code}, error {e}"
                    )
        try:
            resp: RestResponseContextManager  # pylint is stupid
            yield resp
        except AssertionError as e:
            if e.args:
                if e.args[0].endswith(","):
                    short_resp = resp.text[:200] if resp.text else resp.text
                    resp.failure(f"{e.args[0][:-1]}, response was {short_resp}")
                else:
                    resp.failure(e.args[0])
            else:
                resp.failure("Assertion failed")

        except Exception as e:
            error_lines = []
            for l in traceback.format_exc().split("\n"):
                m = self._callstack_regex.match(l)
                if m:
                    filename = re.sub(r"/(home|Users/\w*)/", "~/", m.group(1))
                    error_lines.append(filename + ":" + m.group(2) + m.group(3))
                short_resp = resp.text[:200] if resp.text else resp.text
                resp.failure(f"{e.__class__.__name__}: {e} at {', '.join(error_lines)}. Response was {short_resp}")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文