2017-09-01 5 views
1

RemoteSwingLibraryで基本的なロボットフレームテストを実行しようとしていますが、動作させることができません。ロボットのフレームワークスタンドアロンジャーを経てEclipse内からRemoteSwingLibraryTimeoutError:タイムアウトまでにエージェントポートが受信されない

*** Settings *** 
Library SwingLibrary 

*** Test Cases *** 
Foobar Test 
    Start Application fully.qualified.name.of.my.class 

私はそれを実行しています:

私はSwingLibraryとうまく次のテストを実行することができました。私はrobotframework-3.0.2.jarとswinglibrary-1.9.7.jarを自分のクラスパスに置き、メインクラスがorg.robotframework.RobotFrameworkである私のプロジェクトのデフォルトクラスパスを使って新しい実行コンフィギュレーションを作成しました。引数には、テストファイルの名前を指定します。

だから、うまくいくようです。それから私はRemoteSwingLibraryとほぼ正確に同じことを実行しようとしました:

*** Settings *** 
Library RemoteSwingLibrary 

*** Test Cases *** 
Foobar Test 
    Start Application my_app java fully.qualified.name.of.my.class 

私はremoteswinglibrary-2.2.1.jarと私のクラスパス上swinglibrary jarファイルを置き換えると私は同じテストを実行しました。出力は言う:

console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0. 
============================================================================== 
Remotetest                  
============================================================================== 
Foobar Test               | FAIL | 
RemoteSwingLibraryTimeoutError: Agent port not received before timeout 
------------------------------------------------------------------------------ 
Remotetest               | FAIL | 
1 critical test, 0 passed, 1 failed 
1 test total, 0 passed, 1 failed 
============================================================================== 
Output: C:\<path>\output.xml 
Log:  C:\<path>\log.html 
Report: C:\<path>\report.html 

(つまり、「コンソール:...インストールに失敗しました」に注意一部が正常であると私は、私はそれを心配する必要はないと思う)私は掘るとき

アプリケーション起動のキーワードのレポートは、それが

13:48:40.070 INFO Link to stdout 
13:48:40.070 INFO Link to stderr 
13:48:40.070 INFO -javaagent:"C:<pathToProject>\__pyclasspath__"=127.0.0.1:63110 
13:48:40.071 INFO Starting process: 
        java fully.qualified.name.of.my.class 
13:49:40.145 INFO Failed to start application: Traceback (most recent call last): 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 307, in start_application 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 353, in _application_started 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 373, in _get_agent_address 
      RemoteSwingLibraryTimeoutError: Agent port not received before timeout 
13:49:40.155 INFO Waiting for process to complete. 
13:49:40.165 INFO Process completed. 
13:49:40.165 INFO STDOUT: Error occurred during initialization of VM 
        agent library failed to init: instrument 
13:49:40.175 INFO STDERR: Error opening zip file or JAR manifest missing : C:<pathToProject>\__pyclasspath__ 
        Picked up JAVA_TOOL_OPTIONS: -javaagent:"C:<pathToProject>\__pyclasspath__"=127.0.0.1:63110 
        Picked up _JAVA_OPTIONS: -Djava.security.policy="C:\<UserFolder>\ 
        AppData\Local\Temp\2\grant_all_f_vfit.policy" 
13:49:40.195 FAIL RemoteSwingLibraryTimeoutError: Agent port not received before timeout 

言う私は、この直感は本当に何に設立されたかどうかわからないんだけど、私の疑いは、クラスパスの問題があるということです。私は、 "java fully.qualified.name.of.my.class"でStart Applicationキーワードを呼び出すと、おそらくクラスパスを渡す必要があると思います。私はおそらく、リモートでないバージョンがこれをうまく処理しているとは思わないかもしれないと思っていたかもしれません。おそらく、同じJVMで私のアプリケーションを実行していて、ロボットフレームワークを起動していて、 。

それが問題なら、おそらく私のjavaコマンドで-cpオプションを使って修正できます。しかし、この特定のプロジェクトのクラスパスは実際かなり長い(私のプロジェクトは他の多くのプロジェクトに依存している)ので、すべてをリストアップする必要はありません。また、新しい依存関係を追加すると、テストファイルのクラスパスも更新する必要はありません。

私は現在のクラスパスをリモートアプリケーションに渡すことができるいくつかの魔法の方法はありますか?または、おそらくこの問題の他の解決策ですか?

更新

私は-cpと私の巨大なクラスパスで再び試してみました、それは私のクラスパスが起こっている何とは何の関係もないことをその可能なので、私に同じエラーを与えました。

ポート番号を明示的に指定しようとしましたが、少し出力が異なります(まだ動作しません)。私はまた、少し詳細を与えるデバッグ設定があることを発見しました。ここで私は、新しいセットアップです:

*** Settings *** 
Library RemoteSwingLibrary debug=True port=8242 

*** Test Cases *** 
Foobar Test 
    Start Application my_app java -cp <classpath> <fully.qualified.name.of.my.class> remote_port=8242 

そして、ここでは、私の新しい出力されます。

13:48:40.070 INFO Link to stdout 
13:48:40.070 INFO Link to stderr 
13:48:40.070 DEBUG Picked old JAVA_TOOL_OPTIONS='' 
13:48:40.070 DEBUG Picked old _JAVA_OPTIONS='' 
13:48:40.070 INFO -javaagent:"C:<pathToProject>\__pyclasspath__"=127.0.0.1:51509:DEBUG 
13:48:40.070 DEBUG Set JAVA_TOOL_OPTIONS='-javaagent:"C:<pathToProject>\__pyclasspath__"=127.0.0.1:8242:APPORT=8242:DEBUG' 
13:48:40.070 DEBUG SET _JAVA_OPTIONS='-Djava.security.policy="C:\<UserFolder>\AppData\Local\Temp\4\grant_all_haud6t.policy"' 
13:48:40.071 INFO Starting process: 
        java -cp <classpath> <fully.qualified.name.of.my.class> 
