当我在 soapUI 中使用启动运行器运行项目时,我遇到了"Cannot invoke method getProjectByName() on null object"



我有一个控制器,它从excel中获取测试数据,并将它们传递到另一个名为SERVICE_APP项目的属性中。

当我使用测试用例SoapUI运行控制器时,它运行正常。但当我从项目启动/测试套件启动中使用命令行/soapUI运行时,我得到了错误"getProjectByName()on null object"。

16:20:53,896 ERROR [SoapUI] An error occurred [Cannot invoke method getProjectB
Name() on null object], see error log for details
java.lang.NullPointerException: Cannot invoke method getProjectByName() on null
object
        at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:
7)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMeta
lassSite.java:45)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallS
teArray.java:45)
        at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.
ava:32)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallS
teArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractC
llSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractC
llSite.java:116)
        at Script1.run(Script1.groovy:159)
        at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine
run(SoapUIGroovyScriptEngine.java:100)
        at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(
sdlGroovyScriptTestStep.java:154)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestS
ep(AbstractTestCaseRunner.java:239)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentT
stStep(WsdlTestCaseRunner.java:52)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internal
un(AbstractTestCaseRunner.java:152)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internal
un(AbstractTestCaseRunner.java:47)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(Abstract
estRunner.java:139)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

当我们从命令行/启动运行程序运行时,我们需要加载项目手册

http://forum.soapui.org/viewtopic.php?f=5&t=1449

这是因为从命令行运行时没有"工作区",因此您无法以这种方式访问其他项目。为了能够访问另一个项目,你需要手动加载它。这可以在groovy脚本中使用ProjectFactoryRegistry来完成。

import com.eviware.soapui.model.project.ProjectFactoryRegistry
import com.eviware.soapui.impl.wsdl.WsdlProjectFactory
def workspace = testRunner.testCase.testSuite.project.workspace
def testProject = (workspace==null) ? 
  ProjectFactoryRegistry.getProjectFactory(WsdlProjectFactory.WSDL_TYPE).createNew("<path to your project>.xml") :
  workspace.getProjectByName("ViewingCardManager_v15B4.0")
if(!testProject.open && workspace!=null) workspace.openProject(testProject)
testProject.properties["mqResponse"].value = "blahblah"

@Siking:感谢您尝试提供解决方案

相关内容

最新更新