简而言之:访问本地 file
在 脚本调度员 关于项目路径,即 def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
.这是工作正常当测试从 SoapUI 作为 运行时模拟服务 .但是给nothing or empty
当针对 运行相同的测试时,对于上述语句 ( groovyUtils.projectPath
)已部署(远程tomcat)模拟服务 .
Note: Here the
responseFileName
is present in the same location(when running SoapUI tool), relative to thesoapui project xml
有关该问题的更多详细信息:
想在tomcat中部署上述模拟服务。因此,使用 创建 war 部署为 war 来自 SoapUI,这创建了一个
.war
文件。如果 .war
被提取出来,它显示了以下目录结构。└───WEB-INF
├───actions
├───lib
├───listeners
└───soapui
和
soapui project xml
位于 WEB-INF/soapui
下目录。因为,
Script
调度员正在使用 groovyUtils.projectPath
, 和 .war
文件没有 responseFile
,在WEB-INF/soapui
下添加了所需的responseFile使用 7zip 实用程序的目录。并部署了更新的 .war
成功的tomcat中的文件。当测试请求命中部署模拟服务 ,它显示 空响应和以下 堆栈跟踪 在 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
中的资源文件调度程序,以便它以两种方式工作:一种。在 SoapUI 中模拟服务
湾。在 Tomcat 中部署模拟服务
顺便说一句,我不确定它的完成方式是否有任何问题。
使用:
SoapUI 开源版 - 5.2.1
Apache Tomcat - 8.0.5
更新:除了上述简短描述中已经尝试过的内容
中只有以下变量(下划线)可用脚本调度员
如果您使用
context
在 脚本调度员 ,不幸的是, 的常用方法都没有。 servlet 上下文 工作如下No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getResourceAsStream() is applicable
No signature of method: com.eviware.soapui.impl.wsdl.mock.WsdlMockRunContext.getRealPath() is applicable
显然是因为,SoapUI 的 WsdlMockRunContext 的 API没有这样的公共(public)方法可用。
我相信一定有一种我不知道并希望从社区中了解的不同方式。
最佳答案
主要问题是:groovyUtils.projectPath
仅适用于第一个用例,并获得 什么都没有对于第二个用例。
经过大量的尝试和错误并在网上搜索,found a hint在其中一个示例和以下方法中,可以在问题中提到的两个用例中访问本地文件资源。
soapUI
作为模拟服务运行本身 所以更改了代码( 模拟调度程序的脚本 )
来自:
def file = new File(groovyUtils.projectPath+"/${responseFileName}.xml")
至:
def projectPath = new File(mockOperation.mockService.project.path).parent
def file = new File(projectPath.+"/${responseFileName}.xml")
Note: file(resource) must be available in the same location where soapui project file is present on the disk i.e., after creatin
.war
file, update.war
file and make sure the required file is placed underWEB-INF/soapui
as that where soapui's project xml is available.
关于groovy - 在 Tomcat 中部署的 SoapUI Mock 服务中访问文件资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835395/