13:48:40.071 DEBUG Process configuration: 
        cwd:  C:<PathToProject> 
        shell: True 
        stdout: C:<PathToProject>\<someBigPath>.txt 
        stderr: C:<PathToProject>\<someBigPath>.txt 
        alias: my_app 
        env:  None 
13:48:40.100 DEBUG Returned old JAVA_TOOL_OPTIONS='' 
13:48:40.100 DEBUG Returned old _JAVA_OPTIONS='' 
13:48:40.102 INFO connection to started application at 127.0.0.1:8242 
13:48:40.120 DEBUG remote swinglibrary instantiated 
13:48:40.121 DEBUG remote services instantiated 
13:48:40.121 INFO waiting for api at 127.0.0.1:8242 
13:49:40.145 INFO Failed to start application: Traceback (most recent call last): 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 307, in start_application 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 357, in _application_started 
       File "__pyclasspath__/RemoteSwingLibrary.py", line 344, in _wait_for_api 
      RuntimeError: Connecting to api at 127.00.1:8242 has failed: '' 
13:49:40.155 INFO Waiting for process to complete. 
13:49:40.165 INFO Process completed. 
13:49:40.165 INFO STDOUT: Error occurred during initialization of VM 
        agent library failed to init: instrument 
13:49:40.175 INFO STDERR: Error opening zip file or JAR manifest missing : C:<pathToProject>\__pyclasspath__ 
        Picked up JAVA_TOOL_OPTIONS: -javaagent:"C:<pathToProject>\__pyclasspath__"=127.0.0.1:8242:APPORT=8242:DEBUG 
        Picked up _JAVA_OPTIONS: -Djava.security.policy="C:\<UserFolder>\ 
        AppData\Local\Temp\2\grant_all_f_vfit.policy" 
13:49:40.195 FAIL Connecting to api at 127.0.0.1:8242 has failed: '' 
13:49:40.195 DEBUG Traceback (most recent call last): 
        File "__pyclasspath__/RemoteSwingLibrary.py", line 498, in run_keyword 
        File "__pyclasspath__/RemoteSwingLibrary.py", line 307, in start_application 
        File "__pyclasspath__/RemoteSwingLibrary.py", line 357, in _application_started 
        File "__pyclasspath__/RemoteSwingLibrary.py", line 344, in _wait_for_api 

さらに別のアップデート

私はこれがあること「__pyclasspath__」とは何かを持っていることと思いますエラーメッセージに表示されます。私は自分の環境変数をリストする "set"コマンドの前にある.batファイルにjavaコマンドを置きます。私はちょうど良い(それはJavaアプリケーションを起動する)コマンドラインから.BATファイルを実行することができます。

は、それから私は何をする私の.robotファイルを変更:-javaagent: "__ pyclasspath__"

Error opening zip file or JAR manifest missing : C:<pathToProject>\__pyclasspath__ 

がJAVA_TOOL_OPTIONSをピックアップ:

Foobar Test 
    Start Application my_app cd robotframework/tests && Run.bat remote_port=8242 

は、私は基本的に前に私が得た同じエラー出力を取得します= 127.0.0.1:8242:8242 = APPORT:DEBUG 拾っ_JAVA_OPTIONS:-Djava.security.policyのは= "C:\\のAppData \ローカル\ Tempに1 \ grant_all_lgirs7.policy \"

JAVA_TOOL_OPTIONSと_JAVA_OPTIONS(エラー出力の内容と一致する)を除き、バッチスクリプトが出力する環境は同じです。 __pyclasspath__という環境変数はありませんので、それが問題なのかどうか疑問に思っています。

JAVA_TOOL_OPTIONSを自分のロボットから見た出力と一致するように設定しました。コマンドラインから.batスクリプトを実行しようとすると同じエラーメッセージが表示されるため、環境変数が問題である。

答えて

0

まあ、の修正がありましたが、間違いなくの修正がありました。

私はときに私のリモートアプリのフレームワーク蹴り、それが設定されることが分かった:

JAVA_TOOL_OPTIONS=-javaagent:"C:\<pathToProject>\__pyclasspath__ 

しかし__pyclasspath__は、実際には、環境変数ではありません。私は、javaagentがリモートフレームワークライブラリを指し示す必要があることを知ったので、明示的に設定することにしました。

は、だから今、私はこのような何かに私のロボットファイルを変更:

*** Settings *** 
Library RemoteSwingLibrary 

*** Test Cases *** 
Foobar Test 
    Start Application my_app run.bat remote_port=1234 

そしてない場合run.batというファイル作られた:これは明らかに、ソートのハックソリューションです

set JAVA_TOOL_OPTIONS=-javaagent:"C:\<pathToProject\lib\remoteswinglibrary-2.2.1.jar"=127.0.0.1:1234:APPORT=1234 
java -cp <classPath> fully.qualified.name.of.class 

を移植性を持たせるためには少し作業が必要です(ハードコードされた "pathToProject"を取り除き、Linux環境もサポートする必要があります)。また、ポートでのハードコーディングが必要ですが、ロボットフレームワークが私のためにポートを選択するだけならいいと思います。

誰かが見つけたらもっと良い解決策を見たいと思いますが、今のところこれは少なくとも機能します。

関連する問題