Laravel專案中運用Travis持續整合和自動化測試
背景
在很多Github開源專案頁面的readme中,經常看到類似的圖示
這個 bulid passing,其實是 Travis 的構建狀態圖示。Travis 是一個結合 Github 使用的持續整合(CI:continuous integration)工具。持續整合是一種軟體開發實踐,即團隊開發成員經常整合他們的工作,每次整合都通過自動化的構建(包括編譯,釋出,自動化測試)來驗證,從而儘早地發現整合錯誤。使用 Travis 後,每當對 Github 進行 push 操作時,都會在 Travis 提供的環境上執行自動化的構建。
1. 編寫測試程式碼
比如我們想測試一下使用者註冊功能,首先在Laravel專案路徑下執行下面命令生成測試用例檔案:
php artisan make:test RegisterTest
這樣在 tests/Feature路徑下就會生成一個 RegisterTest.php 檔案。如果是單元測試,可以在命令後面加 --unit
,則會在 tests/Unit 路徑下生成單元測試檔案。
接下來編輯測試檔案:
class RegisterTest extends TestCase {
use DatabaseTransactions;
/**
* A basic test example.
*
* @return void
*/
public function testRegister ()
{
$response = $this->json('POST', '/api/register', [
'name' => 'TestUser123',
'email' => '[email protected]',
'password' => '123456'
]);
$response->assertStatus(200)
->assertJsonStructure(['token']);
}
public function testRegisterInvalidEmail ()
{
$response = $this->json('POST', '/api/register', [
'name' => 'TestUser1234',
'email' => 'TestUser123TestUser.com',
'password' => '123456'
]);
$response->assertStatus(500)
->assertJson(['message' => 'The given data failed to pass validation.']);
}
public function testRegisterRepeatEmail()
{
User::create([
'name' => 'TestUser12345',
'email' => '[email protected]',
'password' => bcrypt('123456'),
]);
$response = $this->json('POST', '/api/register', [
'name' => 'TestUser12345',
'email' => '[email protected]',
'password' => '123456'
]);
$response->assertStatus(500)
->assertJson(['message' => 'The given data failed to pass validation.']);
}
}
開頭加上use DatabaseTransactions;
,測試用例使用資料庫事務,這樣在用例執行完後,對資料庫的修改都會被恢復。
後面三個函式對應3個測試用例,分別測試了註冊成功,e-mail地址不合法,和e-mail地址跟已存在的使用者重複的情況。程式碼都很好理解,因為 api 功能返回的是 json 格式的資料,這裡用了 Laravel 框架的 json 斷言 assertJsonStructure 和 assertJson,前者代表 Response body 的 json 資料包含後面的格式,但不關注欄位的值,後者則要求 json 資料中包含了對應的欄位和值。
用例寫好後,在專案路徑下執行命令 phpunit,測試通過:
vagrant@homestead:~/Code/jokes$ phpunit
PHPUnit 5.7.19 by Sebastian Bergmann and contributors.
..... 5 / 5 (100%)
Time: 5.23 seconds, Memory: 14.00MB
OK (5 tests, 8 assertions)
2. 配置Travis
Travis是一個持續整合工具,對於Github 上的開源專案可以免費使用。首先開啟網站 https://travis-ci.org/ ,使用 Github 賬號授權登入,之後 Travis 會同步 Github 上的開源專案,選擇你要進行持續整合的專案即可,過程比較簡單,照著Travis官方文件操作就行,關鍵的地方就是要編輯好Travis的配置檔案,下面就介紹一下基於PHP Laravel 框架的專案配置時需要注意的地方。
1 準備環境配置檔案
Laravel專案很多配置都放在 .env 檔案裡,這個檔案一般在不同的執行環境上會單獨去配置,也不會新增到 Git 中。因此我們首先準備一個在 Travis 環境上用的檔案,先直接將框架自帶的初始檔案 .env.example 拷貝一份:
cp .env.example .env.travis
然後在修改,主要改了兩個地方,一是資料庫配置:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=jokes
DB_USERNAME=root
DB_PASSWORD=
Travis環境預設支援 MySql,賬號有 root 和 travis,密碼為空,在 .env.travis 檔案中做相應修改,賬戶選擇了許可權較高的 root 。
第二個是增加 Dingo/Api 的相關配置,為了測試用例和我們實際線上環境一直,這裡主要加了字首等資訊:
# DINGO/API
API_STANDARDS_TREE=vnd
API_SUBTYPE=jokes
API_PREFIX=api
API_VERSION=v1
API_NAME=jokes
API_CONDITIONAL_REQUEST=false
API_STRICT=false
API_DEBUG=true
API_DEFAULT_FORMAT=json
2 編輯 Travis 配置檔案
在專案根路徑下新增 .travis.yml 檔案,新增如下內容:
language: php
php:
- 7.1
service:
- mysql
before_script:
- composer install
- composer dump-autoload
- cp .env.travis .env
- php artisan jwt:generate
- php artisan key:generate
- php artisan vendor:publish
- mysql -e 'CREATE DATABASE IF NOT EXISTS jokes ;'
- php artisan migrate
script: phpunit
- 指定使用的語言為 PHP,並指定了要執行的版本。
- 指明需要啟動 MySql 服務。
- before_script,表明在執行測試之前需要做的工作,這裡我們做了Laravel 專案執行前基本的準備工作:
- 通過 composer 安裝依賴
- 將之前準備的 Travis 環境專用的 .env 檔案拷貝
- 生成金鑰
- 釋出 vendor 檔案
- 建立 jokes 資料庫
- 執行資料庫遷移,建立資料表
執行測試 phpunit
3. 自動執行Travis
配置好上面的內容後,當想 Github 發起 push 後,就會自動進行持續整合,安裝上面的配置一步步執行,告知測試結果。
4. 新增構建狀態圖示
在 Travis 專案介面點選狀態圖示,在彈出的視窗中現在對應的分支,以及格式,比如 Markdown,將程式碼複製到專案的 readme.md 檔案中:
readme.md:
[![Build Status](https://travis-ci.org/zhongchenyu/jokes-laravel.svg?branch=master)](https://travis-ci.org/zhongchenyu/jokes-laravel)
An api server project using PHP Framework Laravel.
相關推薦
Laravel專案中運用Travis持續整合和自動化測試
背景 在很多Github開源專案頁面的readme中,經常看到類似的圖示 這個 bulid passing,其實是 Travis 的構建狀態圖示。Travis 是一個結合 Github 使用的持續整合(CI:continuous integration)
Maven+TravisCI持續整合和Coveralls測試覆蓋率檢測
之前挖了不少開源專案的坑 ,準備慢慢填起來 .第一步當然從專案管理開始 ,把之前的maven專案弄得更加規整. Maven 還是延續之前的parent-pom/child-jar的結構 * parent中只留配置 : dependencies/plug
Jenkins學習總結(3)——Jenkins+Maven+Git搭建持續整合和自動化部署的
前言 持續整合這個概念已經成為軟體開發的主流,可以更頻繁的進行測試,儘早發現問題並提示。自動化部署就更不用說了,可以加快部署速度,並可以有效減少人為操作的失誤。之前一直沒有把這個做起來,最近的新專案正好有機會,費了一番功夫總算搞好了,特此記錄。 1. 開發環
利用Travis CI+GitHub實現持續整合和自動部署
前言 如果你手動部署過專案,一定會深感持續整合的必要性,因為手動部署實在又繁瑣又耗時,雖然部署流程基本固定,依然容易出錯。 如果你很熟悉持續整合,一定會同意這樣的觀點:“使用它已經成為一種標配”。 什麼是持續整合 Continuous Integration(CI) is a development p
iOS 刪除專案中未使用的圖片和類檔案
由於隨著專案不但的版本迭代開發,資源也不斷的替換,執行檔案 + 圖片資源的也跟著不斷的累積, 導致app的”容量“不斷地增加。 為此我們需要給app瘦身,刪除一些沒有用到的類檔案和圖片資源。 1、刪圖 在進行刪除沒有用到的圖片的時候,我想到了兩種方法去實現它。 第一、
vue專案中使用easeui的sideMenu和tabs 標籤遇到的問題
實現功能: 點選左側選單,右側標籤頁顯示該選單; 問題: 1.點選左側選單的時候,標籤頁不是顯示當前選單項; 解決方法: 第一使用不知道easeUide tab頁的select的使用方法.理解到select的使用方法後,給這個select方法傳遞一個當前開啟的選單在這個標籤
專案中提供對外的ip和埠的查詢方法
說明: 在一個多方整合的專案中, 一般兩方的工程人員先調通網路(走專線或是其他), 然後研發再進行開發. 研發的時候, 有測試環境, 正式環境, 對外的ip和埠也都是不一樣的. 專案開發完成了, 過了很久之後, 維護該專案的人員都
PHP專案中使用Guzzle執行POST和GET請求
以往在專案中要用到第三方介面時會用到封裝好的curl執行請求,現在有了更好的解決方案——Guzzle。 下面是官方介紹: Guzzle是一個PHP的HTTP客戶端,用來輕而易舉地傳送請求,並整合到我們的WEB服務上。 介面簡單:構建查詢語句、POST請求、分流
【備忘】Lucene從入門到專案中運用視訊
01_lucenc簡介和建立索引初步.avi 02_lucene簡介和搜尋初步.avi 03_lucene索引_建立_域選項.avi 04_lucene索引_的刪除和更新.avi 05_lucene索引_加權操作和Luke的簡單演示.avi 06_對日期和數字進行索引.av
怎樣實際專案中運用責任鏈模式
1 模式概要 1.1 簡介 責任鏈模式為請求建立一個接收者物件鏈,每個接收者都包含對另一個接收者的引用,如果一個物件不能處理該請求,那麼它會把請求傳給下一個接收者,依此類推 責任鏈模式避免了請求的傳送者和接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連成一條鏈,並且沿著這條鏈傳遞請
Android 專案配置 gitlab-ci 持續整合
一、專案根目錄下建立一個 .gitlab-ci.yml 檔案 然後在 .gitlab-ci.yml 中配置持續整合的指令碼: 指令碼配置詳細可以看: Configuration of your jobs with .gitlab-ci.yml Setting up GitLab
在專案中運用rabbitmq
本章內容 解耦思維 例項解析 實現RPC功能 在專案開發中,我們談論最多的應該就是專案的可擴充套件性,解耦專案中的各模組就是解決擴充套件性的一種實現方式。為什麼要解耦?什麼樣的場景需要解耦呢? 解耦思維 &n
Nginx設定Laravel專案中圖片防盜鏈以及禁止位址列直接訪問圖片
為了防止圖片盜用,禁止外鏈以及禁止位址列直接訪問圖片是必不可少的方案,當然這樣的限制還比較基礎,還是有別的途徑可以盜圖的,更多的限制之後會追加,現在先做好這兩個基礎防護。 location ~ .*\.
Vue專案中引入iconfont 圖示庫 和 圖示顯示成小方塊的問題解決
這兩天弄了個vue的小demo ,引入了iconfont 的圖示,沒想到是噩耗的開始,一直顯示的是小方塊,一步步排查踩坑把問題解決。 首先看看官方對專案引入iconfont 的介紹。 unicode引用 unicode是字型在網頁端最原始的應用方式,特點是: 相容性最
Jenkins+Sonar搭建持續整合和程式碼質量檢查環境
Jenkins+Sonar搭建 一、相關環境及下載地址 二、軟體安裝 Jenkins安裝 命令:dpkg –i jenkins_2.121.3_all.deb 若有報錯,執行# apt-get update 和# apt-get –f install, # ln -s /opt/jdk1.8.0_131/b
在同一SpringBoot專案中啟動Dubbo服務端和客戶端
Dubbo是微服務框架,服務需要部署到不同JVM虛擬機器,由此代理的問題是需要提供一個統一Jar包(包含Dubbo介面和JVM間傳遞的實體類),Dubbo伺服器端與客戶端需要共享這個Jar包,在專案開發中這是最為通用的方法, 但在Dubbo案例中如此實現,需要定義三個Maven工程,工作量
實際專案中運用責任鏈模式 | 併發程式設計網
1 模式概要 1.1 簡介 責任鏈模式為請求建立一個接收者物件鏈,每個接收者都包含對另一個接收者的引用,如果一個物件不能處理該請求,那麼它會把請求傳給下一個接收者,依此類推 責任鏈模式避免了請求的傳送者和接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連成一條鏈,並且沿著這條鏈傳遞請
持續整合 CI 自動化構建和自動化測試--初探
此文章是為了總結前一段時間由於Maven2的學習而引起的一個持續整合的學習。 一、什麼是持續整合(Continuous Integration)? 這個概念到底是怎麼定義,說實話很多不同的版本。這裡我就把我理解的什麼叫持續整合說下,其實持續整合是
Swagger在Laravel專案中的使用
本篇講述在如何快速在Laravel中引入Swagger並開始使用。 安裝 首先是使用Laravel的一個composer:L5 Swagger。 下面是對應的各個版本。 Laravel Swagger UI OpenAPI Spec c
專案中使用redis單機版和叢集版
redis搭建請看上一篇文章新增jedis依賴: <!-- Redis客戶端 --> <dependency> <groupId>redis.clients</groupId> &l