一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码。所以围绕开源做持续集成(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。

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
