尝试使用 java 运行 soap xml 时出错
Getting Error while trying to run soap xml using java
我正在使用 maven-soapui-plugin 4.5.1,我想 运行 一个特定的测试步骤。我正在使用以下代码:
WsdlProject abc = new WsdlProject(projectXMLPath);
WsdlTestSuite wsdlTestSuite = abc.getTestSuiteByName(testSuiteName);
WsdlTestCase wsdlTestCase = wsdlTestSuite.getTestCaseByName(testCaseName);
WsdlTestCaseRunner wsdlTestCaseRunner = new WsdlTestCaseRunner(wsdlTestCase,new StringToObjectMap());
WsdlTestStep wsdlTestStep = wsdlTestCase.getTestStepByName(testStepName);
wsdlTestCaseRunner.run(wsdlTestStep);
几件事 -
1.项目xml有2个测试套件,第一个测试套件有步骤,第二个测试套件有库函数。在 SoapUI 中,它们的编码如下:
来自第一个测试套件的第一个测试步骤脚本(假设已发出具有有效地址的请求)如下:
def proj= null
def workspace = testRunner.testCase.testSuite.project.getWorkspace();
proj= workspace.getProjectByName("Calling")
def testCase = proj.testSuites["Library"].testCases["Successful Calling Steps" ]
testRunner.testCase.setPropertyValue( "addressLine1", "xxxx" )
testRunner.testCase.setPropertyValue( "city", "xxxx" )
testRunner.testCase.setPropertyValue( "state", "xx" )
def testStep = testCase.getTestStepByName("Given a request with a valid address is made")
def runner = null
runner = testStep.run(testRunner, context)
库测试套件中的第二个测试脚本具有实际的 REST 请求、web 服务端点和 web 服务身份验证。
如果我们在 SOAPUI 中执行第一个测试套件中的第一个测试步骤,它会在内部调用库中的测试步骤替换变量值并进行 REST 调用以获得响应。这在 SOAPUI 中工作正常,但是当我们通过 JAVA 中的 运行 方法调用第一个测试步骤时,它失败并出现以下错误。
线程中的异常 "main" java.lang.NoClassDefFoundError: com/jniwrapper/PlatformContext
在 com.eviware.soapui.SoapUI.isJXBrowserDisabled(SoapUI.java:1060)
在 com.eviware.soapui.SoapUI.isJXBrowserDisabled(SoapUI.java:1038)
在 com.eviware.soapui.impl.wsdl.submit.filters.HttpAuthenticationRequestFilter.filterAbstractHttpRequest(HttpAuthenticationRequestFilter.java:77)
在 com.eviware.soapui.impl.wsdl.submit.filters.AbstractRequestFilter.filterRequest(AbstractRequestFilter.java:31)
在 com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:184)
在 com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
在 com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:76)
在 com.eviware.soapui.impl.rest.RestRequest.submit(RestRequest.java:209)
在 com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.run(RestTestRequestStep.java:898)
在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:238)
在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:224)
在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner$runTestStep.call(未知来源)
在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
在 MyClass.simpletest1(MyClass.groovy:109)
在 test.main(test.java:11)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:606)
在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
原因:java.lang.ClassNotFoundException:com.jniwrapper.PlatformContext
在 java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在 java.net.URLClassLoader$1.run(URLClassLoader.java:355)
在 java.security.AccessController.doPrivileged(本机方法)
在 java.net.URLClassLoader.findClass(URLClassLoader.java:354)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:425)
在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 还有 22 个
这里可能遗漏了什么我需要添加以解决问题的内容?请帮忙。
SoapUI 版本 4.5.1 已经过时,所需的依赖项可能不再可用。
您应该使用较新的版本。从4.5.2版本开始,SoapUI被SmartBear收购,相应更新了jar的groupid,导致在Maven repos中的位置不同:http://smartbearsoftware.com/repository/maven2/com/smartbear/soapui/soapui-maven-plugin/
我正在使用 maven-soapui-plugin 4.5.1,我想 运行 一个特定的测试步骤。我正在使用以下代码:
WsdlProject abc = new WsdlProject(projectXMLPath);
WsdlTestSuite wsdlTestSuite = abc.getTestSuiteByName(testSuiteName);
WsdlTestCase wsdlTestCase = wsdlTestSuite.getTestCaseByName(testCaseName);
WsdlTestCaseRunner wsdlTestCaseRunner = new WsdlTestCaseRunner(wsdlTestCase,new StringToObjectMap());
WsdlTestStep wsdlTestStep = wsdlTestCase.getTestStepByName(testStepName);
wsdlTestCaseRunner.run(wsdlTestStep);
几件事 - 1.项目xml有2个测试套件,第一个测试套件有步骤,第二个测试套件有库函数。在 SoapUI 中,它们的编码如下:
来自第一个测试套件的第一个测试步骤脚本(假设已发出具有有效地址的请求)如下:
def proj= null
def workspace = testRunner.testCase.testSuite.project.getWorkspace();
proj= workspace.getProjectByName("Calling")
def testCase = proj.testSuites["Library"].testCases["Successful Calling Steps" ]
testRunner.testCase.setPropertyValue( "addressLine1", "xxxx" )
testRunner.testCase.setPropertyValue( "city", "xxxx" )
testRunner.testCase.setPropertyValue( "state", "xx" )
def testStep = testCase.getTestStepByName("Given a request with a valid address is made")
def runner = null
runner = testStep.run(testRunner, context)
库测试套件中的第二个测试脚本具有实际的 REST 请求、web 服务端点和 web 服务身份验证。
如果我们在 SOAPUI 中执行第一个测试套件中的第一个测试步骤,它会在内部调用库中的测试步骤替换变量值并进行 REST 调用以获得响应。这在 SOAPUI 中工作正常,但是当我们通过 JAVA 中的 运行 方法调用第一个测试步骤时,它失败并出现以下错误。
线程中的异常 "main" java.lang.NoClassDefFoundError: com/jniwrapper/PlatformContext 在 com.eviware.soapui.SoapUI.isJXBrowserDisabled(SoapUI.java:1060) 在 com.eviware.soapui.SoapUI.isJXBrowserDisabled(SoapUI.java:1038) 在 com.eviware.soapui.impl.wsdl.submit.filters.HttpAuthenticationRequestFilter.filterAbstractHttpRequest(HttpAuthenticationRequestFilter.java:77) 在 com.eviware.soapui.impl.wsdl.submit.filters.AbstractRequestFilter.filterRequest(AbstractRequestFilter.java:31) 在 com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:184) 在 com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123) 在 com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:76) 在 com.eviware.soapui.impl.rest.RestRequest.submit(RestRequest.java:209) 在 com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.run(RestTestRequestStep.java:898) 在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:238) 在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:224) 在 com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner$runTestStep.call(未知来源) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 在 MyClass.simpletest1(MyClass.groovy:109) 在 test.main(test.java:11) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 原因:java.lang.ClassNotFoundException:com.jniwrapper.PlatformContext 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 还有 22 个
这里可能遗漏了什么我需要添加以解决问题的内容?请帮忙。
SoapUI 版本 4.5.1 已经过时,所需的依赖项可能不再可用。
您应该使用较新的版本。从4.5.2版本开始,SoapUI被SmartBear收购,相应更新了jar的groupid,导致在Maven repos中的位置不同:http://smartbearsoftware.com/repository/maven2/com/smartbear/soapui/soapui-maven-plugin/