在大炮中。如何记录 ETIMEDOUT?

In Artillery. How do I log ETIMEDOUT?

我有一个测试出现 ETIMEDOUT 错误。我想知道哪个 URL 给出了超时。我已经有了以下钩子

function logIfError(requestParams, response, context, ee, next) {
  if (response.statusCode !== 200 && response.statusCode !== 204) {
      console.error("%i %s", response.statusCode, response.url);
      if (response.statusCode >= 500) {
          console.log(response.headers['X-Trace-Id'])
      }
      if (response.statusCode >= 400) {
          console.log(response.rawBody.toString())
      }
  }
  next();
}

我添加到我的场景

scenarios:
  - name: My Scenario
    afterResponse: logIfError

但是超时后我看不到任何消息。 https://github.com/artilleryio/artillery/issues/437#issuecomment-371801777 中有一条注释表明 onError 但未在任何地方记录。

我试过这样加进去的

scenarios:
  - name: My Scenario
    afterResponse: logIfError
    onError: myOnErrorHandler

我的实现方式为

function myOnErrorHandler(err, requestParams, context, events, callback) {
  console.log("ERR", err);
  return callback();
}

但还是没有输出

我添加以下处理器

function trapError(requestParams, context, ee, next) {
  if (!requestParams.hooks) {
    requestParams.hooks = {};
  }
  if (!requestParams.hooks.beforeError) {
    requestParams.hooks.beforeError = [];
  }
  requestParams.hooks.beforeError.push((error) => {
    if (error.name !== "HTTPError") {
      console.error(requestParams.url, error.name);
    }
    return error;
  });
  next();
}

并注册如下

scenarios:
  - name: My Scenario
    beforeRequest: trapError

这样做是利用了它使用 got 的事实,它提供了 beforeError hook