告诉 Travis 跳过测试,但继续将其包含在我的主测试套件中?

Tell Travis to skip a test, but continue to include it in my main test suite?

我使用的是 Django 1.8,我有一个管理命令可以对数据库中的某些项目进行地理编码,这需要互联网连接。

我已经为这个管理命令写了一个测试。但是,测试 运行s 脚本,因此它也需要互联网连接。

将测试推到 GitHub 后,我的 CI 坏了,因为 Travis 没有外部互联网连接,所以它在这个测试中失败了。

我想保留这个测试,我想在本地 运行 时继续将它包含在 python manage.py test 中。

但是,有没有一种方法可以明确告诉 Travis 不要为这个特定的测试操心?

或者,是否有其他一些干净的方法可以将此测试保留为我的主要测试套件的一部分,但又不会破坏 Travis?

也许你可以用 @unittest.skipIf(condition, reason) 来装饰你的测试,以测试是否存在 Travis CI specific environment variable 来跳过它。例如:

import os
...
@unittest.skipIf("TRAVIS" in os.environ and os.environ["TRAVIS"] == "true", "Skipping this test on Travis CI.")
def test_example(self):
  ...

如果外部资源是 HTTP 端点,您应该考虑使用 vcrpy 来记录和重放 HTTP requests/responses。

这样您就可以在不同的环境中继续运行相同的测试套件。它还会加快测试速度。