jenkinsを使って自動テストをまわせるようにしたので、もう少し色々やってみます
今回もperlのプロジェクトでの話
テスト結果の集計
- テスト結果の推移を表示する
TAP::Formatter::JUnit
を用いてJUnit互換のテストスイートを作成
prove -Ilib -It/lib -lvr $WORKSPACE/t --formatter TAP::Formatter::JUnit > test_results.xml
- ビルド後の処理の追加
「JUnitテスト結果の集計」を追加する
テスト結果XMLにシェルスクリプトで出力したファイルを指定する(test_results.xml)
テスト結果が表示されるようになったが、日本語がうまく表示してくれない。。。
TAP::Formatter::JUnitで、subtestに設定した日本語が16進数コードになる現象についての対応
なので、↑の記事から拝借してつなげた
prove -Ilib -It/lib -lvr $WORKSPACE/t --formatter TAP::Formatter::JUnit | perl -i -ple 's/\[\\x([a-f0-9]{2})\]/pack("H*", $1)/egx' > test_result.xml
プロジェクトトップに遷移のグラフが出力される
これで成功テストと失敗テストの推移をグラフ化できる
どのくらいテストケースが実行されているかの推移がわかる
地味にやる気出そうですね
カバレッジレポートの表示
下記参考に Devel::Coverのの出力をCloverで扱えるように変換する
perlではDevel::Coverでコードのカバレッジを取得することが出来る
jenkinsではコードカバレッジを Clover というものと連携して表示させるようにしている
なので、Cloverで使えるようなフォーマット変換が出来ればOK
使うプラグイン
プラグインをインストールして「ビルド手順の追加」で設定
カバレッジの閾値とcoverコマンドで出力されるclover.xmlを指定する
するとこんな感じでレポートが表示される
- Coverageレポートの表示
「ビルド後の処理の追加」からPublisher Pluginの設定を行う
cover -report html
で出力したレポートの場所を指定する
- cover_db
- coverage.html
- cover_db
という風に設定
下図のようにリンクが追加される
押下すると画像のようにカバレッジレポートが出力されるようになった
クローバーのアイコンとプロジェクトトップの画像をクリックして遷移するはずの画面はNotFound...一旦無視
ここまででのシェルスクリプトの内容
cover -delete cd $WORKSPACE HARNESS_PERL_SWITCHES="-MDevel::Cover=+ignore,.*,+ignore,inc,+ignore,local,+select,^lib/App,-silent,1" \ prove --formatter TAP::Formatter::JUnit \ -Ilib -It/lib -lvr $WORKSPACE/t \ | perl -i -ple 's/\[\\x([a-f0-9]{2})\]/pack("H*", $1)/egx' > test_results.xml cover -report clover cover -report html
前後にcoverのコマンドを入れたのとHARNESS_PERL_SWITCHES
の環境変数を追加しました
静的コード解析
measureperl-checkstyleを使ってコードメトリクスを表示するようにする
関数の複雑度、関数の行数共に閾値で与えた数値を超えたものを出力してくれる
- Perl::Metrics::Liteをインストール
cpanm Perl::Metrics::Lite
普通に実行してみる
measureperl-checkstyle --max_sub_lines 60 --max_sub_mccabe_complexity 20 --directory lib
xmlが出力されるのでこれをファイルに出力させてpluginで扱うようにする
これを設定に含める
Checkstyle Plug-inを入れて解析結果をレポーティングできるようにする
ビルドを実行すると新たに「Checkstyle警告」というものとグラフが出てくるようになる
追ってくとソースコードのどこが複雑で長い関数があるなどの情報がわかる
上記サイトを参考にして閾値を設定してみた
見たところ黒歴史が沢山あった.....
徐々に改修して行けたらいいな...という感じ
最終的に下記のようなシェルスクリプトになった
source ~/perl5/perlbrew/etc/bashrc cover -delete HARNESS_PERL_SWITCHES="-MDevel::Cover=+ignore,.*,+ignore,inc,+ignore,local,+select,^lib,-silent,1" \ prove --formatter TAP::Formatter::JUnit \ -Ilib -It/lib -lvr $WORKSPACE/t \ | perl -i -ple 's/\[\\x([a-f0-9]{2})\]/pack("H*", $1)/egx' > test_results.xml cover -report clover cover -report html measureperl-checkstyle --max_sub_lines 60 --max_sub_mccabe_complexity 20 --directory lib > checkstyle-result.xml
今後のリファクタリングなり改善の指標にできたら良いなと思うところです