18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TeraTermマクロで証跡を取りながらテストをする

Last updated at Posted at 2016-03-23

サーバのバッチプログラムのテストをする必要があるが、整った自動テスト環境はない。
さらに、どのようなコマンドを実行した結果どうなったかという証跡が求められる…という環境にいるとします。
手動でコマンド叩いて、ログディレクトリまでログファイルを見にいって、実行結果をコピーして証跡として保存して…。
でも全て手動だと再実行も面倒。ある程度自動化したいところです。

TeraTermマクロを使う

サーバを操作する際に使われるターミナルソフトは色々ありますが、特によく使われるのがTeraTermだと思います。
TeraTermにはマクロ機能があり、サーバへの接続・ログの記録・コマンドの実行・切断まで一通り行うことができます。
TeraTermのログには、実行した全ての操作が記録されるので、そのまま証跡としても使えます。

サーバへの接続

connect '192.168.0.30:22 /ssh /auth=password /user=srvusr /passwd=srvpass'

connectで接続先・ログインユーザ・パスワードを指定します。telnet接続の場合は/nosshを指定します。

ログの記録

logopen ログファイルパス 0 0

logopenでログの記録を開始します。ログファイルパスはフルパス指定の方がよいです。(ファイル名だけだと既定のディレクトリに出力される)
後ろの数字は、1つ目がバイナリフラグ、2つ目が追記フラグです:

  • バイナリフラグ(0: 改行など特殊文字を出力しない 1: 全て出力)
  • 追記フラグ(0: 既にファイルがあれば上書き 1: 既にファイルがあれば追記)

logcloseでログの記録を終了します。

コマンドの実行

sendln 'cat /home/hoge/result.txt'

sendlnの後ろのシングルクォートで囲んだコマンドが実行されます。
ただ、TeraTermはあくまでコマンドを送っているだけなので、前のコマンドが終了したかどうか関係なく送ります。
コマンドが終わったかどうかは判定できませんが、waitで特定の文字が表示されるまで待つことができるので、プロンプトの記号が表示されたらコマンドが終了したことにする、という方法が使えます。

sendln 'cat /home/hoge/result.txt'
wait '$'

ログの記録と合わせて使う場合は、もう一工夫必要です。コマンドの実行が早すぎると、ログにうまく出力できない場合があります。(コマンドの実行順と結果出力順がおかしくなる、等)
そのため、ログを綺麗にとる場合はmpauseで数秒コマンド送信を遅らせるとよいです。

sendln 'cat /home/hoge/result.txt'
mpause 500
wait '$'

mpauseはミリ秒指定です。秒指定のpauseもあります。

切断

sendln 'exit'
exit

通常通り、ログインシェルを終了すればターミナルも終了します。
マクロ側のexitでマクロを終了します。

変数の使用

hoge = 'value'

TeraTermマクロでは変数を使用できます。
変数は各コマンドの引数に使えるので、mpauseの待ち時間指定を変数にしておくと便利です。
この変数は直接サーバでは使えませんが、シェルの変数として設定すればコマンドの内容も可変にできます。

target_pg = 'testbatch.sh'
sprintf2 cmd_setvar 'TARGET_PG=%s' target_pg
sendln cmd_setvar

sprintf2でフォーマットした文字列を変数に設定します。
ここではTARGET_PG=testbatch.shという文字列をcmd_setvarというマクロ変数に入れ、それをコマンドとして実行しています。

マクロの分割

全てのコマンドを1つのファイルに含めてもいいですが、マクロ変数の定義などは別のファイルとして切り離した方が使いやすいです。
includeで他のマクロファイルを実行できます。

include '.\variables.ttl'

サンプル

ちなみに、先頭が;の行はコメントになります。

variables.ttl
; 変数の設定
ptime = 500

exit
test.ttl
; マクロ変数読み込み
include '.\variables.ttl'

; 接続
connect '192.168.0.30:22 /ssh /auth=password /user=srvusr /passwd=srvpass'
wait '$'

; ログ開始
logopen 'C:\Users\noraplant42\log\test.log' 0 0

; 対象プログラム設定
target_pg = 'testbatch.sh'
sprintf2 cmd_setvar 'TARGET_PG=%s' target_pg
sendln cmd_setvar
mpause ptime
wait '$'

; 対象プログラム実行
sendln '/home/hoge/$TARGET_PG'
mpause ptime
wait '$

; 実行結果確認
sendln 'cat /home/hoge/result.txt'
mpause ptime
wait '$

; ログ終了
logclose

; 切断とマクロ終了
sendln 'exit'
exit

ttpmacro.exeの引数にファイルを指定して実行します。

ttpmacro.exe C:\Users\noraplant42\test.ttl

注意点

私の環境では、マクロを書いたファイルの文字コードをSJISにしないと、マクロ実行時にエラーになってしまいました。
コメント等に日本語を含む場合はSJISで書くといいかもしれません。

参考

公式マニュアル
http://ttssh2.osdn.jp/manual/ja/macro/

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?