この記事では例としてPHPプロジェクトを使用します。 必要なもの(準備するもの):
Githubアカウント
かなり長さがあるようです。記事に何かが欠けていることは避けられません。間違っている場合は修正してください。ありがとう。もともと記事が大きいので写真がありませんが、わからない・失敗したという報告が多ければ後ほど写真を追加します。ありがとう!
プロジェクト プロジェクトが常に健全で安定した状態であることを保証するために、提供されたコードを自動的にテストし続けることができるサービスが必要です。
Travis-CI が行うことは、単体テストのために .travis.yml に設定されたコンテンツを仮想マシンで自動的に実行し、レポートを生成してエクスポートすることです。
Composer
オープンソース プロジェクトには通常、相互依存関係があります。たとえば、プロジェクト A のコンポーネントは別のプロジェクト B に依存します。このような依存関係が多数ある場合は、依存関係を管理するツールが必要になります。
Packagist
Packagist は、Composer のメイン リポジトリであり、Composer インストールの依存関係のダウンロード ソースでもあります。 Github アカウントを使用してログインできます
カバーオール
単体テストでは、コード カバレッジはテストの品質を測定する指標としてよく使用されます。いわゆるコード カバレッジとは、テスト ケースの実行後に渡されたコードの行数を意味します。たとえば、テストしたい関数には 100 行がありますが、テスト ケースは 80 行しか通過していません。このテスト ケースのコード カバレッジは 80% です
Coveralls は、単体テストによってエクスポートされたデータに基づいてコード カバレッジを分析して表示するツールです。この記事では、Travis-CI を例として取り上げます。
/├── src/│ └── ClassName.php|── tests/| ├── ClassNameTest/| | └── ClassNameTest.php| └── Bootstrap.php|── .coveralls.yml|── .travis.yml|── LICENSE|── README.md|── composer.json|── example.php└── phpunit.xml.dist
Composer
そのため、まず
プロジェクトのルートディレクトリ
{ "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" ] }}
名前: このフィールドの名前が示すように、パッケージの名前には Verdor 名 (サプライヤー) とプロジェクト名 (プロジェクト名) を含める必要があります。このフィールドの値はすべて小文字にする必要があることに注意してください。これは、リソース ライブラリのリリース登録に関連しています。詳細については、Packagist を参照してください。
version: プロジェクトのバージョンは必須ではありません
キーワード: 検索時に使用されるキーワード。配列にすることができます。 キーワード 中国語
ライセンス: に使用されるオープン ソース プロトコルオプションの値については、「中国語のライセンス」を参照してください。
require: これは、プロジェクトが依存するソフトウェア パッケージのリストを示します。これらの依存関係が満たされない限り、インストールは完了しません。中国語が必要です
require: 私たちのプロジェクトは、PHP、PHP 拡張パッケージ、およびいくつかのシステム クラス ライブラリであるプラットフォーム ソフトウェア パッケージに依存しています。そこで、require に PHP への依存関係を追加しました。他のパッケージへの依存関係がある場合は、この形式で入力できます。詳細については、「プラットフォーム パッケージ 中国語」を参照してください。
require-dev: このフィールドにリストされている依存関係は、テストおよび開発中にのみインストールされ、追加の依存関係です。詳細については、「Require-dev 中国語」を参照してください。
require & require-dev: これら 2 つのフィールドの下のリスト項目は、パッケージ名からバージョンへのマッピングである必要があります。バージョンを記述する方法は多数あり、フィルターすることができます。ニーズに応じて。詳細については、Package-Links 中国語
autoload:表示的是 autoloader的自动加载映射。具体请参考 Autoload 中文
autoload:其中的映射关系设计到PHP命名空间(Name Space)的一些知识,具体请参考 PSR-0- PSR-4- PSR0-4_Github
composer.json中有很多可选的字段和值,编写的规范可以参考 Document, 中文文档
在项目的 根目录新建 .coveralls.yml文件,其中的内容为
coverage_clover: build/logs/clover.xmljson_path: build/logs/coveralls-upload.json
coverage_clover:表示使用指定目录的 Clover XML格式的XML文件,默认指向 build/logs/clover.xml
json_path:用来指定将被上传到 Coveralls网站的json文件,默认指向 build/logs/coveralls-upload.json
值得注意的是旧版本所使用的 src_dir已经在1.0.0版本中 被移除了,所以请注意 不要使用这个选项
Removed src_dir from CoverallsConfiguration还有其他的配置选项请参考 Github - satooshi/php-coveralls
接下来在 Coveralls网站中添加仓库:
进入 Coveralls网站 https://coveralls.io/
点击右上角的 SIGN IN,在接下来的页面中选择 GITHUB SIGN IN,然后使用自己的Github账号授权登录
如果你没使用过 Coveralls的话,登录成功的界面应该是让你添加一个代码仓库
在 ADD REPO标题下列表中将你的项目从 OFF拨到 ON
接下来配置 PHPunit单元测试。
在你的 项目根目录新建 phpunit.xml.dist文件,其实这个文件也不一定要新建在根目录,主要记得 修改文件内容中的路径就行,不过最好就是根目录和tests文件夹内了。
phpunit.xml.dist文件的内容为
<phpunit bootstrap="tests/Bootstrap.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" > <testsuites> <testsuite name="Class Test Suite"> <directory>./tests</directory> </testsuite> </testsuites> <filter> <whitelist> <directory>./src</directory> <exclude> <directory>./vendor</directory> <directory>./tests</directory> <file>./example.php</file> </exclude> </whitelist> </filter> <logging> <log type="coverage-clover" target="build/logs/clover.xml"/> <log type="coverage-text" target="php://stdout" showUncoveredFiles="true"/> </logging></phpunit>
根元素
bootstrap表示在测试运行前先运行一个 "Bootstrap" PHP文件,一般用于配合 Composer中的自动载入,确保不会发生找不到类的情况
colors表示是否使用彩色输出
convertErrorsToExceptionsPHPUnit 将会安插一个错误处理函数来将错误转换为异常,设置为 false 则表示禁用
convertNoticesToExceptions此选项设置为 true 时,由 convertErrorsToExceptions 安插的错误处理函数会将 E_NOTICE、E_USER_NOTICE、E_STRICT 错误转换为异常。
convertWarningsToExceptions此选项设置为 true 时,由 convertErrorsToExceptions 安插的错误处理函数会将 E_WARNING 或 E_USER_WARNING 错误转换为异常。
带有一个或多个
最后的
完整的XML格式,内容可以参考 XML配置文件
需要注意的是在根元素
使用 Github账号登录 Travis-CI Sign Up
点击自己的头像进行个人资料界面,在下面你的项目中,点击你所需要自动构建的项目前的按钮,这个按钮就会变成绿色的勾
在点击到自己的用户信息界面之后,在你的Repo上面会有一个简单的使用介绍,开启Travis-CI是很简单的。
在你的 项目根目录新建 .travis.yml文件,其中的内容为
language: phpphp: - '5.4' - '5.5' - '5.6' - '7.0'before_script: - composer install --prefer-dist --dev --no-interactionscript: - mkdir -p build/logs - phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xmlafter_script: - travis_retry php vendor/bin/coveralls -v
language:顾名思义,这就是你项目所用的语言,所支持的语言和格式可以查阅 Document, 配置PHP
php:这个底下是自动构建所使用的环境。注意,有固定的格式
before_script:顾名思义,在正式 script之前运行的脚本( Shell)命令
script:开始测试所用的命令
after_script:在测试结束之后运行的命令,比如用于导出结果到 COVERALLS
开始测试之前需要做的准备工作,即安装项目需要的依赖包。
composer install --prefer-dist --dev --no-interaction这句命令的作用是根据 composer.json所描述的依赖关系进行依赖的安装,具体请参考 Install 中文
--prefer-dist:composer 将尽可能的从 dist 获取依赖的项目,这将大幅度的加快在 build servers 上的安装
--dev:安装 require-dev 字段中列出的包
--no-interaction:不要询问任何交互问题。因为是自动进行依赖安装的,我们不能手动控制,所以发生任何需要交互的问题,我们都是处理不了的
准备工作做好之后,开始正式的测试工作,首先当然需要先新建一个存放日志的目录
mkdir -p build/logs这句命令会让系统创建一个连续的目录,如果父目录不存在就先创建父目录
开始进行单元测试并导出代码覆盖率报告
phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml这句命令是运行phpunit进行单元测试,具体请参考 PHPUnit- 命令行选项
-c phpunit.xml.dist:从指定的文件中读取配置信息,这里的配置文件是 phpunit.xml.dist
--coverage-clover build/logs/clover.xml:生成并导出 Clover XML格式的代码覆盖率报告
测试完之后接下来就是导出报告到Coveralls了
travis_retry php vendor/bin/coveralls -v这句命令是其实是 php vendor/bin/coveralls -v,前面的 travis_retry的作用是检查后面命令的返回值,如果不是0(返回值为0表示正常结束),那就重复执行3次,如果3次都不为0,那就报错。
php vendor/bin/coveralls -v:
这句命令是使用PHP执行vendor/bin/下的coveralls这个文件, -v表示 verbose,即显示详细的报告。
这个命令执行之后就可以在 Coveralls这个网站中看到详细的数据了。
phpunit执行的结果和 coveralls导出的结果都可以在 Travis-CI的 Build Jobs下看到
接下来就是把这些文件push到Github上, Travis-CI就会自动构建,然后开始单元测试,并把测试结果中的代码覆盖率发送到 Coveralls。如此,一套流程就结束了。
辛辛苦苦大半天,就是为了展示自己的成绩啊。所以我们看到的别人家项目地下这么漂亮的图标我们也要有啊。
在 README.md文件中添加( 注意将以下 Github_ID 替换为自己的 Github-ID,将 Repo_Name 替换为你的项目名字。没有尖括号哦~还有注意区分大小写哦~如果还需要改分支(branch)的话,看到链接你应该也懂吧?我相信你!)
[![Build Status](https://travis-ci.org/<Github_ID>/<Repo_Name>.svg?branch=master)](https://travis-ci.org/<Github_ID>/<Repo_Name>)[![Coverage Status](https://coveralls.io/repos/github/<Github_ID>/<Repo_Name>/badge.svg?branch=master)](https://coveralls.io/github/<Github_ID>/<Repo_Name>?branch=master)
其实这些 markdown语句可以直接复制的
Travis-CI: Build图标可以在 Travis-CI网站中自己项目名的右边有一个 build:****的图标,直接点击这个图标,将 Image URL改成 Makedown就可以看到啦
Coveralls:也是进入自己Repo的详细信息中,中间是 LATEST BUILDS信息,在最右边有一个 README BADGE,底下那个图标右边有个按钮 Embed ▾,点击复制 Markdown的语句即可。
在觉得自己的项目开发的差不多时,我们就可在在 Packagist上发布自己的包啦,发布之后,就可以被别人的项目通过 Composer所依赖~
可以使用Github账号登录,或者自己注册个账号登录,在右上角 Sign In选择是注册还是使用Github账号登录
注册完之后,可以在右上方 Submit中提交一个包,点击 Submit按钮 - Submit
接下来会让你输入 Repository URL,直接输入 git://github.com/
Packagit会在后台clone你的项目,并且检查项目中的 composer.json文件,第一个要检查的就是包的名字,如果包名中有大写的字母,Packagit就会报一个包名不应该有大写字母的错误,所以,这就是上文所说包名最好是小写的来由。
提交之后就可以看到自己的这个包的一些信息了,比如被下载了多少次,被安装了多少次。
回到Github,打开代码仓库的 Settings -> Webhooks & services,然后在 Services右边有个 Add Service的按钮,点击输入查找 Packagit
之后会让你输入用户名和Token,这些信息都在你的 Packagit主页中 个人主页
个人主页有个 Your API Token的按钮,按下按钮,就可以看到自己的API TOKEN了, 注意保密哦
其中 packagist海油4个小图标,记得替换 PACKAGIST_ID和 PACKAGE_NAME哦,不是 Github_ID和 Repo_Name哦