RDP接続
Remote Desktop Protocol (RDP)は、Microsoftが開発した独自のプロトコルです。RDPサーバーはWindowsオペレーティングシステムに組み込まれています。この技術はMS WindowsではTerminal Servicesとしても知られており、サーバーはTerminal Serverとも呼ばれます。UnixおよびOS X向けのRDPサーバー実装も存在します。RDPプロトコルを介したテストは、T-Plan Robot Enterprise v4.3で導入されました:
-
Robotを実行するホストはMS Windows Vista以降である必要があります。将来のリリースではOS Xのサポートも提供される予定です。
-
サーバー(テスト対象システム、SUT)は、RDPサーバーを実行している任意のOSで構いません
RDPライブラリの最新バージョンを含むRobot 6.1の使用をお勧めします。
Windows上のRDP
MS WindowsはRDP接続を以下のようにサポートしています:
-
Windows ProfessionalおよびUltimateエディションは、標準でRDPをサポートしています。サーバーはデフォルトで無効になっており、有効化する必要があります。Network Level Authenticationセキュリティ(NLA)は、Robot 4.4.4以降でサポートされています。古いバージョンや接続エラーが発生する場合は、これを無効にする必要があります。
-
Windows Homeエディションは、公式にはRDPをサポートしていません。機能自体は含まれていますが、隠されています。RDPWrapのようなサードパーティ製ツールを使用して有効化できる場合があります。
-
Windows Serverシステムでは、メディアコーデックをインストールしておく必要があります。インストールされていないと、接続時にRobotがクラッシュします。これを解決するには、Desktop Experience機能をインストールする必要があります。Windows Server 2012 R2の手順:
-
-
Start -> Administrative Tools -> Server Managerに移動します。
-
Dashboard画面でAdd roles and featuresをクリックします。これによりAdd Roles and Features Wizardが起動します。
-
Desktop Experience機能(User Interfaces and Infrastructureカテゴリ、Features画面内)を選択します。
-
Installをクリックします。完了したらサーバーを再起動してください。
-
他のシステムでのRDP
他のシステムでは、RDPサーバーをインストールして起動する必要があります。既知の実装:
非Windows実装向けにRDP接続をサポートするサードパーティ製ソリューションがいくつかあります。非Windows環境では、RobotがサポートするRDP機能がWindowsベースのシステムと異なる場合があります。
例えば、Oracle VirtualBoxは、その仮想マシン(VM)へのRDP接続をサポートしています。RobotはそのようなVMに接続して自動化できますが、クリップボード転送とドライブリダイレクトのサポートは限定的です。また、VM内で実行されている一部のシステムでは正しい画面サイズが設定されないため、Robot側の接続パラメータを通じて正しい画面サイズを強制する必要がある場合があります。
RDP機能
Robot 4.4.4では、ローカルシステムとリモートシステム間のクリップボード転送のサポートが導入されました。これは、ローカルとリモートのクリップボードの同期に基づいています。単一のRobotマシンで複数のRDP接続を計画している場合、競合する2つのスクリプトからの並行クリップボード更新を避けるために、何らかのロックを実装する必要があります。
-
クリップボードの同期はデフォルトで有効になっており、アクティブ化する必要はありません。クリップボード経由のファイル転送はまだサポートされていません。
-
スクリプトでクリップボードの内容を取得するには、_SERVER_CLIPBOARD_CONTENT変数を取得します:
// クリップの内容をテキストとしてCLIP変数に保存します
Var CLIP="{_SERVER_CLIPBOARD_CONTENT}"
-
クリップボードの内容を設定するには、_SERVER_CLIPBOARD_CONTENT変数に値を設定します:
// クリップボードの内容を"Hello world"に設定します
Var _SERVER_CLIPBOARD_CONTENT="Hello world!"
-
リモートデスクトップとの間でオブジェクトをコピー/ペーストするには、Pressコマンドを使用してCtrl+C/Ctrl+Vキーを押すか、その他のシステム/アプリケーションの手段(コンテキストメニュー/編集メニューなど)を使用します。すべてのクリップボードオブジェクトはテキストとしてスクリプトに公開されます。
Robot 4.4.4は、接続パラメータを変更したり追加機能を有効にしたりできるFreeRDP CLI optionsの一部も受け付けます。例:
-
断続的なネットワークの問題により接続がクラッシュした場合に自動的に再接続するには、+auto-reconnectオプションを使用します。
-
ローカルディレクトリをリモートマシンにマップ(リダイレクト)するには、/drive:<sharename>,<path>オプションを使用します。これは、ローカルシステムとリモートシステム間でファイル転送を有効にするのに便利です。例えば、以下のオプションは、リモートシステムがローカルディレクトリ"C:\MyData"を"Z"ドライブとして認識するようにします:
/drive:Z,C:\MyData
ドライブリダイレクトはリモートシステムのサポートに依存するため、すべての環境で動作するとは限りません。最大限の権限を持つファイルパスを使用することをお勧めします。
CLI optionsは以下のように定義できます:
-
RDP Server画面のユーザー設定(Edit→Preferencesウィンドウ内)を通じて設定します。これらのオプションはすべての接続に適用されます。
-
テストスクリプトは、RDP接続を確立する前に_RDP_OPTIONS変数に値を設定できます。この変数の内容は、競合を解消する処理なしに、設定で指定されたオプションに追加されます。例えば、以下のコードはリダイレクトされたドライブをRDP接続に適用します:
Var _RDP_OPTIONS="/drive:Z,C:\MyData"
Connect rdp://myserver
接続
テストスクリプトからRDPに接続するには、Connectコマンド(TPRスクリプト)またはconnect()メソッド(Javaテストスクリプト)を使用します。引数のURLは"rdp://<host_or_IP>"の形式でなければなりません。例えば、以下のコマンド/メソッド呼び出しは、Local Desktop接続を使用してローカルデスクトップに接続します:
TPRテストスクリプト: Connect rdp://<address>?user=<user>&password=<passwd>
Javaテストスクリプト: connect("rdp://<address>?user=<user>&password=<passwd>");
このURLは、Robotの起動時に接続を確立するために、c/-connect CLIオプションと合わせて使用することもできます。
重要: RDPシステムは米国英語のキーボードレイアウトを使用する必要があります。他のレイアウトは現在サポートされておらず、TypeおよびPressコマンドを使用するテストスクリプトは誤った文字を入力します。この制限は将来のRobotリリースで対応される予定です。
トラブルシューティング
RDPウィンドウの最小化
リモートデスクトップ("RDP")を使用すると、別のマシンに接続してそのリモートコンピュータ上でRobotをネイティブに実行できます。ただし、リモートデスクトップウィンドウ(リモートコンピュータのデスクトップを表示するウィンドウ)を最小化すると、WindowsはリモートセッションをGUIなしモードに切り替え、その結果、入力コントロールを受け付けなくなります。この場合、RobotはリモートシステムのGUIが存在しないため操作できなくなり、自動化されたGUIテストはPauseします。
この問題を回避するには、ローカルコンピュータ(リモートデスクトップを起動する側のコンピュータ)で、リモートデスクトップが最小化時にリモートセッションのGUIを扱う方法に影響するレジストリ設定を変更します。
ローカルコンピュータのレジストリ設定を以下のように変更します:
-
ローカルコンピュータで、開いているすべてのリモートデスクトップセッションを閉じます
-
レジストリエディタ(regedit.exe)を起動します。
-
現在のユーザーのみ、またはコンピュータ上のすべてのユーザーに対してリモートデスクトップの設定を変更するかに応じて、以下のいずれかのレジストリキーに移動します:
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client
-
DWORD値をRemoteDesktop_SuppressWhenMinimizedという名前で作成し、その値を"2"に設定します:
-
レジストリエディタを閉じます。
これで、コンピュータ上でリモートデスクトップ接続ウィンドウを最小化しても、リモートコンピュータのGUIには影響せず、自動化されたテストはそのリモートマシン上で引き続き実行されるはずです。