摘要:?jiǎn)卧獪y(cè)試中,代碼覆蓋率經(jīng)常被用來衡量測(cè)試好壞的指標(biāo)。執(zhí)行的結(jié)果和導(dǎo)出的結(jié)果都可以在的下看到接下來就是把這些文件到上,就會(huì)自動(dòng)構(gòu)建,然后開始單元測(cè)試,并把測(cè)試結(jié)果中的代碼覆蓋率發(fā)送到。
Travis-CI本文以PHP項(xiàng)目作為例子
所需要擁有(準(zhǔn)備)的:Github賬號(hào)
一個(gè)項(xiàng)目
看著篇幅挺大的,難免有什么遺漏,如果文中有錯(cuò)誤的地方,還請(qǐng)各位斧正!謝謝。
因?yàn)楸緛砥痛螅跃蜎]配圖了,如果有很多人反饋看不懂或者失敗了,我再后期補(bǔ)下圖。謝謝!
項(xiàng)目為保證項(xiàng)目始終處于健康穩(wěn)定的狀態(tài),我們需要一個(gè)可以持續(xù)的自動(dòng)的對(duì)貢獻(xiàn)的代碼進(jìn)行自動(dòng)化測(cè)試的服務(wù)。
Travis-CI就是在這樣的背景下于2011年開啟服務(wù),到現(xiàn)在為止已經(jīng)有超過300k個(gè)開源項(xiàng)目和235k的用戶在使用。
Travis-CI所做的工作就是自動(dòng)在虛擬機(jī)中運(yùn)行.travis.yml中設(shè)定的內(nèi)容進(jìn)行單元測(cè)試,生成并導(dǎo)出報(bào)告。
Composer開源項(xiàng)目之間一般有著相互依賴的關(guān)系,比如項(xiàng)目A的一個(gè)組件依賴于另一個(gè)項(xiàng)目B。當(dāng)這種依賴關(guān)系多了之后就需要一個(gè)管理依賴的工具。
Composer就是PHP的一個(gè)依賴管理工具。它允許你申明項(xiàng)目所依賴的代碼庫,并且會(huì)在你的項(xiàng)目中安裝他們。Composer中文
PackagistPackagist is the main Composer repository. It aggregates public PHP packages installable with Composer.
這個(gè)網(wǎng)站是主要的Composer倉庫,通過Composer發(fā)布的項(xiàng)目,所儲(chǔ)存的倉庫就是這個(gè)網(wǎng)站,這也是Composer安裝依賴的下載來源。可以使用Github賬號(hào)登錄
登錄之后可以提交自己的項(xiàng)目,不過需要項(xiàng)目中有composer.json文件,這在之后進(jìn)行介紹。
Coveralls單元測(cè)試中,代碼覆蓋率經(jīng)常被用來衡量測(cè)試好壞的指標(biāo)。
所謂的代碼覆蓋率簡(jiǎn)單的說就是在運(yùn)行完測(cè)試用例之后,走過了多少句的代碼,比如說,你要測(cè)試的一個(gè)函數(shù)有100行,但是測(cè)試用例只走過了80行,所以這個(gè)測(cè)試用例的代碼覆蓋率就是80%
Coveralls就是一個(gè)根據(jù)單元測(cè)試導(dǎo)出的數(shù)據(jù)進(jìn)行分析,展現(xiàn)代碼覆蓋率的一個(gè)工具。可以和很多的自動(dòng)構(gòu)建工具一起使用,本文以Travis-CI為例。
項(xiàng)目最終的目錄結(jié)構(gòu)/ ├── src/ │?? └── ClassName.php |── tests/ | ? ├── ClassNameTest/ | ? | └── ClassNameTest.php |?? └── Bootstrap.php |── .coveralls.yml |── .travis.yml |── LICENSE |── README.md |── composer.json |── example.php └── phpunit.xml.dist
下面開始具體的配置方法。
Composer如果想更深入的學(xué)習(xí)Composer可以查看官方文檔(地址在這一節(jié)最后)。一個(gè)重要的概念就是每一個(gè)項(xiàng)目都是一個(gè)包注
所以我們首先需要在項(xiàng)目根目錄新建一個(gè)composer.json文件,其中的內(nèi)容為(稍后我們?cè)倏雌渲械囊馑?/em>)
{ "name": "jshadowman/package", "description": "this is a test package", "version": "0.0.1", "type": "library", "keywords": [ "database", "logging" ], "license": "MIT", "require": [ "php": ">=5.4.0" ], "require-dev": [ "satooshi/php-coveralls":"*", "phpunit/phpunit": "*" ], "autoload": { "files": [ "./src/ClassName.php" ] } }
name: 這個(gè)字段顧名思義,包的名字,應(yīng)該包含Verdor name(供應(yīng)商)和Project Name(項(xiàng)目名)。值得注意的是這個(gè)字段的值應(yīng)該都是小寫的,這和資源庫發(fā)布注冊(cè)有關(guān)。具體請(qǐng)參考 Packagist
description: 這個(gè)字段應(yīng)該是這個(gè)項(xiàng)目的一個(gè)簡(jiǎn)短的簡(jiǎn)介。一行即可
version: 項(xiàng)目的版本,并不是必須的,而且建議忽略,具體請(qǐng)參考 Version 中文
type: 項(xiàng)目的類型,可選的值有library project metapackage composer-plugin 具體請(qǐng)參考 Type 中文
keywords: 用于在被搜索時(shí)的關(guān)鍵字,可以是一個(gè)數(shù)組 Keywords 中文
license: 項(xiàng)目發(fā)布所使用的開源協(xié)議,可選的值請(qǐng)參考 License 中文
require: 這表示項(xiàng)目所依賴的軟件包列表,除非這些依賴被滿足,否則不會(huì)完成安裝。Require 中文
require: 我們的項(xiàng)目依賴于平臺(tái)軟件包,也就是PHP,PHP的擴(kuò)展包和一些系統(tǒng)類庫。所以我們?cè)?b>require之中添加了對(duì)PHP的依賴,如果有依賴于其他的包,可以按照這種格式填寫。具體請(qǐng)參考 Platform-packages 中文
require-dev: 這個(gè)字段列出的依賴只有在測(cè)試和開發(fā)的時(shí)候才會(huì)安裝,屬于額外的依賴。具體請(qǐng)參考 Require-dev 中文
require & require-dev: 這兩個(gè)字段之下的列表項(xiàng)應(yīng)該是包名到版本的映射,其中版本有很多種寫法,可以根據(jù)需求過濾。具體請(qǐng)參考 Package-Links 中文
autoload: 表示的是autoloader的自動(dòng)加載映射。具體請(qǐng)參考 Autoload 中文
autoload: 其中的映射關(guān)系設(shè)計(jì)到PHP命名空間(Name Space)的一些知識(shí),具體請(qǐng)參考 PSR-0 - PSR-4 - PSR0-4_Github
composer.json中有很多可選的字段和值,編寫的規(guī)范可以參考Document,中文文檔
Coveralls在項(xiàng)目的根目錄新建.coveralls.yml文件,其中的內(nèi)容為
coverage_clover: build/logs/clover.xml json_path: build/logs/coveralls-upload.json
coverage_clover: 表示使用指定目錄的Clover XML格式的XML文件,默認(rèn)指向build/logs/clover.xml
json_path: 用來指定將被上傳到Coveralls網(wǎng)站的json文件,默認(rèn)指向build/logs/coveralls-upload.json
值得注意的是舊版本所使用的src_dir已經(jīng)在1.0.0版本中被移除了,所以請(qǐng)注意不要使用這個(gè)選項(xiàng)
Removed src_dir from CoverallsConfiguration
還有其他的配置選項(xiàng)請(qǐng)參考Github - satooshi/php-coveralls
進(jìn)入 Coveralls 網(wǎng)站 https://coveralls.io/
點(diǎn)擊右上角的 SIGN IN,在接下來的頁面中選擇GITHUB SIGN IN,然后使用自己的Github賬號(hào)授權(quán)登錄
如果你沒使用過Coveralls的話,登錄成功的界面應(yīng)該是讓你添加一個(gè)代碼倉庫
在ADD REPO標(biāo)題下列表中將你的項(xiàng)目從OFF撥到ON
接下來配置PHPunit單元測(cè)試。
PHPUnit在你的項(xiàng)目根目錄新建phpunit.xml.dist文件,其實(shí)這個(gè)文件也不一定要新建在根目錄,主要記得修改文件內(nèi)容中的路徑就行,不過最好就是根目錄和tests文件夾內(nèi)了。
phpunit.xml.dist文件的內(nèi)容為
./tests ./src ./vendor ./tests ./example.php
根元素
bootstrap 表示在測(cè)試運(yùn)行前先運(yùn)行一個(gè) "Bootstrap" PHP文件,一般用于配合Composer中的自動(dòng)載入,確保不會(huì)發(fā)生找不到類的情況
colors 表示是否使用彩色輸出
convertErrorsToExceptions PHPUnit 將會(huì)安插一個(gè)錯(cuò)誤處理函數(shù)來將錯(cuò)誤轉(zhuǎn)換為異常,設(shè)置為 false 則表示禁用
convertNoticesToExceptions 此選項(xiàng)設(shè)置為 true 時(shí),由 convertErrorsToExceptions 安插的錯(cuò)誤處理函數(shù)會(huì)將 E_NOTICE、E_USER_NOTICE、E_STRICT 錯(cuò)誤轉(zhuǎn)換為異常。
convertWarningsToExceptions此選項(xiàng)設(shè)置為 true 時(shí),由 convertErrorsToExceptions 安插的錯(cuò)誤處理函數(shù)會(huì)將 E_WARNING 或 E_USER_WARNING 錯(cuò)誤轉(zhuǎn)換為異常。
帶有一個(gè)或多個(gè)
最后的
完整的XML格式,內(nèi)容可以參考 XML配置文件
Travis-CI需要注意的是在根元素
中的屬性并不是所有都在那個(gè)頁面介紹的,還有一部分在命令行選項(xiàng)之中,所以如果在附錄C找不到,那就去命令行選項(xiàng)(注意根元素屬性在命令行選項(xiàng)中是以-分隔的)那一節(jié)找找,肯定有的。
使用Github賬號(hào)登錄Travis-CI Sign Up
點(diǎn)擊自己的頭像進(jìn)行個(gè)人資料界面,在下面你的項(xiàng)目中,點(diǎn)擊你所需要自動(dòng)構(gòu)建的項(xiàng)目前的按鈕,這個(gè)按鈕就會(huì)變成綠色的勾
在點(diǎn)擊到自己的用戶信息界面之后,在你的Repo上面會(huì)有一個(gè)簡(jiǎn)單的使用介紹,開啟Travis-CI是很簡(jiǎn)單的。
在你的項(xiàng)目根目錄新建.travis.yml文件,其中的內(nèi)容為
language: php php: - "5.4" - "5.5" - "5.6" - "7.0" before_script: - composer install --prefer-dist --dev --no-interaction script: - mkdir -p build/logs - phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml after_script: - travis_retry php vendor/bin/coveralls -v
language: 顧名思義,這就是你項(xiàng)目所用的語言,所支持的語言和格式可以查閱 Document,配置PHP
php: 這個(gè)底下是自動(dòng)構(gòu)建所使用的環(huán)境。注意,有固定的格式
before_script: 顧名思義,在正式script之前運(yùn)行的腳本(Shell)命令
script: 開始測(cè)試所用的命令
after_script: 在測(cè)試結(jié)束之后運(yùn)行的命令,比如用于導(dǎo)出結(jié)果到COVERALLS
其中所用到命令介紹git push開始測(cè)試之前需要做的準(zhǔn)備工作,即安裝項(xiàng)目需要的依賴包。
composer install --prefer-dist --dev --no-interaction
這句命令的作用是根據(jù)composer.json所描述的依賴關(guān)系進(jìn)行依賴的安裝,具體請(qǐng)參考 Install 中文
--prefer-dist: composer 將盡可能的從 dist 獲取依賴的項(xiàng)目,這將大幅度的加快在 build servers 上的安裝
--dev: 安裝 require-dev 字段中列出的包
--no-interaction: 不要詢問任何交互問題。因?yàn)槭亲詣?dòng)進(jìn)行依賴安裝的,我們不能手動(dòng)控制,所以發(fā)生任何需要交互的問題,我們都是處理不了的
準(zhǔn)備工作做好之后,開始正式的測(cè)試工作,首先當(dāng)然需要先新建一個(gè)存放日志的目錄
mkdir -p build/logs這句命令會(huì)讓系統(tǒng)創(chuàng)建一個(gè)連續(xù)的目錄,如果父目錄不存在就先創(chuàng)建父目錄
開始進(jìn)行單元測(cè)試并導(dǎo)出代碼覆蓋率報(bào)告
phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml
這句命令是運(yùn)行phpunit進(jìn)行單元測(cè)試,具體請(qǐng)參考 PHPUnit - 命令行選項(xiàng)
-c phpunit.xml.dist: 從指定的文件中讀取配置信息,這里的配置文件是phpunit.xml.dist
--coverage-clover build/logs/clover.xml:生成并導(dǎo)出Clover XML格式的代碼覆蓋率報(bào)告
測(cè)試完之后接下來就是導(dǎo)出報(bào)告到Coveralls了
travis_retry php vendor/bin/coveralls -v這句命令是其實(shí)是php vendor/bin/coveralls -v,前面的travis_retry的作用是檢查后面命令的返回值,如果不是0(返回值為0表示正常結(jié)束),那就重復(fù)執(zhí)行3次,如果3次都不為0,那就報(bào)錯(cuò)。
php vendor/bin/coveralls -v:
這句命令是使用PHP執(zhí)行vendor/bin/下的coveralls這個(gè)文件,-v表示verbose,即顯示詳細(xì)的報(bào)告。
這個(gè)命令執(zhí)行之后就可以在Coveralls這個(gè)網(wǎng)站中看到詳細(xì)的數(shù)據(jù)了。phpunit執(zhí)行的結(jié)果和coveralls導(dǎo)出的結(jié)果都可以在Travis-CI的Build Jobs下看到
接下來就是把這些文件push到Github上,Travis-CI就會(huì)自動(dòng)構(gòu)建,然后開始單元測(cè)試,并把測(cè)試結(jié)果中的代碼覆蓋率發(fā)送到Coveralls。如此,一套流程就結(jié)束了。
展示辛辛苦苦大半天,就是為了展示自己的成績(jī)啊。
所以我們看到的別人家項(xiàng)目地下這么漂亮的圖標(biāo)我們也要有啊。
在README.md文件中添加(注意將以下 Github_ID 替換為自己的 Github-ID,將 Repo_Name 替換為你的項(xiàng)目名字。沒有尖括號(hào)哦~還有注意區(qū)分大小寫哦~如果還需要改分支(branch)的話,看到鏈接你應(yīng)該也懂吧?我相信你! )
[![Build Status](https://travis-ci.org// .svg?branch=master)](https://travis-ci.org/ / ) [![Coverage Status](https://coveralls.io/repos/github/ / /badge.svg?branch=master)](https://coveralls.io/github/ / ?branch=master)
其實(shí)這些markdown語句可以直接復(fù)制的
Travis-CI: Build圖標(biāo)可以在Travis-CI網(wǎng)站中自己項(xiàng)目名的右邊有一個(gè) build:**** 的圖標(biāo),直接點(diǎn)擊這個(gè)圖標(biāo),將Image URL改成Makedown就可以看到啦
Coveralls: 也是進(jìn)入自己Repo的詳細(xì)信息中,中間是LATEST BUILDS信息,在最右邊有一個(gè)README BADGE,底下那個(gè)圖標(biāo)右邊有個(gè)按鈕Embed ?,點(diǎn)擊復(fù)制Markdown的語句即可。
Packagist(可選)在覺得自己的項(xiàng)目開發(fā)的差不多時(shí),我們就可在在Packagist上發(fā)布自己的包啦,發(fā)布之后,就可以被別人的項(xiàng)目通過Composer所依賴~
可以使用Github賬號(hào)登錄,或者自己注冊(cè)個(gè)賬號(hào)登錄,在右上角Sign In選擇是注冊(cè)還是使用Github賬號(hào)登錄
注冊(cè)完之后,可以在右上方Submit中提交一個(gè)包,點(diǎn)擊Submit按鈕 - Submit
接下來會(huì)讓你輸入Repository URL,直接輸入git://github.com/
Packagit會(huì)在后臺(tái)clone你的項(xiàng)目,并且檢查項(xiàng)目中的composer.json文件,第一個(gè)要檢查的就是包的名字,如果包名中有大寫的字母,Packagit就會(huì)報(bào)一個(gè)包名不應(yīng)該有大寫字母的錯(cuò)誤,所以,這就是上文所說包名最好是小寫的來由。
提交之后就可以看到自己的這個(gè)包的一些信息了,比如被下載了多少次,被安裝了多少次。
回到Github,打開代碼倉庫的Settings -> Webhooks & services,然后在Services右邊有個(gè)Add Service的按鈕,點(diǎn)擊輸入查找Packagit
之后會(huì)讓你輸入用戶名和Token,這些信息都在你的Packagit主頁中 個(gè)人主頁
個(gè)人主頁有個(gè)Your API Token的按鈕,按下按鈕,就可以看到自己的API TOKEN了,注意保密哦
其中packagist海油4個(gè)小圖標(biāo),記得替換 PACKAGIST_ID 和 PACKAGE_NAME 哦,不是 Github_ID 和 Repo_Name 哦
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21562.html
摘要:為你的項(xiàng)目添加持續(xù)集成本篇文章接上篇基于發(fā)布包的流程,繼續(xù)為項(xiàng)目添加持續(xù)集成提供的是持續(xù)集成服務(wù)。它綁定上的項(xiàng)目,只要有新代碼更新,它就會(huì)自動(dòng)抓取。 為你的GitHub項(xiàng)目添加持續(xù)集成Travis CI 本篇文章接上篇 《基于typescript發(fā)布npm包的流程》,繼續(xù)為項(xiàng)目添加持續(xù)集成 Travis: Travis CI 提供的是持續(xù)集成服務(wù)。它綁定 GitHub 上的項(xiàng)目,只...
摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個(gè)的框架。行為驅(qū)動(dòng)開發(fā)是來自測(cè)試驅(qū)動(dòng)開發(fā)的開發(fā)過程。簡(jiǎn)單的說,它就是經(jīng)常可能一天幾次將小塊代碼整合進(jìn)基礎(chǔ)代碼當(dāng)中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請(qǐng)點(diǎn)擊?協(xié)同翻譯介紹?。 文章...
摘要:一個(gè)靠譜的應(yīng)該包含以下幾部分言簡(jiǎn)意賅的項(xiàng)目介紹你的項(xiàng)目解決了什么核心問題,有哪些令人心動(dòng)的特性。除了在中提到遵循的開源協(xié)議外,一個(gè)靠譜的開源項(xiàng)目還會(huì)將該開源協(xié)議的內(nèi)容文檔放在自己的項(xiàng)目下方。 0. 前言 寫前端代碼一段時(shí)間之后,你可能會(huì)萌生做一個(gè)開源項(xiàng)目的想法,一方面將自己的好點(diǎn)子分享出去讓更多的人受益,另一方面也可以在社區(qū)貢獻(xiàn)的環(huán)境下學(xué)到更多的東西從而快速成長(zhǎng)。但是開源項(xiàng)目也有開源項(xiàng)...
摘要:一個(gè)靠譜的應(yīng)該包含以下幾部分言簡(jiǎn)意賅的項(xiàng)目介紹你的項(xiàng)目解決了什么核心問題,有哪些令人心動(dòng)的特性。除了在中提到遵循的開源協(xié)議外,一個(gè)靠譜的開源項(xiàng)目還會(huì)將該開源協(xié)議的內(nèi)容文檔放在自己的項(xiàng)目下方。 0. 前言 寫前端代碼一段時(shí)間之后,你可能會(huì)萌生做一個(gè)開源項(xiàng)目的想法,一方面將自己的好點(diǎn)子分享出去讓更多的人受益,另一方面也可以在社區(qū)貢獻(xiàn)的環(huán)境下學(xué)到更多的東西從而快速成長(zhǎng)。但是開源項(xiàng)目也有開源項(xiàng)...
閱讀 644·2023-04-26 02:08
閱讀 2667·2021-11-18 10:02
閱讀 3472·2021-11-11 16:55
閱讀 2354·2021-08-17 10:13
閱讀 2913·2019-08-30 15:53
閱讀 695·2019-08-30 15:44
閱讀 2560·2019-08-30 11:10
閱讀 1766·2019-08-29 16:57