ファイルとフォルダのやりとり
あなたのSenseTalkスクリプトは、様々な方法でファイルやファイルシステムオブジェクトとやりとりすることができます。たとえば、ローカルマシンのファイルから保存されたデータを読み取り、そのデータを使用して追加のアクションを実行することができます。ほとんどの場合、下記のAccessing a File as a Containerで説明されている最初の方法を使用してファイルを読み書きすることをお勧めします。
SenseTalkのファイルやファイルシステムオブジェクトを操作するコマンドや関数は、テスト対象のシステム(SUT)ではなく、ローカルマシン上で動作します。
ファイルやファイルシステムの情報にアクセスしたい場合は、File and Folder Referencesを参照してください。
ベストプラクティスとして、SenseTalkスクリプト内で参照される任意のファイルは、スイートウィンドウのリソースペインを通じてEggplant Functionalに追加する必要があります。この方法では、ファイルが指定されたスイートのスイートディレクトリ内のリソースディレクトリに保存されます。SenseTalkはローカルファイルシステム上の他の場所に保存されたファイルにアクセスすることもできますが、リソースディレクトリを使用すると追加の機能が提供されます。詳細はResources Paneを参照してください。
コンテナとしてのファイルへのアクセス
ファイルの内容を操作する最も簡単な方法は、SenseTalkコンテナとして直接ファイルにアクセスすることです。このアプローチを使用すると、単一のコマンドでファイル全体を読むことができます:
put file "/etc/passwd" into passwordInfo
同様に簡単にファイルを書き込むこともできます:
put "0,0,0,0" into file "/tmp/testing/counters"
上記のコマンドは、ディレクトリ/tmp/testing
内にcounters
という名前のファイルを作成し、その中に値0,0,0,0
を書き込みます。/tmp/testing
ディレクトリが存在しない場合、それも作成されます。既に/tmp/testing/counters
というファイルが存在する場合、その前の内容は新しい値で完全に置き換えられるので、この方法を使用するときは注意が必要です。
ファイル内のテキストの任意の部分にアクセスするために、チャンク式を使用することもできます:
add 1 to item 2 of line 1 of file "/tmp/testing/counters"
このコマンドは、ファイルの現在の内容を読み取り、最初の行の2番目のアイテムに1を追加し、変更された値をファイルに戻します。
以下の例は、この方法を使用してファイル全体を一行ずつ読む方法を示しています:
put file "/Users/bob/Desktop/TestRead"intoMyFileVar
put line repeatindex() of MyFileVar into output
log output
end repeat
この例では、各行を読み取った後にログを出力するだけですが、代わりにコンテンツを操作するための追加のコードを追加することもできます。ここでは、その内容がoutput
という変数に格納されます。
コマンドが何らかの理由でファイルに書き込みに失敗した場合(例えば、ファイルに書き込む権限が不足している場合)、the result
はエラーメッセージに設定されます。ファイルが存在しないかアクセスできない場合に、ファイルをコンテナとして読み込むときにthe result
の値もエラーメッセージに設定されます。この場合、ファイル式の値は空として扱われます。
put file "/nonExistent/File" into contents
put the result --> File not found: /nonExistent/File
put contents is empty --> True
コマンドが何らかの理由でファイルに書き込みに失敗した場合(例えば、ファイルに書き込む権限が不足している場合)、the result
はエラーメッセージに設定されます。
ファイルをコンテナとして扱うことは簡単で、多くの状況でうまく機能します。しかし、スクリプトがファイルで大量の読み書きを必要とする場合、それは最も効率的なアプローチではないかもしれません。このような場合、ファイル操作のコマンドと関数で説明されているコマンドを使用することを好むかもしれません。