CLIの簡易試験にはbatsが便利

2 min read

どうもレガシーおじさんです

20年前くらいに作られて現在に至るまでその時その時の案件でいきあたりばったりパッチを当て続けたゴミのようなスクリプト群が今でも現役で動き続けているシステムを面倒見たりしています。

当然自動テストなんて概念はない時代の遺物なので当初から受け継がれてきた試験項目をベースに秘伝のタレのように追加仕様の試験を追加しつづけ熟成されたのか腐臭を放っているのかわからないExcel方眼紙製試験項目を何かあるたびに手作業でやり直すという不毛なお仕事です。

流石にこんな事やってられないのでこっそりテストの自動化を始めましたのでその時使ったbatsについて使い方を簡単に残しておきたいと思います。

さてbats自体の使い方ですが色んな方が素敵な記事を残しているのでここで再掲するのも無駄だと思うのでそちらを参考にしてもらうほうが良いかと思います。

https://qiita.com/5t111111/items/c4a382c7dd896c353d03

では何を書くのかという話になりますが

インストールせずに使う方法を書いていきます

レガシーシステムというのは得てして設計書に書かれていないアプリのインストールを許されていないのです
なのでテスト用のコマンドをインストールするなんてご法度なのです

というわけでインストールせずに使えるようにしていく手順を残します

何も入っていない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をイジイジしないとうまいこと行かなかったりもするのですがそこらへんは同じレガシー仲間なら慣れてるでしょうから割愛します。

以上、今日も世間から忌み嫌われているレガシー現場からニッチな情報をお届けしました。