访问tomcat

时间:2016-01-17 05:19:46

标签: groovy mocking soapui tomcat8

简而言之问题:根据项目路径访问 SCRIPT Dispatcher 中的本地file,即def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")。当测试从 SoapUI 作为模拟服务运行时,这正常。但是,当对已部署(远程tomcat)模拟服务运行相同的测试时,为上述语句(nothing or empty)提供groovyUtils.projectPath

  

注意:此处responseFileName存在于相同位置(运行SoapUI工具时),相对于soapui project xml

有关此问题的更多详细信息:

想在tomcat中部署上面的模拟服务。因此,使用 SoapUI 中的 Deploy as war 创建了战争,这创建了一个.war文件。如果.war被提取,则显示以下目录结构。

└───WEB-INF
    ├───actions
    ├───lib
    ├───listeners
    └───soapui

soapui project xml位于WEB-INF/soapui目录下。

由于Script调度程序正在使用groovyUtils.projectPath,而.war文件没有responseFile,因此使用7zip实用程序在WEB-INF/soapui目录下添加了所需的responseFile 。并在tomcat中部署了更新的.war文件,该文件成功。

测试请求被点击部署的模拟服务时,它显示空响应和以下堆栈跟踪在tomcat的catalina.out:

17-Jan-2016 10:13:32.356 SEVERE [http-nio-8080-exec-6] com.eviware.soapui.mockaswar.MockAsWarServlet.service null
 com.eviware.soapui.impl.wsdl.mock.DispatchException: Failed to dispatch using script; java.io.FileNotFoundException: \responseFile.xml (The system cannot find the file specified)
        at com.eviware.soapui.impl.wsdl.mock.dispatch.ScriptMockOperationDispatcher.selectMockResponse(ScriptMockOperationDispatcher.java:91)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation.dispatchRequest(WsdlMockOperation.java:199)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchPostRequest(WsdlMockDispatcher.java:218)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockDispatcher.dispatchRequest(WsdlMockDispatcher.java:113)
        at com.eviware.soapui.impl.wsdl.mock.WsdlMockRunner.dispatchRequest(WsdlMockRunner.java:142)
        at com.eviware.soapui.mockaswar.MockAsWarServlet$MockServletSoapUICore.dispatchRequest(MockAsWarServlet.java:247)
        at com.eviware.soapui.mockaswar.MockAsWarServlet.service(MockAsWarServlet.java:182)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
        at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
  • 如何在SCRIPT Dispatcher中引用资源文件,以便它以两种方式工作:

    一个。在 SoapUI

    中使用模拟服务

    湾在 Tomcat

  • 中部署了模拟服务

顺便说一句,我不确定它是否有任何错误。

使用:

SoapUI开源版 - 5.2.1

Apache Tomcat - 8.0.5

更新: 除了上面在简短描述中提到的内容之外已经尝试过的内容

脚本调度程序中只有以下变量(带下划线) enter image description here

如果你在脚本调度程序中使用context,遗憾的是 servlet context 的常用方法都没有,例如下面的

  

没有方法签名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream()适用

     

没有方法签名:com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath()适用

很明显,因为SoapUI的WsdlMockRunContext API没有这样的公共方法。

我相信必须有一种我不了解并希望从社区中了解的不同方式。

1 个答案:

答案 0 :(得分:7)

主要问题是:groovyUtils.projectPath仅适用于首次使用案例,并且针对第二个用例获取

经过大量试用后错误并在其中一个示例中搜索网络found a hint以及以下方法,以便能够访问问题中提到的用例以下的本地文件资源。

  • soapUI本身
  • 作为模拟服务运行
  • 在远程tomcat中部署为战争

因此更改了代码(模拟调度程序的脚本

   def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")

   def projectPath = new File(mockOperation.mockService.project.path).parent
   def file = new File(projectPath.+"/${responseFileName}.xml")
  

注意:文件(资源)必须位于同一位置   其中soapui项目文件存在于磁盘上,即在creatin .war文件之后,更新.war文件并确保所需文件位于WEB-INF/soapui下,其中 soapui&#39 ; s 项目xml可用。