在多个操作系统上测试您的项目
如果您的代码在多个操作系统上使用,则可能应该在多个操作系统上进行测试。Travis CI 可以在 Linux 和 macOS 上进行测试。
要在多个操作系统上启用测试,请将 os
键添加到您的 .travis.yml
中。
os:
- linux
- osx
根据特定构建运行的操作系统,$TRAVIS_OS_NAME
变量的值将设置为 linux
或 osx
,因此您可以使用它来设置构建脚本的条件。
如果您已经使用 构建矩阵 来测试多个版本,则 os
键也会使矩阵相乘。
操作系统差异 #
当您在多个操作系统上测试代码时,请注意可能影响测试的差异。
-
并非所有工具都可以在 macOS 上使用。
我们仍在努力在 macOS 环境 上构建工具链。缺少的软件可以通过 Homebrew 获得。
-
语言可用性。
并非所有语言都可以在所有操作系统上使用,并且不同版本可能安装在不同的系统上。在开始多操作系统测试之旅之前,请务必查看此 GitHub 问题 详细说明哪些语言可用。
-
文件系统行为不同。
我们 macOS 工作人员上的 HFS+ 文件系统不区分大小写(这是 macOS 的默认设置),并且目录中的文件按排序顺序返回。在 Linux 上,文件系统区分大小写,并按它们在目录内部出现的顺序返回目录条目。
您的测试可能会隐式地依赖于这些行为,并且可能会因为它们而失败。
-
毕竟它们是不同的操作系统。
命令可能在 Mac 和 Linux 上具有相同的名称,但它们可能具有不同的标志,或者相同的标志可能意味着不同的含义。在某些情况下,执行相同操作的命令可能具有不同的名称。这些需要逐一调查。
允许在一个操作系统上运行的作业失败 #
要忽略一个操作系统上作业的结果,请将以下内容添加到您的 .travis.yml
中。
jobs:
allow_failures:
- os: osx
多操作系统构建矩阵示例 #
这是一个使用 if/then 指令自定义 构建生命周期 以在 Linux 和 macOS 中都使用 Graphviz 的 .travis.yml
文件示例。
language: c
os:
- linux
- osx
compiler:
- gcc
- clang
addons:
apt:
packages:
- graphviz
before_install:
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update ; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install graphviz; fi
script:
- cd src
- make all
有许多选项可用,并且使用 matrix.include
键对于包含任何特定条目至关重要。例如,此矩阵会将构建路由到 Trusty 构建环境 和 使用 Xcode 7.2 的 macOS 镜像
jobs:
include:
-
os: linux
dist: trusty
-
os: osx
osx_image: xcode7.2
Python 示例(不受支持的语言) #
例如,此 .travis.yml
使用 matrix.include
键在构建矩阵中包含四个特定条目。它还利用 language: generic
在 macOS 上测试 Python。自定义需求安装在下面的 ./.travis/install.sh
中。
language: python
jobs:
include:
- os: linux
python: 3.2
env: TOXENV=py32
- os: linux
python: 3.3
env: TOXENV=py33
- os: osx
language: generic
env: TOXENV=py32
- os: osx
language: generic
env: TOXENV=py33
install:
- ./.travis/install.sh
script: make test
此自定义安装脚本(仅伪代码)使用 $TRAVIS_OS_NAME
和 $TOXENV
变量来安装特定于 macOS、Linux 和每个特定 Python 版本的(Python)先决条件。
#!/bin/bash
if [ $TRAVIS_OS_NAME = 'osx' ]; then
# Install some custom requirements on macOS
# e.g. brew install pyenv-virtualenv
case "${TOXENV}" in
py32)
# Install some custom Python 3.2 requirements on macOS
;;
py33)
# Install some custom Python 3.3 requirements on macOS
;;
esac
else
# Install some custom requirements on Linux
fi
然后,Travis CI 使用 make test
自动测试四个扩展构建。