例として、Atlassian Bambooとのニューマンおよび継続的統合。 自転車の発明





はじめに



最近の記事で、仲間のactopolusが 、Postmanを使用してAPIプロジェクトの機能テストを実装する方法を学びました。 機能テストを書くことを学び、150ほどのオーダーでそれらを書いたので、私たちはこれらのテストをCIアセンブリに固定する時が来たと判断しました。







一般に、最初にPostmanテストをアセンブリに統合するプロセスは、3つの簡単なステップに分割できます。







  1. Postman用の実稼働用テストコレクションの構築
  2. テストを実行するためのDocker環境イメージの準備
  3. すべてをまとめてエージェントで実行するためのタスクを作成する


ただし、非常に重要なニュアンスを考慮していませんでした。Postmanテストでコードのカバレッジを測定するツールがありませんでした。 テストでコードをどれだけうまくカバーするかについての情報がなければ、私たちは今どこにいて、何を努力する必要があるのか​​を理解することは困難でした。 その結果、計画には別の項目が追加されました。







  1. すべてをまとめてエージェントで実行するためのタスクを作成します。




1.テストのコレクション



それでは、プロセス自体に取り掛かりましょう。 私たちのチームは最初のポイントを英雄的に迅速に処理しました。特に、「ペンテスト」のためにPostmanで作成したテストの品質が非常に高いことが判明したという意味で、本番対応バージョンはdevとそれほど変わらなかったためです。 Actopolus、Postman入門の記事で、Postmanテストを正しく記述する方法とその内容についてすでに説明しています。 コンソールからPostmanを起動する方法は? 答えは簡単です-方法はありません。 しかし、幸いなことに、Postmanとほぼ同じことをすべて実行できる特別なコンソールユーティリティがあり、その名前は... Newmanです。

Newmanのおかげで、CIでPostmanテストの統合を実行できます。



2. Docker



それまでの間、私はdockerイメージを取り上げました。 最初に、最初の打ち上げが行われた高山に基づいて独自のイメージを構築しました。 その後、ドッカーハブの腸内には、同じ高山で組み立てられた、より軽量なニューマンの既製のイメージが既にあることがわかりました。 タスクは、ドッカーハブから既存のイメージをローカルハブにマージするためだけに削減されたように見えましたが、社内で採用されている標準との矛盾により、純粋な形では私たちには合わないことがわかりました。 そのため、画像を収集する必要がありました。 これを行うには、まず、基本的な画像を高山に変更しました。これは、この種のすべての画像で使用されています。 次のステップとして、すべての未使用のコンポーネントを見つけ出し、エントリーポイントを変更して、起動ライン全体を渡さずに、newmanのパラメーターのみをイメージに渡すだけで十分なようにしました。 それがまさに、イメージがあらゆる点で私たちに合った結果であり、最終的にドッカーハブになったのです。



3.コーティング測定用コーチング剤



ハリネズミ産み出して 、c3ライブラリーをコード認識からニューマンテストに固定する試みが失敗した後、私は自転車発明して、ニューマンテストのカバレッジを収集するために自分のライブラリーを作成する方がおそらく早いと判断しました(私は同意します、非常に冒soundsです)。







自転車を発明することにした理由:



  1. 使いやすさ。 コードカバレッジの測定値をアプリケーションのテストに結びつけるために、ウールに対するハリネズミをいくつか産む必要がある場合、実装に何らかの問題がある可能性があります。 ライブラリは最初の行で接続されています。
  2. 1つではなく多くのプロジェクトがあるため、ライブラリ内のすべての機能を考慮することができます。これにより、後で使いやすくなります。
  3. 私たちは図書館のサポートを保証します。 6か月後にはどこにも消えず、いつでも新しいバージョンのphpに転送できます。


「どうして猫を卵で引っ張るのか」と思って、特にこの目的のためのほとんどの作業(おそらくすべて90%)が基本的にphp-code-coverageライブラリに実装されているので、カバレッジを測定するためにポーカーを書き始めることにしましたxDebug あなた自身のやり方でそれを少しシフトするだけです。







したがって、ポーカーは2つのパートで構成されます。 1つ目は、テスト中に起動されたファイルと行に関するレポートの収集と準備を担当し、2つ目は、すべてのレポートをまとめて指定された形式でフォーマットするCLIアプリケーションです。









SebastianBerghmannライブラリでどのように機能しますか?



実際、php-codecoverageは、いくつかのドライバー(phpdbg、xDebug)から選択するためのアドオンです。 一番下の行は簡単です。スクリプトを初期化して、実行された(実行されていない)行に関する情報を収集し、出力はこのデータを含む配列です。 php-codecoverageライブラリは、これらの配列からxml、html、json、およびテキスト形式で性的なレポートを作成するように設計されています。 また、2つの部分に分かれており、1つの部分は情報を収集し、2番目の部分はフォーマットを行います。









私たちの自転車は何をしますか?





このすべての富が機能するためには、テストにマーカーマーカーを追加する必要がありました。



次のようになり始めました。



















「コンパイル済み」レポートを使用すると、どのテストで1行または別のコード行が起動されているかを確認でき、次のようになります。











コードカバレッジのある画面のように見えます

























これは、フォルダコードカバレッジがどのように見えるかです。



レポートは、php-code-coverageパッケージの一部であるユーティリティによって生成されます。

尊敬されている読者が興味を持っている場合は、別の短い記事でこのポーカーの仕組みについてお話します。


それで、パラグラフ3で、私たちも理解しました。 それほど興味深い点は残っていません... 4位



ポイント4、劇的



プロジェクトの通常の機能テストとカバレッジの評価を実装するために、それがどのように機能するかの図を見てみましょう。







