歴史
期待する
Expectは、Don Libesが作成したTCLスクリプト言語の拡張機能です。このプログラムは、テキスト端末インターフェースを公開するプログラムとの対話を自動化します。当初、1990年にUnixプラットフォーム用に作成されたExpectは、Microsoft Windowsおよびその他のシステムで利用可能になりました。
基礎
Expectは、Telnet、FTP、passwd、fsck、rlogin、tip、SSHなどの対話型アプリケーションの制御を自動化するために使用されます。 Expectは、擬似端末(Unix)を使用するか、コンソール(Windows)をエミュレートし、ターゲットプログラムを起動してから、ターミナルインターフェイスまたはコンソールインターフェイスを介して人間と同じように通信します。別のTcl拡張機能であるTkを使用してGUIを提供できます。
使用法
Expectは、既存のユーティリティをリンクする「接着剤」として機能します。一般的な考え方は、Expect内の問題を解決する方法を理解するのではなく、Expectがシステムの既存のツールを使用する方法を理解することです。
Expectの主な使用法には、商用ソフトウェア製品が含まれます。これらの製品の多くは、ある種のコマンドラインインターフェイスを提供しますが、通常、スクリプトを記述するために必要な能力がありません。製品を管理するユーザーにサービスを提供するために構築されましたが、多くの場合、企業は堅牢なスクリプト言語を完全に実装するためのリソースを消費しません。 Expectスクリプトは、シェルを生成し、環境変数を検索し、いくつかのUnixコマンドを実行してより多くの情報を取得し、ユーザーの目標を達成するために必要な情報を備えた製品のコマンドラインインターフェイスに入ります。コマンドラインインターフェイスを介して製品と対話することで情報を取得した後、スクリプトは、実行するアクション(存在する場合)についてインテリジェントな決定を下すことができます。
Expect操作が完了するたびに、結果は$ expect_outというローカル変数に保存されます。これにより、スクリプトは情報を収集してユーザーにフィードバックし、状況に応じて次に送信するものの条件付き動作も可能にします。
Expectの一般的な用途は、プログラム、ユーティリティ、組み込みシステムのいずれであっても、テストスイートをセットアップすることです。 DejaGnuは、テストで使用するためにExpectを使用して記述されたテストスイートです。 GCCのテストに広く使用されており、組み込み開発などのリモートターゲットのテストに非常に適しています。
「autoexpect」と呼ばれるツールを使用して、expectスクリプトの生成を自動化できます。このツールは、アクションを監視し、ヒューリスティックを使用して期待されるスクリプトを生成します。生成されたコードは大きくてやや不可解な場合がありますが、生成されたスクリプトを微調整して正確なコードを取得できます。
別の例は、FTPを自動化するスクリプトです。
以下は、SFTPを(パスワードを使用して)自動化する例です。
さまざまなプロジェクトが、C#、Java、Scala、Groovy、Perl、Python、Ruby、Shell、Goなどの他の言語でExpectのような機能を実装しています。これらは通常、元のExpectの正確なクローンではありませんが、概念は非常に似ている傾向があります。
C#
- Expect.NET — C#(.NET)のExpect機能
- DotNetExpect — .NET用のExpectにヒントを得たコンソール自動化ライブラリ
Java
- ExpectIt — Expectツールの純粋なJava 1.6+実装。シンプルで使いやすく、拡張できるように設計されています。
- expect4j —元のExpectのJavaクローンでの試み
- ExpectJ — Unix expectユーティリティのJava実装
- Expect-for-Java — Expectツールの純粋なJava実装
- expect4java-ExpectツールのJava実装ですが、ネストされた構造をサポートします。 Groovy言語DSLのラッパーもあります。
スカラ
- scala-expect — Expectツールの非常に小さなサブセットのScala実装。
グルーヴィー
- expect4groovy-ExpectツールのGroovy DSL実装。
Perl
- Expect.pm — Perlモジュール(metacpan.orgの最新バージョン)
Python
- Pexpect —擬似端末で対話型プログラムを制御するためのPythonモジュール
- winpexpect — Windowsプラットフォームへのpexpectのポート
ルビー
- RExpect —標準ライブラリのexpect.rbモジュールの代替品。
- Expect4r — Cisco IOS、IOS-XR、およびJuniper JUNOS CLIと対話する
シェル
- 空— UNIXシェルスクリプトで対話型コマンドを実行するExpect-likeユーティリティ
- sexpect —シェルに期待。クライアント/サーバーモデルに実装されており、アタッチ/デタッチ(GNU画面など)もサポートしています。
行く
- GoExpect-Go言語用のExpect-likeパッケージ
- go-expect-端末ベースまたはコンソールベースのプログラムの制御を自動化するための期待のようなgolangライブラリ。
さび
- rexpect-Rust言語用のpexpectのようなパッケージ。
アーラン
- lux-Expectスタイルの実行コマンドを使用したテスト自動化フレームワーク。