前回はPesterでPowerShellのテストを記述・実行する方法を紹介しました。単純にテストするだけではなく、テスト結果やカバレッジレポートを納品することもあると思います。テスト結果は簡単に出力できるのですが、カバレッジレポートについてはなかなか情報が見つからなかったのでまとめて記載します。
※テスト結果とカバレッジを1レポートにすることは無理そうです。なので本記事は2レポート作成する前提で記載します。(テスト結果には通ってない命令の行数は出るけど、それがどの命令かはわからない。カバレッジでは通ってない命令はわかるけど、どの条件で失敗したかわからない)
レポート例
テスト結果とカバレッジレポート例はこんな感じです。


テスト結果のレポートのダッシュボード(画像右側)は結構UIがオシャレで、マウスを乗せると実行時間やら失敗の数やらを教えてくれます。(Timelineの黒地部分)。また、左側のテスト結果一覧で失敗したテストケースをクリックすると期待値と実際の値、Assertが上がった命令の行まで教えてくれます。
カバレッジレポートはオシャレではないですが、全体のカバレッジレポートからファイルを選択するとそのファイルでどの命令が通ってないか詳細を見れるので、レポートとしては十分ではないでしょうか。
レポート用XML作成オプション
上記レポートはPester単独ではおそらく作成できません。Pesterではテスト結果をxml形式で出力できるので、予めテスト時にxmlを出力しておき、xmlからHTMLレポートを生成します。テスト結果はPester 3系でも作成できますが、Jacoco形式のカバレッジレポートは4系が必要です。
テスト結果用XML作成
テスト結果用オプションは-OutputFormat と -OutputFile です。 OutputFormat は NUnitXML と LegacyNUnitXML が選べます。特に事情がなければ NUnitXML で良いと思います。 OutputFile は出力先です。ディレクトリがない場合はエラーになるので事前に作成が必要です。作成例は下記
Invoke-Pester -OutputFormat NUnitXML -OutputFile .\xmls\testResults.xml
カバレッジレポート用XML作成
カバレッジ用オプションは -CodeCoverage と -CodeCoverageOutputFileFormat と -CodeCoverageOutputFile です。 CodeCoverage はカバレッジを計測する対称ファイルを指定します。正規表現OKですが、**はサポートしてないので、ディレクトリ構成が階層的になってる場合はこのissueを参考にしてください。 CodeCoverageOutputFileFormat は Jacoco しか今のところ選択しが無いみたいです。 CodeCoverageOutputFile は出力先で、ディレクトリは事前作成が必要です。作成例は下記。
$test_files = Get-ChildItem ..\script*\* -File -Recurse -Include *.ps1
Invoke-Pester -CodeCoverage $test_files -CodeCoverageOutputFileFormat Jacoco -CodeCoverageOutputFile .\xmls\coverageResults.xml
レポート作成ツールのインストール
xmlからHTMLレポートを生成するツールが必要となります。いずれもgithubからzipを落として展開するだけで使えます。※レポート作成ツールは出力先ディレクトリが存在しない場合作成してくれます。
テスト結果用レポート作成ツール
extentreports-dotnet-cli をダウンロードして展開、Pathを通すだけでOKです。
※展開してdist/下にextent.exeがあります。
例えばテスト結果がxmlsディレクトリに存在して、reports/testReport ディレクトリに出力したい場合は下記コマンドで作成可能です。
extent -i .\xmls\testResults.xml -o reports\testReport
Jacoco形式のカバレッジレポート作成ツール
ReportGenerator を使用します。色々種類があるので環境に合わせてインストールしてください。私はWindows10ローカルマシンで使用するので、Packageの一番上のReportGenerator (同じ名前で紛らわしいですが、リンク先変えてます)の右側 Download Package からダウンロードして展開、Pathを通しました。
※拡張子がnupkgですが、拡張子をzipに変換して通常の解凍ソフトで解凍可能です。展開してtools/net47/下にReportGenerator.exeがあります。
先ほどと同じ例の場合は下記コマンドでレポートが作成可能です。
ReportGenerator -reports:.\xmls\coverageResults.xml -targetdir:.\reports\coverageReport "-sourcedirs:..\script0\;..\script1\"