はじめに
テスト仕様書は大体Excelのことが多く、バージョン管理と相性悪いので可能ならテキストベースで管理したい。
そんな悩みは皆さん共通なようで多くの先人たちがMarkdownからExcelに変換するツールを作ってくれています。
私は当時 eval-spec-maker
しか知らなかったので、
プロジェクトでそれを採用しバージョン管理と相性よくて最高!とか思っていました。
ただ、ほかも同様なのですがMarkdownごとに個別のExcelファイルを作ってくれるものの、
最終的なテスト仕様書ってやっぱり1ブックにまとめる羽目になるわけでここが手動なのが最近面倒だなと思うようになりました。
(バージョン管理できるようになっただけでも大変ありがたいのに、欲目が出てきました。)
最初は、出したExcelをまとめるPowerShellでも作ろうかなとも思ったんですが、
結構仕事で使いはじめてきたのでExcel変換部分も自分でプログラム管理しておきたいなということで自分で作ってみました。
やりたいこと
表紙、変更履歴、とテストケースのテンプレートシートが用意されたExcelのテンプレートファイルを用意して、
テストケースのテンプレートをMarkdownファイル分量産して埋め込んでくれる。
また、最終的にはCIで使えるようにDockerで起動できるようにしたい。
言語選定
みんなPythonでやっているし、Pythonでいいか!とか思って始めていると、
私が使っているテスト仕様書がオブジェクトや条件付き書式を設定しており、
openpyxl
などで破壊されてしまうことがわかりました。
自分の検索力で調べた結果としては自分がやりたいことはJavaのApache POIじゃないとダメそうでした。
今更Java言語で開発する気はないのでKotlinに決めました。
ライブラリ選定
とはいえApache POI生で使うのはしんどいなーとか。
Markdown Parserないのかなぁとかいろいろ調べた結果以下のライブラリを見つけたので、
こいつで何とか作ろうという結果になりました。
ライブラリ | 用途 |
---|---|
flexmark-java | MarkdownのParser |
JXls | Apache POIベースの Excelテンプレートライブラリ |
できたもの
テストケースのテンプレートをMarkdownファイル分量産して
ここの部分はあきらめました。
先にMarkdownファイルの分だけ、埋め込み先のシートを用意しておく必要があります。
とはいえ最初の一回だけなのでそこまで負荷にならないかな?と思っています。
Markdown
以下のようなMarkdownを用意
$ cat ./example/mdSpec.md | head -n 17
# テストケース名
## 大項目1
### 中項目1
#### 小項目1
1. 1-1-1 確認手順1
1. 1-1-1 確認手順2
* [ ] 1-1-1 想定動作1
* [ ] 1-1-1 想定動作2
- 1-1-1 備考1
- 1-1-1 備考2
$
テスト仕様書テンプレートファイル
:
jx:each
で指定するitems
は{Markdownファイル名}.cases
になります
実行
docker run -it --rm \
-v $(pwd):/workspaces kazuki0529/md-test-spec2excel \
/workspaces/example /workspaces/template/template.xlsx /workspaces/dist/out.xlsx
できたExcel
こんな感じでそれっぽく出力されました。
上のほうにあるヘッダー(作成日とか作成者)がオブジェクト(カメラ)なのですが消えていませんし、
条件付き書式も無事生き残っています。
リポジトリ
最後に
セルの高さを自動調整はできないみたいなのでそこはPowerShellとか使うか、
確認手順や確認項目の行数に応じて行幅をN倍にするとかですかね。
とはいえ一旦実用レベルにはなったような気がしたので公開してみました。
README.md
が全然整備できてないのでそこも修正したいと思います。