kateli1991

毒物中的条件命令?(毒物、travisci和工作服)



tl;医生:

我正在为我的一个项目设置CI,托管在github上,使用toxtravis-ci。在构建的最后,我运行converalls将覆盖率报告推送到coveralls.io。我想将这个命令设为“有条件的”——只在travis上运行测试时执行,而不是在本地计算机上运行时执行。有没有办法做到这一点?在

细节:

我要测试的包是python包。我正在使用/计划使用以下“基础设施”来设置测试:

  • 测试本身属于py.test种类。在
  • 可以说,CI脚本来自tox。这让我可以在本地运行测试,这对我来说非常重要。我不想每次需要测试运行时都推送github。我还在我的包中使用numpymatplotlib,因此在travis-ci上运行数量不多的测试循环对我来说似乎过于浪费。因此,放弃tox和仅仅使用.travis.yml不是一个选择。在
  • CI服务器是travis-ci

相关测试脚本如下所示:

。特拉维斯·伊梅尔

language: python
python: 2.7
env:
  - TOX_ENV=py27
install:
  - pip install tox
script:
  - tox -e $TOX_ENV

毒性试验

^{pr2}$

这个文件允许我在本地运行测试。但是,由于最后的coveralls调用,测试原则上失败,原因是:

py27 runtests: commands[1] | coveralls
You have to provide either repo_token in .coveralls.yml, or launch via Travis
ERROR: InvocationError: ...coveralls'

这是一个预期的错误。passenv位从travis发送必要的信息,以便能够写入coveralls,如果没有travis在那里提供此信息,命令应该失败。我不想把结果推到工作服.io也可以。我只想让coveralls只在测试发生在travis-ci上时运行。有什么方法可以让这个命令有条件地运行,或者设置一个生成配置来达到同样的效果吗?在

我已经尝试过将工作服部分移到.travis.yml,但是当执行该操作时,coveralls似乎找不到要发送的.coverage文件。我在这个方向上做了各种尝试,除了上面列出的组合之外,没有一个成功地提交到{}。以下是我希望能起作用的,因为当我在本地运行tox时,我会得到一个.coverage文件,它在我的源目录树的根文件夹中。在

不服从工作服.io

language: python
python: 2.7
env:
  - TOX_ENV=py27
install:
  - pip install tox
  - pip install python-coveralls
script:
  - tox -e $TOX_ENV
after_success:
  - coveralls


已被浏览了5050次
6 日,21 小时 之前提问
3 个回答
fefe Tyson

我正在使用一个环境变量来运行其他命令。在

在毒性试验在

commands =
    coverage run runtests.py
    {env:POST_COMMAND:python  version}

一。特拉维斯·伊梅尔在

^{pr2}$

现在在我的本地设置中,它打印python版本。从Travis运行时,它运行codecov。在

评论 - 2020年7月29日 15:39
fefe Tyson

我有一个类似的设置,特拉维斯,毒物和工作服。我的想法是只在设置了TRAVIS环境变量的情况下执行coveralls。然而,这似乎并不是那么容易做到的,因为tox无法解析带有引号和和号的命令。另外,这个confused Travis me a lot。在

最后我写了一个简单的python脚本run_coveralls.py

#!/bin/env/python

import os

from subprocess import call


if __name__ == '__main__':
    if 'TRAVIS' in os.environ:
        rc = call('coveralls')
        raise SystemExit(rc)

tox.ini中,将coveralls命令替换为python {toxinidir}/run_coveralls.py。在

评论 - 2020年7月29日 15:39
fefe Tyson

另一种解决方案是在coveralls命令前面加一个破折号(-),告诉tox忽略其退出代码,如in the documentation所述。这样,即使来自coveralls的失败也将被忽略,tox将在本地执行时认为测试执行成功。在

使用上面的示例配置,如下所示:

[tox]
envlist = py27

[testenv]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
deps =
    pytest
    coverage
    pytest-cov
    coveralls
commands =
    py.test  cov={envsitepackagesdir}/mypackage  cov-report=term  basetemp={envtmpdir}
    - coveralls
评论 - 2020年7月29日 15:39

最新Python问答

推荐Python问答