CLIの簡易試験にはbatsが便利
どうもレガシーおじさんです
20年前くらいに作られて現在に至るまでその時その時の案件でいきあたりばったりパッチを当て続けたゴミのようなスクリプト群が今でも現役で動き続けているシステムを面倒見たりしています。
当然自動テストなんて概念はない時代の遺物なので当初から受け継がれてきた試験項目をベースに秘伝のタレのように追加仕様の試験を追加しつづけ熟成されたのか腐臭を放っているのかわからないExcel方眼紙製試験項目を何かあるたびに手作業でやり直すという不毛なお仕事です。
流石にこんな事やってられないのでこっそりテストの自動化を始めましたのでその時使ったbatsについて使い方を簡単に残しておきたいと思います。
さてbats自体の使い方ですが色んな方が素敵な記事を残しているのでここで再掲するのも無駄だと思うのでそちらを参考にしてもらうほうが良いかと思います。
では何を書くのかという話になりますが
インストールせずに使う方法を書いていきます
レガシーシステムというのは得てして設計書に書かれていないアプリのインストールを許されていないのです
なのでテスト用のコマンドをインストールするなんてご法度なのです
というわけでインストールせずに使えるようにしていく手順を残します
何も入っていないOSで説明するためDockerをベースに手順を載せていますが
実際にやるときはgit cloneから実行で良いです。
インストールせずに使う方法
gitから最新を取得します
$ docker run -ti --rm ubuntu bash
root@1c025a99008a:/# (apt update && apt install -y git) 2>&1 > /dev/null
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
debconf: delaying package configuration, since apt-utils is not installed
root@1c025a99008a:/# git clone --depth=1 https://github.com/bats-core/bats-core.git
Cloning into 'bats-core'...
remote: Enumerating objects: 222, done.
remote: Counting objects: 100% (222/222), done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 222 (delta 4), reused 159 (delta 3), pack-reused 0
Receiving objects: 100% (222/222), 112.69 KiB | 4.33 MiB/s, done.
Resolving deltas: 100% (4/4), done.
実はこの時点で落としてきたbats-core/bin/batsにPATHが通ってさえいれば動きます。
同梱されているtest用のbatsで動作確認してみましょう
root@1c025a99008a:/# bats-core/test/bats.bats
/usr/bin/env: 'bats': No such file or directory
PATHが通ってないのでエラーです
ではPATHを通して再実行します
root@1c025a99008a:/# export PATH=$PATH:$(pwd)/bats-core/bin/
root@1c025a99008a:/# bats-core/test/bats.bats
〜略〜
83 tests, 0 failures, 1 skipped
はい83個のテストに成功しましたね
skipされたのはMAC用のテストなので気にしないでOKです
実はインストール用のShellを見てもらうとわかるのですが
色々取得されている中で
bats-core/bin
bats-core/lib
bats-core/libexec
の3つが同じディレクトリにあってbatsにPATHが通ってればいいだけなんですねこれ
あとはbats-core/test/bats.batsとか最初に載せたリンクとか見ながら同じようなテストスクリプト書いていけば動くはずです。
まぁシステムの文字コードがSJISとかEUCとかだとnkfとかiconvとかで頑張ってI/Oをイジイジしないとうまいこと行かなかったりもするのですがそこらへんは同じレガシー仲間なら慣れてるでしょうから割愛します。
以上、今日も世間から忌み嫌われているレガシー現場からニッチな情報をお届けしました。
Discussion