使用生菜+碎片和硒进行测试时,在Travis CI上构建超时

时间:2013-01-04 06:54:07

标签: django selenium travis-ci lettuce splinter

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

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

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

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

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

根据Travis'docs

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

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

我的项目是开源的,因此可以在这里找到完整的源代码:

1 个答案:

答案 0 :(得分:4)

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

由于我没有任何输出,我试图对我的测试进行测试,因此我可以确切地看到它挂起的位置。

但由于特拉维斯裁掉了直线输出的大手。所以我不得不grep -v一些线。

以下是我的.travis.yml文件中的内容:

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

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

事实证明,这是对硒的请求:

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

我无法真正取代硒,所以我采取了疯狂的猜测,并用谷歌浏览器取代了Firefox,以运行我的测试..等瞧。测试完美无缺。

我很难解决这个问题,但是在travis ci上进行远程调试至多是一个PITA。每次迭代之间的等待时间为35分钟,我有更重要的事情要做。