Groovy 我得到了一个“答案”;无法对空对象调用方法getProjectByName();当我在soapUI中使用LAUNCH RUNNER运行项目时

Groovy 我得到了一个“答案”;无法对空对象调用方法getProjectByName();当我在soapUI中使用LAUNCH RUNNER运行项目时,groovy,soapui,Groovy,Soapui,我有一个控制器,它将excel中的测试数据传递到另一个名为SERVICE_APP project的项目的属性中 当我使用testcase SoapUI运行控制器时,它运行正常。但当我从Project launch/Testsuite launch使用命令行/soapUI运行时,我得到了错误“getProjectByName()on null对象” 16:20:53,896 ERROR [SoapUI] An error occurred [Cannot invoke method getProj

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

当我使用testcase SoapUI运行控制器时,它运行正常。但当我从Project launch/Testsuite launch使用命令行/soapUI运行时,我得到了错误“getProjectByName()on null对象”

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)

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

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

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"
导入com.eviware.soapui.model.project.ProjectFactoryRegistry
导入com.eviware.soapui.impl.wsdl.WsdlProjectFactory
def workspace=testRunner.testCase.testSuite.project.workspace
def testProject=(工作区==null)?
ProjectFactoryRegistry.getProjectFactory(WsdlProjectFactory.WSDL_类型)。createNew(“.xml”):
workspace.getProjectByName(“ViewingCardManager_v15B4.0”)
如果(!testProject.open&&workspace!=null)workspace.openProject(testProject)
testProject.properties[“mqResponse”].value=“blahblah”

@Siking:谢谢你尝试给出解决方案

这有帮助吗:嗨,Siking,对不起,这对我没有帮助,我已经试过了。我将controller testsuite保留在项目本身中,但它仍然给我带来了错误。我猜唯一剩下的是:复制步骤,因为没有代码的堆栈跟踪是非常无用的。请看Hi@SiKing:我已经添加了代码,请看一下并帮助我。请再次阅读此内容,并按照说明进行操作!