[プロジェクトの継続的統合] プロジェクトの自動テストとコード カバレッジ テストを作成する

WBOY
リリース: 2016-06-23 13:06:54
オリジナル
1278 人が閲覧しました

この記事では例としてPHPプロジェクトを使用します。 必要なもの(準備するもの):

  • Githubアカウント

  • かなり長さがあるようです。記事に何かが欠けていることは避けられません。間違っている場合は修正してください。ありがとう。もともと記事が大きいので写真がありませんが、わからない・失敗したという報告が多ければ後ほど写真を追加します。ありがとう!

Travis-CI

プロジェクト プロジェクトが常に健全で安定した状態であることを保証するために、提供されたコードを自動的にテストし続けることができるサービスが必要です。

このような背景のもと、Travis-CI は 2011 年にサービスを開始しました。これまでに、30 万以上のオープンソース プロジェクトと 23 万 5,000 人のユーザーによって使用されています。

Travis-CI が行うことは、単体テストのために .travis.yml に設定されたコンテンツを仮想マシンで自動的に実行し、レポートを生成してエクスポートすることです。

Composer

オープンソース プロジェクトには通常、相互依存関係があります。たとえば、プロジェクト A のコンポーネントは別のプロジェクト B に依存します。このような依存関係が多数ある場合は、依存関係を管理するツールが必要になります。

Composer は、PHP の依存関係管理ツールです。これにより、プロジェクトが依存するコード ライブラリを宣言し、プロジェクトにインストールすることができます。 Composer中文

Packagist

Packagist は、Composer のメイン リポジトリであり、Composer インストールの依存関係のダウンロード ソースでもあります。 Github アカウントを使用してログインできます

ログイン後、独自のプロジェクトを送信できますが、プロジェクトには後ほど紹介する Composer.json ファイルが必要です。

カバーオール

単体テストでは、コード カバレッジはテストの品質を測定する指標としてよく使用されます。

いわゆるコード カバレッジとは、テスト ケースの実行後に渡されたコードの行数を意味します。たとえば、テストしたい関数には 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

Composer について詳しく知りたい場合は、公式ドキュメントをチェックしてください (アドレスはこのセクションの最後にあります)。重要な概念は、すべてのプロジェクトはパッケージであるということです

そのため、まず

プロジェクトのルートディレクトリ

に新しいcomposer.jsonファイルを作成する必要があります。その内容は次のとおりです(その意味は後で説明します)

{  "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 を参照してください。

  • 説明: このフィールドはプロジェクトの簡単な紹介です。たった 1 行

    version: プロジェクトのバージョンは必須ではありません
  • 、無視することをお勧めします
  • 詳細については、バージョン中国語を参照してください

  • type: プロジェクトのタイプ、オプションの値。は、ライブラリ プロジェクトのメタパッケージ、composer-plugin 詳細については、「中国語の入力」を参照してください。

    キーワード: 検索時に使用されるキーワード。配列にすることができます。 キーワード 中国語
  • ライセンス: に使用されるオープン ソース プロトコルオプションの値については、「中国語のライセンス」を参照してください。
  • 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

在项目的 根目录新建 .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

在你的 项目根目录新建 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 错误转换为异常。

  • 带有一个或多个 子元素的 元素用于多组的测试套件

  • 顾名思义,过滤器,对目录下的文件或文件夹进行过滤

  • 下的 表示白名单,即需要的部分

  • 下的 顾名思义,即需要的目录

  • 下的 这是需要排除的部分,底下的排除项目看标签名就知道了,可以排除目录或者单个文件

  • 最后的 部分就是日志纪录的内容了。

    • 表示导出 coverage-clover格式的文件,导出文件名为 build/logs/clover.xml

    • 表示将日志直接输出到标准输出,即终端上。

完整的XML格式,内容可以参考 XML配置文件

需要注意的是在根元素 中的属性并不是所有都在那个页面介绍的,还有一部分在 命令行选项之中,所以如果在附录C找不到,那就去命令行选项(注意根元素属性在命令行选项中是以 -分隔的)那一节找找,肯定有的。

Travis-CI

  • 使用 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下看到

git push

接下来就是把这些文件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(可选)

在觉得自己的项目开发的差不多时,我们就可在在 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哦

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート