1

私のテスト環境には、特定のアクションを実行するクラスがあり、その一部はSilkTestのものを使用しています。テスト手順は、解析してActionImplクラスに変換し、処理を実行するXMLファイルによって定義されます。たとえば、次のようにアプリにログインし、ユーザーを切り替えてから、サーバーを再起動します。

<Script refBean="validateState" retry="false">
    <DataGroups>
        <Step action="log" mod="5.10.13 - Step 1" />
        <Step action="switchUsers" target="mlane" />
        <Step action="restartServer" />
    </DataGroups>
</Script>

アクションの場合、コードは最終的に次のメソッドを呼び出します。このメソッドは、テストが実行されてrestartServerいる現在実行中のメソッドを使用してBaseStateを作成します。eclipse.exe

private PassFail restartServerInEclipse() {
    Desktop desktop = new Desktop();
    BaseState eclipseBaseState = new BaseState("*eclipse.exe", "/Shell[@caption='Java EE*']", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
    desktop.executeBaseState(eclipseBaseState);
    // Do some stuff, like finding CTabItem objects, clicking them, etc.
    return passFail;
}

その日の最初のテストを実行しているとしましょう。仕事に取り掛かったばかりで、テストを実行することにしました。コードがrestartServerアクションに到達し、を呼び出すとrestartServerInEclipse()、現在実行eclipse.exe中のコードが認識され、指示されたSilkオブジェクトに対してSilkメソッドが正常に実行されます。

ただし、EclipseまたはOpen Agentを終了せずに、テストが終了した後、まったく新しいオブジェクト、まったく新しいテストスレッドのように同じテストを再度実行すると、テストが実行および停止され、Eclipseの緑色の実行ボタンをクリックしました。繰り返しますが、BaseState eclipseBaseState = new BaseState(...)コードに到達すると次のエラーが発生します。

com.borland.silktest.jtf.common.LaunchApplicationFailedException: Failed to start application '*eclipse.exe' in working directory 'null'. The system cannot find the file specified.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.borland.silktest.jtf.agent.ExceptionTranslatorUtil.createException(ExceptionTranslatorUtil.java:60)
    at com.borland.silktest.jtf.agent.ExceptionTranslatorUtil.translate(ExceptionTranslatorUtil.java:37)
    at com.borland.silktest.jtf.agent.JtfModule.executeBaseState_aroundBody39$advice(JtfModule.java:121)
    at com.borland.silktest.jtf.agent.JtfModule.executeBaseState(JtfModule.java:1)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy24.executeBaseState(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
    at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
    at org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
    at org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
    at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:47)
    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:351)
    at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:258)
    at com.borland.silktest.startservice.RmiConnectionUtil$1.invoke(RmiConnectionUtil.java:134)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy0.executeBaseState(Unknown Source)
    at com.borland.silktest.jtf.Agent.executeBaseState(Agent.java:452)
    at com.borland.silktest.jtf.BaseState.execute(BaseState.java:298)
    at com.borland.silktest.jtf.Desktop.executeBaseState(Desktop.java:69)
    at scripts.misc.validation.action.RestartServerActionImpl.restartServerInEclipse(RestartServerActionImpl.java:62)
    at scripts.misc.validation.action.RestartServerActionImpl.evaluate(RestartServerActionImpl.java:25)
    at scripts.misc.validation.ValidateState.evaluateStep(ValidateState.java:108)
    at scripts.misc.validation.ValidateState.script(ValidateState.java:131)
    at scripts.base.BaseScript.runWithRetries(BaseScript.java:204)
    at scripts.base.BaseScript.runIt(BaseScript.java:312)
    at suite.MainThread.script(MainThread.java:667)
    at suite.MainThread.run(MainThread.java:281)

2秒前に完全に正常に機能していた基本状態が正しくなくなりました。基本状態が最初に設定されると、Eclipseに関する何かが変化するかのように、それを再認識できません。

これを回避する唯一の方法は、EclipseとOpen Agentを再起動することですが、それでも機能しない場合があり、OAでライセンスサーバーの問題が発生することがあります。これには、コンピューターの再起動が必要です。

4

1 に答える 1

1

eclipse.exe投稿したログファイルから、テストとを切り替えていることがわかりますiexplore.exe。スクリプトが現在作成されている方法は、どちらか一方です。これは、Internet Explorerに切り替えるとすぐに、Silk TestがEclipseから切り離され、ウィンドウを認識しなくなることを意味します。

とにかく他のメカニズムでアプリケーションを起動しているので、attach累積的で、パターンを置き換えるのではなく追加する方法をお勧めします。これにより、アプリケーションを切り替える必要がなくなります。

Desktop desktop = new Desktop();
desktop.attach("*\\eclipse.exe", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
desktop.attach("*\\iexplore.exe", TechDomain.SWT, TechDomain.XBROWSER, TechDomain.WIN32);
Shell eclipse = desktop.find("/Shell[@caption='Java EE*']");
BrowserApplication browserApp = desktop.find("/BrowserApplication");
于 2012-11-27T06:52:24.227 に答える