2

我有大约 130 个生菜测试在本地运行良好,但是当 travis 运行它们时,它在几次测试后挂起。

这里测试在第 8 种情况下失败:https ://travis-ci.org/h3/django-editlive/jobs/3945466

当我删除它通过的最后一个场景时:https ://travis-ci.org/h3/django-editlive/builds/3945648

我尝试将测试拆分为单独的功能文件,同样的问题。

这似乎不是由特定场景引起的,而是由运行的场景数量引起的。

根据 Travis 的文档

  • 等待键盘输入或其他类型的人机交互
  • 并发问题(死锁、活锁等)
  • 安装需要很长时间才能编译的本机扩展

我能看到的唯一可能性是并发问题..但是我该如何调试呢?

我的项目是开源的,所以整个源代码都可以在这里找到:

4

1 回答 1

4

我对这个问题没有明确的答案,但我设法解决了这个问题。

因为我没有任何输出,所以我试图对我的测试进行 strace,这样我就可以确切地看到它挂在哪里。

但是 strace 的输出太大了,被 travis 修剪了。所以我不得不 grep -v 一些行。

这是我的 .travis.yml 文件中的样子:

script:
  - "strace -q python project/manage.py harvest 2>&1 | grep -v ENOENT"

ENOENT 代表“没有这样的文件或目录”,我真的不需要它来理解 strace 输出,它剪掉了足够多的行让我看到它挂在哪里。

原来它挂在对 selenium 的请求上:

socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(35146), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
send(4, "POST /hub/session/e7cba641-2842-"..., 359, 0) = 359

我无法真正替换 selenium,所以我大胆猜测并用 google chrome 替换了 firefox 来运行我的测试......等等。测试运行完美。

很糟糕,我还没有真正解决问题,但是在 travis ci 上远程调试充其量只是一个 PITA。每次迭代之间有 35 分钟的等待时间,我有更重要的事情要做。

于 2013-01-05T03:50:05.357 回答