groovy - 在 Tomcat 中部署的 SoapUI Mock 服务中访问文件资源

标签 groovy mocking soapui tomcat8

简而言之:访问本地 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 the soapui 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

    更新:除了上述简短描述中已经尝试过的内容

    中只有以下变量(下划线)可用脚本调度员
    enter image description here

    如果您使用 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 作为模拟服务运行本身
  • 在远程 tomcat 中部署为 war

  • 所以更改了代码( 模拟调度程序的脚本 )
    来自:

    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 under WEB-INF/soapui as that where soapui's project xml is available.

    关于groovy - 在 Tomcat 中部署的 SoapUI Mock 服务中访问文件资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835395/

    相关文章:

    certificate - SoapUI 是否支持 PKI/证书认证?

    groovy - 访问为 Jenkins Groovy 插件脚本指定的变量

    java - 使用可注入(inject)单例

    java - 使用 Groovy 将 bean 序列化和反序列化为 json

    php - 如何让我的 PHPUnit 测试更简洁、更短?

    ruby - RSpec2 中的模拟导致单例无法转储到 Sinatra Controller 中

    sqlite - SoapUI + sqlite-jdbc = ClassNotFoundException

    java - 无法使用 maven pom 覆盖 SOAPUI 中的 activeEnvironment

    java - 计算两个日期的总持续时间(以小时或分钟为单位)

    java - 为什么这两个字符串的编辑距离得分如此低?