1.したがって、最初にコードベースがGITリポジトリからBAMBOOエージェントにマージされ、次にプロジェクトがビルドされます。







この場合、コンポーザーはアセンブルされ、構成ファイルは開発環境で処理されます。 この段階で、テストでヘッダーPHPNEMWMAN_OFFの値をPHPNEWMAN_ONに置き換えます(これは、ビルドプランがカバレッジを測定するように設計されているためですが、カバレッジを測定するためにプロジェクトをビルドすることを目的とするビルドプランでこれを行うべきではありません組立プロセスが大幅に遅くなります)。







 sed -i -e "s/Phpnewman-Off/Phpnewman-On/" ./code/newman/collection.json
      
      





2.次のステップで、アセンブルされたプロジェクトが成果物のリポジトリに注がれます。 これは、個々のタスクごとに毎回収集しないようにするために行われます。







3.組み立てられたプロジェクトが成果物に安全にマージされた後、次のタスクもそこから安全にマージし、テストバックエンドにアップロードします。







4.次のタスクも、アーティファクトからプロジェクトをマージし、それにnewmanテストを実行します。 これらのテストは、ローカルホストの竹のエージェントではなく、前のステップでプロジェクトを投入したテストのバックエンドに送信されることに注意してください。 テストはdockerコンテナで実行されます。







Dockerコンテナでのテストの実行は非常に簡単です。



 docker pull docker-hub-utils.kolesa:5000/build/nodejs/newman:latest #    docker run \ #  --rm \ #     --volume $(pwd):/code \ #     /code   --volume /etc/passwd:/etc/passwd:ro \ # passwd --volume /etc/group:/etc/group:ro \# group --user $(id -u):$(id -g) \ #   ,       --interactive \ #  -  docker-hub-utils.kolesa-team.org:5000/build/nodejs/newman:latest \ run collection.json --folder Tests -r junit,html --reporter-junit-export _out/newman-report.xml --reporter-html-export _out/newman-report.html -e _envs/qa.json -x
      
      





newmanの起動ラインを個別に調べてみましょう。



 run collection.json #    collection.json --folder Tests #  json-(collection.json)    -r junit,html #   ( !)    2  --reporter-junit-export _out/newman-report.xml # ,    --reporter-html-export _out/newman-report.html # ,    -e _envs/qa.json # json    -x # exit-code     
      
      





これらの操作の後、テストバックエンドでCOVレポートのコレクションが生成されます。これは、バックエンドへのリクエストの数と数値的に一致します。



残っているのは、これらすべてのcovレポートを1つの大きな大胆なレポートに収集することです。

理解を容易にするために、以下のスクリプトで「SCP」を使用します。



したがって、レポートのコレクションは次のとおりです。



 BRANCH_NAME=$(echo "${bamboo.currentBranch}" | sed 's|/|-|g' | sed 's@\(.*\)@\L\1@') #        echo "BRANCH NAME IS $BRANCH_NAME" #     ssh www-data@testing.backend.dev "php /srv/www/$BRANCH_NAME/vendor/wallend/newman-php-coverager/phpnewman --collect-reports merge /srv/www/$BRANCH_NAME/phpnewman --clover /srv/www/$BRANCH_NAME/newman/_output/clover.xml --html /srv/www/$BRANCH_NAME/newman/_output/html" #      scp www-data@testing.backend.dev:/srv/www/$BRANCH_NAME/newman/_output/clover.xml ./clover.xml scp -r www-data@testing.backend.dev:/srv/www/$BRANCH_NAME/newman/_output/html ./ #      ssh www-data@testing.backend.dev "rm -r /srv/www/$BRANCH_NAME/newman/_output/html && rm /srv/www/$BRANCH_NAME/phpnewman/* && rm /srv/www/$BRANCH_NAME/newman/_output/clover.xml" #    
      
      





レポートをアセンブリで使用できるようにするには、これらのレポートと成果物を共有する必要があります。







さらに、これらのアーティファクトを使用して、アセンブリ内のコードカバレッジの自動解析と視覚化を行うことができます。 これを行うには、チェックボックスをオンにして、XMLカバレッジレポートでファイルを指定します。







出力では、まさにそのような美しさが得られます(この場合、UNITテストのレポートに対して同様の操作が行われました)。

重要!



このプロジェクトでは、カバレッジ測定なしの2つのビルドプランテストと、カバレッジ測定を有効にしたテストに分けました。 カバレッジは、マスターブランチに対してのみ測定されます。 スケジュールに従って毎日カバレッジを測定したビルドプランが開始されます。 これはすべて、コーティングを使用したテストに非常に時間がかかるためです!

おわりに



完了した作業を要約すると、いくつかの事実のみに注目したいと思います。







最初の事実。 新しいツールを継続的インテグレーションに追加するのは難しいことではありません。 それは欲望でしょう。







第二の事実。 ツールに含まれているものがすぐに使用できる場合、それを自分で完成させることが困難で退屈な作業であることが証明されることはまったく必要ありません。 時々、見れば、数十行のコードですべてが決定されます。 ツールがすべて機能するときに、このツールを使用することで得られる大きな利益をここに追加します。 まあ、すべてに加えて、これはあなたのスキルを高めるもう一つの理由です。







3番目の事実。 ニューマンがすべての病気の万能薬であり、機能テストツールとして最高だと主張する人はいません。 しかし、私たちは試してみました-特にCIにボルトで固定された後、それが気に入りました!







そして、もちろん、 私たちの図書館があなたに利益をもたらすならば、私たちは幸せになります。 そして、あなたがそれを改良する必要があるなら-貢献してください。








All Articles