摘要:創(chuàng)建帳號(hào)提供的是持續(xù)集成服務(wù),簡稱。在這里引入的原因是我們的項(xiàng)目需要使用服務(wù)進(jìn)行持續(xù)集成和測試,當(dāng)然你也可以替換成別的單元測試工具。創(chuàng)建單元測試用例是單元測試類庫家族中的一員,使用的一個(gè)主要目的是為我們的模塊創(chuàng)建單元測試用例。
本文首發(fā)于 Travis CI 持續(xù)集成服務(wù)構(gòu)建 Composer 類庫簡明教程,轉(zhuǎn)載請注明出處!
在項(xiàng)目開發(fā)過程中,編碼工作只是軟件開發(fā)整個(gè)過程中的一小部分環(huán)節(jié),更多的我們需要去構(gòu)建和測試我們的項(xiàng)目,以確保項(xiàng)目的健壯和穩(wěn)定性。
這篇文章將帶領(lǐng)大家學(xué)習(xí)如何使用 Travis CI 持續(xù)集成服務(wù)和 Composer 中國 包管理工具,來構(gòu)建一個(gè)持續(xù)集成的 PHP 類庫。
前期準(zhǔn)備進(jìn)入正題之前,需要大家對以下幾個(gè)工具已經(jīng)有了初步的了解和使用經(jīng)驗(yàn):
Git: Git 是分布式版本控制系統(tǒng);
Composer:Composer 是 PHP 項(xiàng)目的依賴管理工具,用于管理項(xiàng)目中的 packagies 和 libraries;
GitHub:是一個(gè)用于使用 Git 版本控制系統(tǒng)項(xiàng)目的共享虛擬主機(jī)服務(wù),可以免費(fèi)托管公開的源代碼倉庫。
Packagist:主要提供 Composer 包發(fā)布和索引,默認(rèn) Composer 從 Packagist 獲取資源。
如果沒有的話,最好還是先了解一下如何使用它們,下面讓我們簡單介紹一下創(chuàng)建相關(guān)服務(wù)賬號(hào)的方法。
創(chuàng)建 Github 帳號(hào)GitHub 是一個(gè)用于使用 Git 版本控制系統(tǒng)項(xiàng)目的共享虛擬主機(jī)服務(wù),可以免費(fèi)托管公開的源代碼倉庫。
本教程的基礎(chǔ)就是基于 Git 和 GitHub 服務(wù),所以需要我們創(chuàng)建 GitHub 帳號(hào),并且 GitHub 官方提供 Packagist、Travis CI 的鉤子服務(wù)。
當(dāng)我們將本地的項(xiàng)目推送(push)到 Github 時(shí),Packagist 和 TravisCI 服務(wù)會(huì)觸發(fā)相關(guān)的鉤子服務(wù),去獲取最新的代碼。
如果沒有賬號(hào)的話趕緊去 注冊 GitHub 帳號(hào) 吧!
創(chuàng)建 Packagist 帳號(hào)Packagist 是 Composer 默認(rèn)的包管理服務(wù)倉庫,我們使用 Composer 安裝(install)或引入(require)一個(gè)依賴包時(shí),默認(rèn)是從這里拉取依賴包的代碼。
所以,開發(fā) Composer 類庫,需要使用我們的 Github 帳號(hào) 授權(quán) 并登錄 Packagist 網(wǎng)站。
創(chuàng)建 TravisCI 帳號(hào)Travis CI 提供的是持續(xù)集成服務(wù)(Continuous Integration,簡稱 CI)。它綁定 Github 上面的項(xiàng)目,只要有新的代碼,就會(huì)自動(dòng)抓取,然后提供一個(gè)運(yùn)行環(huán)境,執(zhí)行測試,完成自動(dòng)化構(gòu)建,它還能將項(xiàng)目部署到我們的應(yīng)用服務(wù)器。這個(gè)教程主要講解使用這個(gè)服務(wù)的測試和自動(dòng)化構(gòu)建功能。
在開始前讓我們先完成以下準(zhǔn)備工作:
首先,訪問官方網(wǎng)站 Travis CI 使用 Github 授權(quán)登錄。
然后,當(dāng)授權(quán)登錄成功后,點(diǎn)擊右上角用戶頭像,這樣 Travis CI 會(huì)獲取到 Github 上你所有的版本庫信息。
最后,選擇你需要使用 TravisCI 服務(wù)幫你執(zhí)行測試和構(gòu)建的倉庫,點(diǎn)擊開啟按鈕。開啟成功后,任何 GitHub 提交代碼操作,都會(huì)觸發(fā) TravisCI 的鉤子服務(wù),然后執(zhí)行測試和構(gòu)建處理。
在完成以上帳號(hào)注冊流程后,我們就可以進(jìn)入到今天的正題,使用「使用 Travis CI 持續(xù)集成服務(wù)構(gòu)建 Composer 類庫」。
創(chuàng)建新的 Composer 類庫完成帳號(hào)創(chuàng)建及授權(quán)相關(guān)準(zhǔn)備工作后,現(xiàn)在讓我們就可以開始創(chuàng)建自己的 Composer 類庫了。
在 GitHub 創(chuàng)建項(xiàng)目倉庫第一步需要到 GitHub 網(wǎng)站點(diǎn)擊站點(diǎn)右上角加號(hào)(?)創(chuàng)建一個(gè)新的項(xiàng)目倉庫,這里我創(chuàng)建了一個(gè)名為 travis-composer-tutorial。
默認(rèn)的 GitHub 會(huì)給我們創(chuàng)建一個(gè)空的項(xiàng)目目錄,當(dāng)然如果在創(chuàng)建時(shí)你選擇了需要?jiǎng)?chuàng)建 .gitignore、 開源協(xié)議和 readme 文件時(shí),Github 還會(huì)給我們同時(shí)創(chuàng)建這些說明及配置文件。
將 GitHub 倉庫克隆到本地緊接著,進(jìn)入到我們的本地的工作目錄下,執(zhí)行 git clone 命令將 GitHub 中的項(xiàng)目克隆到本地:
cd your_workspace_directory git clone https://github.com/huliuqing/travis-composer-tutorial.git
請講自己的工作目錄及版本庫的 URL 地址替換掉。
初始化 Composer 項(xiàng)目初始化的目的是為我們新建的 travis-composer-tutorial 項(xiàng)目創(chuàng)建一個(gè) composer.json 元數(shù)據(jù)文件。創(chuàng)建這個(gè) JSON 配置文件有兩種方式:
手動(dòng)創(chuàng)建這個(gè) composer.json 文件,文件格式可以參考 庫 文檔;
通過 composer init 命令行工具,采用交互式命令創(chuàng)建。
// 在 travis-composer-tutorial 項(xiàng)目根目錄執(zhí)行下面的命令 cd travis-composer-tutorial composer init
引導(dǎo)初始化時(shí)需要我們創(chuàng)建以下幾個(gè)初始配置選項(xiàng):
Package name: 包的名稱,我的是 phpzendo/travis-composer-tutorial;
Description []: 包的描述;
Author: 包的作者;
Package Type (e.g. library, project, metapackage, composer-plugin) []: 你開發(fā)的類庫類型;
Minimum Stability: minimum-stability 字段的值;
License: 采用的 開源協(xié)議;
require: 需要依賴的其它包,必須要有一個(gè)版本約束。并且應(yīng)該遵循 foo/bar:1.0.0 這樣的格式。
下面是我初始化 Composer 項(xiàng)目的交互截圖,有一點(diǎn)需要說明由于當(dāng)時(shí)網(wǎng)絡(luò)原因并沒有在初始化時(shí)添加依賴的其它包,后續(xù)我們可以使用 composer require 引入 PHPUnit 依賴:
通過 composer require 命令引入 PHPUnit 單元測試測試工具創(chuàng)建依賴。
composer require phpunit/phpunit
在這里引入 PHPUnit 的原因是我們的項(xiàng)目需要使用 Travis CI 服務(wù)進(jìn)行持續(xù)集成和測試,當(dāng)然你也可以替換成別的單元測試工具。
到這里,基本上我們就完成了一個(gè)創(chuàng)建初始 Composer 類庫的功能。接下來,我們將進(jìn)入到項(xiàng)目的編碼階段。
創(chuàng)建源目錄完成基本的注冊和初始化工作后,才是進(jìn)行項(xiàng)目編碼階段,在項(xiàng)目根目錄下創(chuàng)建 src 文件夾。
項(xiàng)目的所有源碼都會(huì)放置到 src 目錄下,并采用 PSR4 自動(dòng)加載規(guī)范來定義文件結(jié)構(gòu)。
PSR 標(biāo)準(zhǔn)規(guī)范PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP 規(guī)范,是 PHP 開發(fā)的實(shí)踐標(biāo)準(zhǔn)。
這里我們需要使用 PSR4 規(guī)范是最新的「自動(dòng)加載」規(guī)范,它的功能是讓 Composer 能夠正確查找并加載我們項(xiàng)目的源文件。
使用 PSR4 規(guī)范定義文件的目錄結(jié)構(gòu)遵循以下原則:
( )*
更多有關(guān) PSR4 規(guī)范說明及使用可以查看 說明。
編寫模塊代碼現(xiàn)在讓我們來編寫項(xiàng)目的首個(gè)模塊吧。
作為教程,這里我們假設(shè)需要?jiǎng)?chuàng)建一個(gè) Dumper 類用于替代 php 內(nèi)置的 var_dump 輸出功能。
到 src 目錄下創(chuàng)建子目錄 Dumper,同時(shí)創(chuàng)建 Dumper/Dumper.php 類文件。
* @method mixed dump($expression, $title = null) * @license MIT */ class Dumper { /** * 打印變量的相關(guān)信息 * * @param mixed $expression * @param string|null $title * @return void */ public function dump($expression, $title = null) { echo ($title ?: "調(diào)試:") . "配置 Composer 自動(dòng)加載元數(shù)據(jù)"; var_dump($expression); echo ""; } }
編寫完成我們的模塊后,需要將項(xiàng)目目錄配置到 composer.json 文件的 autoload 元數(shù)據(jù)中。
autoload 配置功能是定義 composer 自動(dòng)加載與項(xiàng)目模塊的映射關(guān)系,定義后 composer 才能正確查找項(xiàng)目模塊自動(dòng)引入類文件。
有關(guān) autoload 使用說明可直接查看文檔。
確認(rèn)項(xiàng)目的命名空間。
我們模塊的命名空間為 PhpZendoDumperDumper。
當(dāng)前命名空間前綴為 PhpZendo 指向的是 src 目錄,意味著 composer 自動(dòng)加載會(huì)查找 src/Dumper/Dumper.php 文件并引入(require)。
將命名空間及文件引入關(guān)系添加到 autoload 配置
打開 *composer.json 文件并添加如下配置:
"autoload": { "psr-4": { "PhpZendo": "src/" } }
更新 composer 依賴。
執(zhí)行如下命令更新自動(dòng)加載依賴關(guān)系:
composer dump-autoload將項(xiàng)目推送到 GtiHub 并創(chuàng)建 Packagist 鉤子服務(wù)
到這里我們基本上已經(jīng)完成了開發(fā)一個(gè)簡單的 composer 類庫,現(xiàn)在我們可以將項(xiàng)目推送到 GitHub。
但是在推送之前,我們需要到 Packagist 官網(wǎng)配置 travis-composer-tutorial 項(xiàng)目的鉤子服務(wù)。
將項(xiàng)目提交到 GitHub 遠(yuǎn)程倉庫。
首先,確定是否有 .gitignore 文件,并確保 vendor 等目錄不會(huì)添加到版本控制中。
我的 .gitignore 文件實(shí)在創(chuàng)建 GitHub 時(shí)自動(dòng)創(chuàng)建的:
composer.phar /vendor/ # Commit your application"s lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file # composer.lock
推送項(xiàng)目到 GitHub。
git add * git commit -m "Create travis and composer tutorial." git push origin master
進(jìn)入 Packagist 官網(wǎng),點(diǎn)擊網(wǎng)頁右上角 Submit 按鈕添加 GitHub 代碼倉庫地址。
進(jìn)入頁面后將 https://github.com/huliuqing/... 配置到 Submit package 表單,提交即可。
添加完成后我們的 GitHub 項(xiàng)目即添加到了 Packagist。
不過此時(shí),我們的項(xiàng)目推送還不會(huì)自動(dòng)在 Packagist 中完成任何代碼推送的更新操作,而需要我們手動(dòng)的去執(zhí)行 update 操作才行,原因是當(dāng)前還沒有配置 GitHub 的鉤子服務(wù)。
如何配置鉤子服務(wù),可以到 說明文檔 去深入了解一下。
小結(jié)在這一小節(jié)我們深入了解了如何創(chuàng)建 Github 版本庫,使用 Composer 命令行工具初始化本地類庫元數(shù)據(jù)信息;并且學(xué)習(xí)了如何定義項(xiàng)目自動(dòng)加載配置和將 GitHub 版本庫關(guān)聯(lián)到 Packagist 站點(diǎn)。
下一節(jié)我們將講解本文另外一個(gè)主題,使用 Travis CI 服務(wù)構(gòu)建持續(xù)構(gòu)建和測試項(xiàng)目。
支持 Travis CI 服務(wù),創(chuàng)建可持續(xù)構(gòu)建項(xiàng)目Travis CI 提供一個(gè)運(yùn)行環(huán)境,然后執(zhí)行測試,完成構(gòu)建,甚至還能將我們的項(xiàng)目部署到應(yīng)用服務(wù)器。
要知道我們在編寫軟件時(shí),編碼僅僅是軟件開發(fā)過程中一小部分工作內(nèi)容;一個(gè)可靠的項(xiàng)目還需要對其進(jìn)行測試,使用 Travis CI 這類持續(xù)構(gòu)建服務(wù),可以簡化測試工作并保證項(xiàng)目的質(zhì)量。
這一節(jié)將學(xué)習(xí)持續(xù)構(gòu)建相關(guān)知識(shí)。
創(chuàng)建 PHPUnit 單元測試用例PHPUnit 是 xUnit 單元測試類庫家族中的一員,使用 PHPUnit 的一個(gè)主要目的是為我們的模塊創(chuàng)建單元測試用例。
在項(xiàng)目中,究竟何時(shí)才需要使用單元測試技術(shù)呢?
一個(gè)很簡單的判斷標(biāo)準(zhǔn)就是,當(dāng)你想在項(xiàng)目中使用類似 var_dump 函數(shù)打印輸出內(nèi)容時(shí),一個(gè)更好的方式就是將輸出替換成單元測試。
創(chuàng)建 tests 目錄讓我們在項(xiàng)目的根目錄下創(chuàng)建 tests 文件夾,之后我們所有的測試用例都會(huì)放置到這個(gè)目錄中。
編寫 PHPUnit 測試接下來需要編寫 PHPUnit 測試用例,如何編寫一個(gè)簡單的測試用里遵循以下規(guī)則:
針對類 Class 的測試寫在類 ClassTest中;
ClassTest(通常)繼承自 PHPUnitFrameworkTestCase;
測試都是命名為 test* 的公用方法。
更詳細(xì)內(nèi)容可以查看 PHPUnit 中文網(wǎng) 文檔說明。
所以這里我們創(chuàng)建一個(gè) DumperTest.php 單元測試用例,并將這個(gè)測試用例創(chuàng)建在 tests/unit/DumperTest.php 路徑下:
*/ class DumperTest extends TestCase { /** * 測試 Dumper 類實(shí)例化 * * @return void */ public function testDumper() { $dumper = new PhpZendoDumperDumper(); $this->assertInstanceOf(PhpZendoDumperDumper::class, $dumper); } }
這個(gè)測試用例主要用于檢測是否成功創(chuàng)建 Dumper 類。
執(zhí)行單個(gè)測試用例完成測試用例編碼工作后,我們需要驗(yàn)證測試是否通過。之前,我們的項(xiàng)目已經(jīng)引入了 phpunit 依賴,所以這里我們可以通過下面的命令去執(zhí)行測試腳本:
./vendor/bin/phpunit UnitTest ./tests/Unit/DumperTest.php
以下是執(zhí)行結(jié)果:
有關(guān) PHPUnit 命令行工具可以查看 命令行測試執(zhí)行器 相關(guān)文檔。
雖然,我們現(xiàn)在能夠成功執(zhí)行測試腳本,但是如果我們的測試用例有多個(gè)的話,這樣一個(gè)一個(gè)寫出每個(gè)測試文件似乎有點(diǎn)傻乎乎。
有沒有好的解決方案可以將所有 tests/unit 目錄下的測試文件都執(zhí)行測試呢?
接下來會(huì)交大家如何編寫 PHPUnit 測試 XML 配置文件。
編寫 PHPUnit 測試 XML 配置文件很多時(shí)候我們的測試腳本并非只有一個(gè)測試文件,而是會(huì)有許多的測試用例,這種情況下需要使用 XML 配置文件 來幫助我們的 PHPunit 找到所有這些測試文件路徑。
下面是我編寫的 phpunit.xml 配置文件信息:
tests/Unit
其中我們需要重點(diǎn)關(guān)注以下幾個(gè)屬性功能:
配置文件包含一個(gè)
phpunit 包含一個(gè)或多個(gè)
隨后,我們可以通過下面的 phpunit 命令行工具從 XML 文件中讀取配置并執(zhí)行測試:
./vendor/bin/phpunit -c phpunit.xml配置 Travis CI 服務(wù)
到這里說明我們的項(xiàng)目進(jìn)行的非常順利,接下來就是需要到 Travis CI 配置 GitHub 項(xiàng)目的鉤子服務(wù),并執(zhí)行自動(dòng)化測試。
Travis CI 官網(wǎng)開啟項(xiàng)目的鉤子服務(wù)如果測試一切順利的話我們就可以進(jìn)行下一步,到 Travis CI 官網(wǎng)去開啟 travis-composer-tutorial (這里請開啟自己的項(xiàng)目)項(xiàng)目的鉤子服務(wù),如何開啟可以到「創(chuàng)建 TravisCI 帳號(hào)」以及查看。
配置完成后可以看到看到 Travis CI 網(wǎng)站會(huì)獲取到我們的項(xiàng)目
編寫 YAML Travis CI 測試配置Travis 服務(wù)提供多種編程語言的自動(dòng)化測試支持,所有這里我們需要編寫 PHP 語言的測試配置。
Travis CI 配置文件使用 YAML 語言編寫,配置文件名為 .travis.yml。有關(guān)配置的具體細(xì)節(jié)可以到 Building a PHP project 去了解。
下面介紹我們的教程需要完成的一些配置信息:
language: php php: - 7.1 - 7.2 before_script: - composer install script: ./vendor/bin/phpunit -c phpunit.xml
language 和 php: language 用于配置項(xiàng)目采用的編程語言; php 用于指出當(dāng)項(xiàng)目使用 PHP 開發(fā)時(shí)選擇使用的 PHP 版本,這里我們使用 7.1 和 7.2 版本;
before_script: 用于在執(zhí)行 script 腳本前,需要執(zhí)行相關(guān)操作,我們這里去執(zhí)行 composer install 操作安裝相關(guān)依賴;
script:用于配置我們需要執(zhí)行的腳本,Travis CI 默認(rèn)會(huì)使用 PHPUnit 作為單元測試工具,并運(yùn)行 ./vendor/bin/phpunit -c phpunit.xml 進(jìn)行單元測試。
在我們的配置中,可以將 script 配置簡寫成:./vendor/bin/phpunit。
提交代碼到 GitHubgit add * git commit -m "Support travis ci and phpunit test." git push origin master
推送到 GitHub 會(huì)觸發(fā) Travis CI 的鉤子服務(wù),并在 Travis CI 執(zhí)行自動(dòng)化測試和構(gòu)建服務(wù)。
下面是 Travis CI 自動(dòng)構(gòu)建結(jié)果:
總結(jié)以上就是今天的主要內(nèi)容,希望對大家有所幫助。
參考資料持續(xù)集成服務(wù) Travis CI 教程
Composer 入門
使用 GitHub、Composer、Packagist 管理公開的 PHP 包(Step By Step)
Git 教程
TravisCI 文檔
如何簡單入門使用 Travis-CI 持續(xù)集成
學(xué)習(xí)開發(fā)自己的 Composer 包,并使用 GitHub 實(shí)時(shí)更新到 Packagist
YAML 語言教程
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28794.html
摘要:單元測試中,代碼覆蓋率經(jīng)常被用來衡量測試好壞的指標(biāo)。執(zhí)行的結(jié)果和導(dǎo)出的結(jié)果都可以在的下看到接下來就是把這些文件到上,就會(huì)自動(dòng)構(gòu)建,然后開始單元測試,并把測試結(jié)果中的代碼覆蓋率發(fā)送到。 本文以PHP項(xiàng)目作為例子所需要擁有(準(zhǔn)備)的: Github賬號(hào) 一個(gè)項(xiàng)目 看著篇幅挺大的,難免有什么遺漏,如果文中有錯(cuò)誤的地方,還請各位斧正!謝謝。因?yàn)楸緛砥痛螅跃蜎]配圖了,如果有很多人反...
摘要:自動(dòng)部署到遠(yuǎn)程服務(wù)器現(xiàn)在已經(jīng)可以自動(dòng)構(gòu)建了,那么接下來的一步就是部署到遠(yuǎn)程服務(wù)器。最后,貼出我自己的,里面有關(guān)涉及個(gè)人隱私的部分我會(huì)注釋并說明請?zhí)鎿Q成自己的登錄和登錄用戶請?zhí)鎿Q成自己的服務(wù)器本文參考鏈接使用進(jìn)行持續(xù)集成自動(dòng)化部署博客 Travis CI 是在軟件開發(fā)領(lǐng)域中的一個(gè)在線的,分布式的持續(xù)集成服務(wù),用來構(gòu)建及測試在GitHub托管的代碼。 showImg(https://seg...
摘要:單元測試的好處是給開發(fā)人員的,并不是給機(jī)器的。對于查詢構(gòu)造器這個(gè)項(xiàng)目,我們可以讓其在遠(yuǎn)程運(yùn)行環(huán)境安裝相關(guān)數(shù)據(jù)庫軟件,執(zhí)行數(shù)據(jù)表建立,數(shù)據(jù)導(dǎo)入,執(zhí)行單元測試等操作。查詢構(gòu)造器的完整代碼查詢構(gòu)造器的單元測試完整代碼。 debug 模式 對查詢構(gòu)造器進(jìn)行調(diào)試并不難,從其構(gòu)造 SQL -> 數(shù)據(jù)綁定 -> SQL 執(zhí)行的過程中就能發(fā)現(xiàn),要方便調(diào)試,只要可以觀察以下信息: 構(gòu)造的 SQL 綁定...
摘要:來這里看看的工程師如何進(jìn)行持續(xù)集成與持續(xù)部署。主要介紹了豆瓣移動(dòng)持續(xù)集成和測試相關(guān)實(shí)踐,用工具化自動(dòng)化社會(huì)化測試來解決遇到的問題,將打包發(fā)布環(huán)節(jié)自動(dòng)化。這期的持續(xù)集成實(shí)踐分享就到這里。 我們常看到許多團(tuán)隊(duì)和開發(fā)者分享他們的持續(xù)集成實(shí)踐經(jīng)驗(yàn),本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等項(xiàng)目搭建持續(xù)集成的實(shí)踐,以及一些國內(nèi)外公司的內(nèi)部持續(xù)集成...
閱讀 3946·2021-09-29 09:34
閱讀 3806·2021-09-27 13:34
閱讀 601·2021-09-24 09:47
閱讀 3064·2019-08-30 15:53
閱讀 1844·2019-08-26 13:54
閱讀 2110·2019-08-26 13:43
閱讀 575·2019-08-23 14:47
閱讀 1770·2019-08-23 14:28