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

Django 告诉Travis跳过一个测试,但继续将它包含在我的主测试套件中?,django,travis-ci,Django,Travis Ci,我使用的是Django 1.8,我有一个管理命令,可以对数据库中的某些项目进行地理编码,这需要互联网连接 我已经为这个管理命令编写了一个测试。但是,测试运行脚本,因此它还需要internet连接 在将测试推到GitHub之后,我的CI被破坏,因为Travis没有外部internet连接,所以它在该测试中失败 我希望保留此测试,并希望在本地运行时继续将其包括在python manage.py测试中 然而,我有没有办法明确地告诉特拉维斯不要为这个特殊的测试而烦恼 或者,是否有其他干净的方法可以将此测

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

我已经为这个管理命令编写了一个测试。但是,测试运行脚本,因此它还需要internet连接

在将测试推到GitHub之后,我的CI被破坏,因为Travis没有外部internet连接,所以它在该测试中失败

我希望保留此测试,并希望在本地运行时继续将其包括在
python manage.py测试中

然而,我有没有办法明确地告诉特拉维斯不要为这个特殊的测试而烦恼


或者,是否有其他干净的方法可以将此测试作为我的主测试套件的一部分,但阻止它破坏Travis?

也许您可以使用
@unittest.skipIf(条件、原因)
来装饰您的测试,以测试是否存在跳过它的测试。例如:

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

如果外部资源是HTTP端点,则应考虑使用以记录和重放HTTP请求/响应。


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

谢谢,这是一种有趣的方法。我会尝试并报告。上面的方法很有效,但如果您使用
tox
作为测试运行程序,您需要确保在
tox.ini
中有一个
passenv=TRAVIS
,以允许ENV-var传播到文本环境中。更短的表示法是:
@unittest.skipIf(os.environ.get('TRAVIS'))==“true”,“跳过Travis CI上的此测试”。)
“Travis没有外部internet连接”-我有一个需要internet连接的测试,它通过得很好。另一方面,我还有一个方法试图解析DOI URL(),但其测试失败。