我有大约130个生菜测试,在本地运行良好,但当travis运行它们时,它在几次测试后挂起。
这里的测试在第8个场景中失败:https://travis-ci.org/h3/django-editlive/jobs/3945466
当我删除最后一个场景时,它通过:https://travis-ci.org/h3/django-editlive/builds/3945648
我试着把我的测试分成不同的功能文件,同样的问题。
这似乎不是由一个特定的场景引起的,而是由运行的场景数量引起的。
根据Travis' s docs:
- 等待键盘输入或其他类型的人机交互 并发问题(死锁、活锁等)
- 安装需要很长时间编译的本地扩展
我能看到的唯一可能性是并发问题。但是我怎么调试它呢?
我的项目是开源的,所以整个源代码可以在这里获得:
- https://github.com/h3/django-editlive
- lettuce-features
关于这个问题我没有明确的答案,但我设法解决了。
由于没有任何输出,所以我尝试跟踪我的测试,以便我可以准确地看到它挂起的位置。
但strace输出是大手被特拉维斯修剪…所以我必须用grep -v命令来处理一些行
这是在我的。travis中的样子。yml文件:
script:
- "strace -q python project/manage.py harvest 2>&1 | grep -v ENOENT"
enent代表"没有这样的文件或目录",我真的不需要它来理解字符串输出,它切断了足够的行,让我看到它挂在哪里。
原来它挂在一个请求硒:
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
我真的不能代替硒,所以我大胆猜测,用谷歌chrome代替火狐来运行我的测试。瞧。测试运行正常。
很糟糕,我还没有真正解决这个问题,但在travis ci上远程调试最多是一个PITA。每次迭代之间有35分钟的等待时间,我有更重要的事情要做。