# 与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会插入提交。
- Nette简介
- 快速开始
- 入门
- 主页
- 显示文章详细页
- 文章评论
- 创建和编辑帖子
- 权限验证
- 程序员指南
- MVC应用程序和控制器
- URL路由
- Tracy - PHP调试器
- 调试器扩展
- 增强PHP语言
- HTTP请求和响应
- 数据库
- 数据库:ActiveRow
- 数据库和表
- Sessions
- 用户授权和权限
- 配置
- 依赖注入
- 获取依赖关系
- DI容器扩展
- 组件
- 字符串处理
- 数组处理
- HTML元素
- 使用URL
- 表单
- 验证器
- 模板
- AJAX & Snippets
- 发送电子邮件
- 图像操作
- 缓存
- 本土化
- Nette Tester - 单元测试
- 与Travis CI的持续集成
- 分页
- 自动加载
- 文件搜索:Finder
- 原子操作