排毒自动化测试随机超时

Posted

技术标签:

【中文标题】排毒自动化测试随机超时【英文标题】:Detox automation test times out randomly 【发布时间】:2019-07-08 16:04:25 【问题描述】:

我已经开始使用 Detox 为我们的 react-native 应用程序创建自动化 UI 测试(这里是在 ios 上测试)。

我注意到 Detox(或 Jest)随机超时。完全相同的测试有时会通过,但有时会卡住并且无法继续运行测试。开玩笑超时结束后,我会收到以下错误

Timeout - Async callback was not invoked within the 40000ms timeout specified by jest.setTimeout.

  47 |     );
  48 |     describe('when the user taps on the payment history tab', () => 
> 49 |       it('should go on the payment history view', async () => 


  at Spec (node_modules/jest-jasmine2/build/jasmine/Spec.js:92:20)
  at Suite.<anonymous> (e2e/tests/loans/index.test.js:49:7)

我的一个测试看起来像这样:

  it('should go on the payment history view', async () => 
    await element(by.id('product-tab-2')).tap();
    await waitFor(element(by.id('product-payment-history-1')))
      .toBeVisible()
      .withTimeout(5000);
    await expect(element(by.id('product-payment-history-1'))).toBeVisible();
  );

我尝试使用“trace”标志来查看是否有任何关于它卡住的详细信息。似乎跳过了一些 invoke 调用,它会在实际完成前一个测试之前尝试执行以下测试。

我不认为这是测试本身的问题,因为它们碰巧在 4 次中运行了 3 次。

有人有这个问题吗?有没有办法解决它?或者有没有办法在出现冻结时重新启动测试集?

谢谢!

【问题讨论】:

【参考方案1】:

来自waitFor 的排毒文档

注意:waitFor 在超时时不会抛出,而是会 继续下一行。确保您的测试像您一样工作 期望他们在下一行添加 expect()

如果你使用 waitFor,你应该在 wait for 之后对同一个元素加上期望,因为上面的原因。也许尝试将您的测试调整为以下内容:

it('should go on the payment history view', async () => 
  await element(by.id('product-tab-2')).tap();
  await waitFor(element(by.id('product-payment-history-1')))
    .toBeVisible()
    .withTimeout(5000);
  await expect(element(by.id('product-payment-history-1'))).toBeVisible();
  await expect(element(by.id('product-payment-history'))).toBeVisible();
);

这将避免测试继续并寻找下一个项目而不显示 waitFor 项目

【讨论】:

这正是我正在做的。不仅此测试失败,它还会随机停止任何测试。 您正在等待“product-payment-history-1”,然后检查“product-payment-history”。等待“product-payment-history-1”后,您应该添加一张支票。你应该在有等待的任何地方这样做。始终遵循 waitFor 的确切期望。 是一个错字,我修正了最初的问题

以上是关于排毒自动化测试随机超时的主要内容,如果未能解决你的问题,请参考以下文章

由于在应用程序安装期间超时而无法运行排毒测试

排毒错误:超过 120000 毫秒的超时。用于异步测试和钩子

排毒测试时,React Native 在初始屏幕上超时完成

排毒测试 + React Native + PouchDB 应用程序:由于一些 PouchDB 同步,我们的登录测试一直失败并超时?

使用开玩笑超时错误进行排毒:“分配给未定义”

努力用排毒来建造