Проблема в том, что ошибка, которую Locust возвращает по вашим запросам, не является нормальным кодом состояния. В настоящее время он проверяет код состояния, чтобы убедиться, что он в этом списке valid_response_codes = frozenset([200, 206, 301, 302, 303, 307])
. Если это не так, возвращается BadStatusCode(url, code=status_code)
. Похоже, что ваши URL-адреса уникальны, и вы уже редактируете URL-адрес, о котором сообщается в пользовательском интерфейсе. Вам придется сделать что-то подобное для ошибок, или, если вы уже сделали это, вам нужно расширить область действия.
В моем использовании у меня также есть много уникальных URL-адресов. Чтобы этого не происходило, я улавливаю ответ следующим образом:
with fast_http_session.request(method, url, catch_response=True, stream=False, **kwargs) as response:
…
# Code to check and report response
…
response._manual_result = False
return response
Затем в моем коде, чтобы проверить и сообщить об ответе, я массирую URL-адрес и коды ответа и сообщения, чтобы они не были уникальный, а затем срабатывает сбой и успех события вручную:
env.events.request_failure.fire(request_type=response.locust_request_meta["method"], name=response.locust_request_meta["name"], exception=except_string, response_time=response.locust_request_meta["response_time"], response_length=response.locust_request_meta["content_size"])
Я использую FastHttpSession, для которого требуется материал locust_request_meta
, но вы можете получить те же данные (и я считаю, что более аккуратно ) из ответов HttpSession, если вы это используете. В этом случае except_string
- это то, что будет отображаться в пользовательском интерфейсе, где вы видите сообщения BadStatus
.
Если вы не хотите запускать события вручную, вы все равно поймаете ответ но вы можете либо перезаписать атрибуты ответа и позволить ему продолжаться как обычно, либо вы можете вызвать response.failure(failure_string)
с любой строкой, какой захотите.