実行可能なテストスクリプト群のディレクトリ構成を定義して、整理するためのフレームワークを作りました。半年ほど前に作ってたやつです。*1塩漬け期間を経たのでリリースとします。
- GitHub - fjkz/ttap: ttap: a testing framework with file system hierarchy
- 日本語 README: ttap/README.md at master · fjkz/ttap · GitHub
システムテストを自動化するときに使用することを想定しています。ユニットテストに関しては、便利なフレームワークが既に多くあるので、それらを使えばそれなりに整理された状態を保つことができます。しかし、システムテストに関しては、システム固有の処理があるので、フレームワーク化するのは難しいと思っています。シェルスクリプトなどを駆使して自動化テストを手組せざるを得ない。
しかしながら、スクリプト群は増え続けて混乱しがちなので、それらを整理できたらいいのにと思いました。そこで、スクリプト群のディレクトリ構成を定義するツールがあれば便利と思い、作成しました。ttap という名前です。
$ ttap --tree ./sample sample ├── test-before-after │ ├── before1.sh │ ├── before2.sh │ ├── test1.sh │ ├── test2.sh │ ├── after2.sh │ └── after1.sh ├── test-init-final │ ├── init1.sh │ ├── init2.sh │ ├── test1.sh │ ├── test2.sh │ ├── final2.sh │ └── final1.sh └── test-simple ├── test_not_ok.sh └── test_ok.sh
ttap はディレクトリ構成から、スクリプトの実行順序を計画し、実行します。
$ ttap --format tap ./sample ok 1 test-before-after/before1.sh.1 ok 2 test-before-after/before2.sh.1 ok 3 test-before-after/test1.sh ok 4 test-before-after/after2.sh.1 ok 5 test-before-after/after1.sh.1 ok 6 test-before-after/before1.sh.2 ok 7 test-before-after/before2.sh.2 ok 8 test-before-after/test2.sh ok 9 test-before-after/after2.sh.2 ok 10 test-before-after/after1.sh.2 ok 11 test-init-final/init1.sh ok 12 test-init-final/init2.sh ok 13 test-init-final/test1.sh ok 14 test-init-final/test2.sh ok 15 test-init-final/final2.sh ok 16 test-init-final/final1.sh not ok 17 test-simple/test_not_ok.sh ok 18 test-simple/test_ok.sh 1..18
スクリプト群が木構造に整理されることを強制するので、柔軟性は欠けるがその分、散らかりにくくなるだろうという寸法です。それぞれのスクリプトは、シェルスクリプトベタ書きでもいいですし、既存のフレームワークを使ってもいいです。既存のテスティングフレームワークよりも、もう少しメタなところを上手くすることを狙ったものです。
- 前処理・後処理を共通化したり、
- 各スクリプトの出力を保存したり、
- Test Anything Protocolを吐くフレームワークと連携したり、
- テストの独立性を高めるために実行順序をランダムにしたり
といった機能があります。
今回作った実装がいいかは分からないですが、コンセプトのアイデアはそんなに悪くないのではないかと思っています。よろしければ試してみてください。