【问题标题】:ava test runner write EPIPE and ECONNRESET errorsava 测试运行程序写入 EPIPE 和 ECONNRESET 错误
【发布时间】:2016-09-23 20:44:34
【问题描述】:

我在使用 ava 测试运行程序时遇到错误。代码:

test('gets account by ID with includes', async t => {
  const c = new Client('http://localhost:8000/v2/', token);
  const included = await c.account.get('2001', ['foo']).then(res => res.data.included);

  t.is(included[0].type, 'Foo');
});

test('gets order item by ID', async t => {
  const c = new Client('http://localhost:8000/v2/', token);
  const orderItem = await c.orderItem.get('2000').then(res => res.data.data);

  t.is(orderItem.type, 'OrderItem');
  t.is(orderItem.id, '2000');
});

我明白了:

1. get › gets account by ID with includes
Error: connect ECONNRESET 127.0.0.1:8000
Object.exports._errnoException (util.js:1036:11)
exports._exceptionWithHostPort (util.js:1059:20)
TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)


2. get › gets order item by ID
Error: write EPIPE
exports._errnoException (util.js:1036:11)
WriteWrap.afterWrite (net.js:794:14)

这些错误不会一直出现,而且它们是非常低级的错误,所以我怀疑它一定是某种服务器配置问题。也许我应该在测试之间引入延迟? Ava 测试在许多进程上产生并同时运行。

【问题讨论】:

  • 尝试连续运行测试,看看错误是否仍然存在。可能并行运行所有测试对您的服务器来说太多了。
  • 行得通。如果你把它写成一个解决方案,我会让它解决。任何想法为什么开发服务器无法处理并行测试?

标签: node.js ava


【解决方案1】:

尝试连续运行测试,看看错误是否仍然存在。可能并行运行所有测试对您的服务器来说太多了。

通常情况下,服务器应该能够处理并发连接,尽管它是有限制的。您正在测试的部署似乎已达到该限制。

您能否提供您正在执行的单个测试的数量?如果这是您的部署的严重问题或者您正在到达服务器的边界,则此信息可能会有所帮助。也许您可以尝试使用基准工具(如 Apache bench)来获取有关您的服务器部署能力的信息。

【讨论】:

  • 我正在使用 django 开发服务器。而且我的测试套件越来越大。我也在四核机器上。因此,如果服务器同时被 4 个连接击中,我不会感到惊讶。
  • Ava 默认会并行运行你的测试。因此,如果您有 N 个测试,它可能会生成 N 个同时连接到您的服务器的连接。这就是为什么使用基准工具来确定 Django 服务器可以处理的并发连接量很重要的原因。
猜你喜欢
  • 2020-09-14
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2017-10-03
相关资源
最近更新 更多