PHP开源项目使用Travis CI进行持续集成
一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(Continuous Integration)变得越来越重要,而目前使用最广泛的免费CI工具当数Travis CI,以我的
一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(Continuous Integration)变得越来越重要,而目前使用最广泛的免费CI工具当数Travis CI,以我的项目EvaThumber为例,来介绍一下如何在PHP开源项目中配合Travis CI进行持续集成
Travis CI能做的最主要工作是自动运行项目的单元测试并生成报告。例如进入EvaThumber的Travis CI页面,可以看到最新版本的测试情况,默认设置下,每次对项目进行Push时,都会触发Travis CI运行一次测试,测试环境包括PHP5.3与PHP5.4两个主流版本。Travis CI同时提供了一个项目状态图标,可以放置在项目主页告知用户当前的测试情况:
EvaThumber Master分支:
PHP项目的目录结构
如何开始一个PHP项目的持续集成,首先从项目的目录结构说起。目前的PHP项目一般都会遵守PHP-FIG制订的PSR规范,可以根据实际项目与团队的情况选择规范的严格程度,如果是新项目建议尽可能选择PSR-2或以上级别。
遵守规范的意义在于你的项目可以非常容易的集成到其他项目中,同时因为有了相同的代码书写约定,别人也更加容易阅读你的代码。所以越是优秀的PHP项目,越能严格的遵守规范,这会让整个PHP社区进入一个良性循环。
那么一个遵循PSR-2规范的PHP项目进行CI,推荐目录结构以及必须的文件如下:
<code>src/ EvaThumber/ Thumber.php tests/ EvaThumberTest/ ThumberTest.php Bootstrap.php phpunit.xml.dist vendor/ .travis.yml composer.json LICENSE </code>
-
src
目录用于存放项目源代码,文件夹命名必须与命名空间一致,以便可以进行类的自动载入 -
tests
目录放置单元测试代码,推荐与src目录保持一样的结构,在文件夹与文件名后缀Test以避免重名。 -
tests/Bootstrap.php
不是必须的,但一般都会存在,主要用于初始化类的自动载入功能 -
tests/phpunit.xml.dist
是PHPUnit的配置文件,一般来说可以简单配置一下要测试的目录以及Bootstrap.php的位置,详细的可配置项参考官网说明 -
vendor
目录用于放置项目依赖的第三方类库。 -
.travis.yml
是Travis CI的配置文件,在这个文件中可以设置项目语言,测试环境等。可以参考Travis CI详细设置 -
composer.json
是Composer管理第三方类库依赖关系的配置文件,参考Composer详细文档 -
LICENSE
内文是当前项目使用的许可证
依赖管理并加入启动文件
EvaThumber依赖一些第三方项目,所以最终composer.json
的内容如下:
<code>{ "<span>name</span>": <span><span>"AlloVince/EvaThumber"</span></span>, "<span>description</span>": <span><span>"EvaThumber"</span></span>, "<span>license</span>": <span><span>"BSD-3-Clause"</span></span>, "<span>homepage</span>": <span><span>"http://avnpc.com/"</span></span>, "<span>require</span>": <span>{ "<span>php</span>": <span><span>">=5.3.3"</span></span>, "<span>imagine/Imagine</span>": <span><span>"dev-master"</span> }</span></span>, "<span>require-dev</span>": <span>{ "<span>rmccue/Requests</span>": <span><span>"dev-master@dev"</span></span>, "<span>aferrandini/phpqrcode</span>": <span><span>"dev-master@dev"</span></span>, "<span>symfony/process</span>": <span><span>"dev-master@dev"</span> }</span></span>, "<span>autoload</span>": <span>{ "<span>psr-0</span>": <span>{ "<span>Requests</span>": <span><span>"library/"</span></span>, "<span>PHPQRCode</span>": <span><span>"lib/"</span> }</span> }</span> }</span> </code>
这个配置文件中首先定义了EvaThumber自己的名称,然后规定php运行环境必须大于等于5.3.3,并且列出了所有依赖项目的名称,autoload栏目则对PSR-0的项目的自动加载单独进行了处理。最终当EvaThumber项目被使用时,只需要在项目目录下运行
<code>composer install </code>
即可安装依赖。安装完毕后会生成vendor/autoload.php
文件,由于单元测试也需要自动加载的支持,我们编写tests/Bootstrap.php
为:
<code><span><?php </span> <span>$loader</span> = <span>include</span> __DIR__ . <span>'/../vendor/autoload.php'</span>; <span>$loader</span>->add(<span>'EvaThumber'</span>, __DIR__ . <span>'/../src'</span>); </span></code>
配置单元测试
有了单元测试的启动文件,为了在每次运行测试时加载,需要编写tests/phpunit.xml.dist
为:
<code><span>phpunit</span> <span>bootstrap</span>=<span>"./Bootstrap.php"</span> <span>colors</span>=<span>"true"</span>> <span>testsuites</span>> <span>testsuite</span> <span>name</span>=<span>"EvaThumber Test Suite"</span>> <span>directory</span>>./EvaThumberTest<span><span>directory</span>></span> <span><span>testsuite</span>></span> <span><span>testsuites</span>></span> <span>filter</span>> <span>whitelist</span>> <span>directory</span>>../src/EvaThumber/<span><span>directory</span>></span> <span>exclude</span>> <span>directory</span>>../vendor/<span><span>directory</span>></span> <span><span>exclude</span>></span> <span><span>whitelist</span>></span> <span><span>filter</span>></span> <span><span>phpunit</span>></span> </code>
主要配置了三点:
- 指定启动文件为同目录下的
Bootstrap.php
- 指定单元测试用例目录为同目录下的
EvaThumberTest
- 指定测试代码路径,并将
vendor
目录排除,因为vendor目录为第三方依赖,无需测试
配置好之后在tests目录下运行
<code>phpunit -v </code>
即可
PHPUnit安装
如果没有安装PHPUnit,ubuntu下可以很简单的用以下指令安装:
<code>apt-get install php-pear pear channel-<span><span>update</span> pear.php.net pear upgrade-<span>all</span> pear channel-discover pear.phpunit.de pear install -a phpunit/PHPUnit </span></code>
配置并运行Travis CI
由上面的配置可以知道,如果想测试EvaThumber,必须要安装第三方依赖,同时进入tests目录运行phpunit
-v
。所以Travis CI的配置文件.travis.yml
如下:
<code>language: php php: - 5.3 - 5.4 before_script: - composer install - cd tests script: phpunit -v </code>
Travis CI会自动完成Git Clone的工作,before_script
很好理解,一一录入在开始测试前需要运行的指令即可。
最后进入Travis CI主页,用Github帐号直接登录。点击自己的名字后,会将自己的开源项目全部列举出来。选择要进行测试的项目,将右边的开关设为On就会自动开始测试。
接收外部的提交
如果其他人Fork了EvaThumber并发起了Pull Request,同样会触发Travis CI自动运行,如果提交进来的代码无法通过单元测试,Travis CI会自动回复Pull Request并显示测试报告,这样就能保证已有代码的API不会被破坏。
而如果是Bug Fix或者新功能的添加,那么可以要求提交者配套对应的单元测试,否则不予以Merge。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。
