# 與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
- 原子操作