在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-内存缓存测试