多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 与Travis CI的持续集成 你做到了。 你已经用测试覆盖你的代码,现在你可以相信你的代码。 其实,你不能。 有一天,你会忘记运行测试,部署到生产,并从你的老板得到一个愤怒的电话后。 如果你使用不协调的集成,这不需要发生。 在本教程中,您将学习如何使用Travis CI设置Nette Tester。 配置测试环境 使用Composer安装依赖项 使用Nette Tester进行运行测试 设置其他服务 TL; DR GitHub集成 ## Travis CI的工作原理 Travis CI(“Travis”)是一种非常受欢迎的服务,用于托管持续集成。 该服务是免费的,并提供您的测试推送到您的存储库后自动执行。 它也完全与GitHub集成。 为了配置Travis,您需要将一个名为.travis.yml的文件添加到存储库的根目录。 该文件由本教程后面部分描述的部分组成。 没有一个部分是强制性的,但是如果我们省略脚本部分,Travis将尝试运行phpunit。 这些部分按以下顺序执行: before_install 安装 before_script 脚本(必需) after_success或after_failure after_script ## 设置.travis.yml **语言** 首先,您需要告诉Travis为您的项目选择哪种语言环境。 你可以使用语言:php选项。 您可以指定要对哪些PHP版本执行测试。 不介绍补丁版本告诉Travis使用最新的。 ~~~ language: php php: - 5.3.3 - 5.4 - 5.5 - 5.6 - hhvm ~~~ **环境变量** 您可以指示Travis使用不同的环境变量值执行多个运行。 为此,请添加env键。 每个项目符号被理解为一个不同的环境,测试单独运行。 我们将在文件中使用TESTER_PHP_BIN在HHVM环境中使用-p hhvm选项运行测试器。 ~~~ env: - TESTER_PHP_BIN="php-cgi" - TESTER_PHP_BIN="hhvm" ~~~ 五个php版本和两个环境变量的组合产生总共10次运行。 **依赖安装** 为了安装您的依赖项,请使用安装部分。 每个项目符号意味着单个命令。 Composer默认安装您的dev依赖项。 你应该使用--no-interaction,这样作曲家不会问Travis不能回答的问题。 你还应该使用--prefer-source。 它防止您的测试随机失败,如果你运行有限的GitHub API请求。 如果要使用最新的版本,请在before_install节中更新Composer。 ~~~ before_install: - composer self-update install: - composer install --no-interaction --prefer-source ~~~ **构建矩阵** 根据上面的配置,生成构建矩阵。 矩阵包含所有环境设置的组合。 单个组合称为作业,并单独运行。 您可以在矩阵部分修改矩阵。 如果要排除作业,请使用排除键。 在我们的示例中,我们不想对标准PHP版本使用-p hhvm参数,对HHVM使用-p php-cgi。 ~~~ matrix: exclude: - php: 5.3.3 env: TESTER_PHP_BIN="hhvm" - php: 5.4 env: TESTER_PHP_BIN="hhvm" - php: 5.5 env: TESTER_PHP_BIN="hhvm" - php: 5.6 env: TESTER_PHP_BIN="hhvm" - php: hhvm env: TESTER_PHP_BIN="php-cgi" ~~~ Travis将构建显示为只有在每个作业通过时才会通过。 但是,您可以定义允许失败的作业,而不会导致整个构建显示为失败。 为此,请声明allow_failures。 为了我们的目的,我们允许HHVM失败。 ~~~ matrix: allow_failures: - php: hhvm ~~~ **运行测试** 测试在脚本部分运行,您只需要执行测试。 让我们假设你的测试在tests /文件夹,你提供自己的php.ini在同一个文件夹。 Additionaly,告诉测试人员显示有关使用-s选项跳过的测试的信息,并使用-p选项将早期声明的TESTER_PHP_BIN的值用作PHP二进制。 ~~~ script: - ./vendor/bin/tester -p $TESTER_PHP_BIN -s -c ./tests/php.ini ./tests ~~~ **如果测试失败** 如果测试失败,则执行after_failure部分。 测试器在断言失败的情况下存储变量的实际值。 我们将使用此部分来打印实际值。 ~~~ after_failure: # Prints *.actual files content - for i in $(find ./tests -name \*.actual); do echo "--- $i"; cat $i; echo; echo; done ~~~ **设置其他服务:** Travis预装了多种常用服务(例如MySQL)。 但是,如果您需要使用例如Redis存储,您可以在服务部分告诉Travis。 ~~~ services: - redis-server ~~~ **数据库初始化** MySQL在127.0.0.1上运行,您可以使用travis或root作为用户名登录。 不需要密码。 您可以在before_script部分导入数据库。 假设您的数据库设置脚本在tests / testbase.sql中。 ~~~ before_script: - mysql -u root -e 'CREATE DATABASE testbase;' - mysql -u root testbase < tests/testbase.sql ~~~ **结果** .travis.yml现在应该看起来像这样: ~~~ language: php php: - 5.3.3 - 5.4 - 5.5 - 5.6 - hhvm env: - TESTER_PHP_BIN="php-cgi" - TESTER_PHP_BIN="hhvm" matrix: allow_failures: - php: hhvm exclude: - php: 5.3.3 env: TESTER_PHP_BIN="hhvm" - php: 5.4 env: TESTER_PHP_BIN="hhvm" - php: 5.5 env: TESTER_PHP_BIN="hhvm" - php: 5.6 env: TESTER_PHP_BIN="hhvm" - php: hhvm env: TESTER_PHP_BIN="php-cgi" services: - redis-server before_install: - composer self-update install: - composer install --no-interaction --prefer-source before_script: - mysql -u root -e 'CREATE DATABASE testbase;' - mysql -u root testbase < tests/testbase.sql script: - ./vendor/bin/tester -p $TESTER_PHP_BIN -c ./tests/php.ini -s ./tests/ after_failure: # Prints *.actual files content - for i in $(find ./tests -name \*.actual); do echo "--- $i"; cat $i; echo; echo; done ~~~ **GitHub集成** 如上所述,Travis与GitHub集成。 但是,您需要指定要测试哪些存储库。 这是使用Webhook完成的,它通知Travis存储库中的更改。 **激活Webhook** 首先,转到Travis CI并使用您的GitHub帐户登录。 同步您的帐户后,您会看到您有权访问的所有存储库。 针对您要启用的所有存储库,将Flip切换为ON。 Travis现在将在每次推送提交或创建拉取请求后将您的存储库添加到队列。 稍后,您的存储库将被测试。 **状态图像** Travis可以为您生成状态图像。 例如,您可以将此图标嵌入到README.md文件中。 **跳过提交** 一些提交不需要测试。 你可以在你的提交消息中的某处添加[skip ci],Travis会插入提交。