在Travis CI中如何进行环境分离的测试方法

有时候我们需要进行环境划分的测试。
举个具体例子,PHP中有两种memcached扩展:Memcache和Memcached。
对于非PHPer来说,这可能听起来像个笑话,但它是真实存在的。

而且,如果要对适用于这两种环境的软件包进行测试,就需要分别创建包含这两个扩展的环境,这一点很麻烦。

因为我觉得麻烦的事情让ci来处理,所以我在travis-ci上调查和执行了环境切分的测试方法。

相同名称的env

我认为大家都知道 Travis CI 可以针对每个版本进行测试,
但是它还可以针对相同的环境变量执行测试。

换句话说

php:
  - 5.6
  - 7.0
  - hhvm
  - nightly
env:
  - EXT=none
  - EXT=memcache
  - EXT=memcached

执行9个测试,其中包括3个版本× 3个同名环境变量。只需使用环境变量创建环境。

环境变量参考

使用环境变量进行环境划分。

使用Shell的if语句通过查看环境变量来区分执行的命令。

before_install:
  - if [[ $EXT = memcache ]]; then echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi
  - if [[ $EXT = memcached ]]; then echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi

The above is what $EXT is.

    • memcacheであれば、Memcacheのエクステンションを有効にする

 

    memcachedであれば、Memcachedのエクステンションを有効にする

进行了这个处理
环境已经建立好了。

排除不想进行测试的环境。

出力されるエラーが発生します。
在PHP7中,不支持Memcache扩展,因此在使用Memcache扩展进行测试时会产生运行时错误。

Error: Class 'Memcache' not found

然后,出现了错误。

因此,由于包装好的一方无能为力,所以希望不要进行PHP7×Memcache的测试。在这种情况下,可以使用matrix。

matrix:
  exclude:
    - php: 7.0
      env: EXT=memcache
    - php: nightly
      env: EXT=memcache

以下是上述内容的中文释义。

    • バージョンが7.0で$EXTがmemcacheのテストを除外する

 

    バージョンがnightlyで$EXTがmemcacheのテストを除外する(nightlyも7.0なので)

这个会被处理成如下的方式。

当您在矩阵(Matrix)中指定要排除的组合时,它将阻止执行该组合的测试。
与排除(exclude)相反,也有包含(include)的设置。例如,如果您只想测试5.6版本的Memcache和Memcached,则可以进行包含设置。

php:
  - 5.6
  - 7.0
  - hhvm
  - nightly
env:
  - EXT=none
matrix:
  include:
    - php: 5.6
      env: EXT=memcache
    - php: 5.6
      env: EXT=memcached

变成这样。

参考:自定义构建#构建矩阵

总结

    • 基本は同名envを設定してenvごとに環境設定を行う

 

    実行したくないテストはmatrixのexcludeで除外

我认为你可能希望尝试一些与PHP环境不同的测试,所以记住这一点可能很有帮助。

只需要一个选项,以下是对“おまけ”的汉语本土译文:

赠品

雖然這個標題與此文章無直接相關,但在使用travis-ci執行支援Memcache和Memcached的測試時,有一些重要的要點需要記住。

PHPUnit的分组功能

PHP使用phpunit来进行测试,但在这种情况下,我想为Memcache和Memcached准备不同的测试,并根据环境执行。因此,我决定利用phpunit的分组功能。

    /**
     * @group memcache
     */
    public function testMemcache()
    {
        // ...
    }

    /**
     * @group memcached
     */
    public function testMemcached()
    {
        // ...
    }

如上所述,附加群组注释

$ vendor/bin/phpunit --group memcache

只要按照这样的方式执行,只有testMemcache()函数会在memcache群组中执行。

如果在travis-ci上执行,请通过环境变量来区分命令。

script:
  - if [[ $EXT = none ]]; then vendor/bin/phpunit --group none; fi
  - if [[ $EXT = memcache ]]; then vendor/bin/phpunit --group memcache; fi
  - if [[ $EXT = memcached ]]; then vendor/bin/phpunit --group memcached; fi

或者,如果群组名称和环境变量的内容相同

script:
  - vendor/bin/phpunit --group $EXT

但也许可以。

HHVM的Memcache扩展和Memcached扩展

我对HHVM不太熟悉,但似乎HHVM已经默认安装了Memcache扩展和Memcached扩展。

相反地使用HHVM

before_install:
  - if [[ $EXT = memcache ]]; then echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi

当您尝试启用扩展时,

/home/travis/build.sh: line 45: /home/travis/.phpenv/versions/hhvm/etc/php.ini: No such file or directory

如果没有php.ini,会出现错误。因此,在HHVM中禁止启用扩展。

before_install:
  - if [[ $EXT = memcache && $TRAVIS_PHP_VERSION != hhvm ]]; then echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi
  - if [[ $EXT = memcached && $TRAVIS_PHP_VERSION != hhvm ]]; then echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi

在这篇文章中使用的仓库

178稻叶/特拉维斯-PHP-内存缓存测试

广告
将在 10 秒后关闭
bannerAds