Groovy-SoapUI-Update请求头-无法创建If语句

Groovy-SoapUI-Update请求头-无法创建If语句,groovy,http-headers,soapui,Groovy,Http Headers,Soapui,我正在SoapUI中创建一个测试项目,需要执行以下操作: 我有一个带有1个测试用例的“令牌”测试套件:3个步骤为3种不同类型的用户(查看器、管理员、编辑器)生成令牌,然后一个Groovy脚本测试步骤获取令牌头并将其添加到套件的所有测试用例中 对于某些测试,我想向测试步骤添加额外的头,但不想删除已分配的令牌头 我创建了以下脚本: import groovy.json.JsonSlurper; 导入com.eviware.soapui.support.types.StringToString映射

我正在SoapUI中创建一个测试项目,需要执行以下操作:

  • 我有一个带有1个测试用例的“令牌”测试套件:3个步骤为3种不同类型的用户(查看器、管理员、编辑器)生成令牌,然后一个Groovy脚本测试步骤获取令牌头并将其添加到套件的所有测试用例中
  • 对于某些测试,我想向测试步骤添加额外的头,但不想删除已分配的令牌头
我创建了以下脚本:

import groovy.json.JsonSlurper;
导入com.eviware.soapui.support.types.StringToString映射;
//完成项目中的所有测试步骤
testRunner.testCase.testSuite.project.testSuite.each{
套房->
suite.getValue().testCases.each{
q1->
q1.getValue().testSteps.each{
it->
if(it.getValue().config.type.equals(“restrequest”)){
//获取当前测试步骤的标题
def headers=it.getValue().getHttpRequest().getRequestHeaders()
//将新标题附加到现有列表中
标题。放置(“标题A”、“值A”);
标题。放置(“标题B”、“值B”);
标题。放置(“标题C”、“值C”);
//设置更新的标题列表
it.getValue().getHttpRequest().setRequestHeaders(标头)
}
}
}
}
这个脚本将头更新到我想要的所有测试用例中,但也将头添加到“令牌”测试套件中并将其中断

我想添加一个“IF”语句,该语句将检查:如果测试套件名称不包含“Token”,则向其添加额外的头。如果它包含“令牌”,请保持原样。我在项目中首先使用了令牌测试套件,因此当调用它时(通过bambol),它会生成令牌,从而生成其余测试用例的头

我尝试过几件事,但我的Groovy技能是业余的,总是会出错。你能提出一个解决方案吗


谢谢你抽出时间

正如您所指出的,在您的案例中,当套件名称不是
Token
时,有一个if条件

下面是一个小的重构/Groovized脚本:

import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep

//Define your suite name to ignore
def suiteToIgnore = 'Token'


//Get Project
def project = testRunner.testCase.testSuite.project

project.testSuiteList.each { suite ->
    if (suiteToIgnore != suite.name) {
        suite.testCaseList.each { kase ->
            kase.testStepList.each { step ->
                if (step instanceof RestTestRequestStep) {
                    //Get the headers of the current teststep
                    def headers = step.httpRequest.requestHeaders
                    //Append the new header to the existing list
                    headers.put("Header A", "Value A");
                    headers.put("Header B", "Value B");
                    headers.put("Header C", "Value C");
                    //Set the updated header list 
                    step.httpRequest.requestHeaders = headers
                }
            }
        }
    }
}

除了答案中提供的内容之外,您在本脚本中还有更多内容吗?你好,Rao,谢谢您的帮助。运行脚本时,我收到以下错误消息:{Code}org.codehaus.groovy.control.multiplecompiletonErrorsException:启动失败:Script4.groovy:8:意外标记:project@line 8,第5列。def project testRunner.testCase.testSuite.project^org.codehaus.groovy.syntax.SyntaxException:意外标记:project@line 8,column 5。在org.codehaus.groovy.antlr.antlrpasserplugin.transformcstinost(antlrpasserplugin.java:140){Code}PS:我看到您在代码中使用了“kase”。这是对的,还是你的意思是“case”?不,我在这个脚本中没有任何其他代码。我应该重写我最初的两个导入吗?很抱歉,这是打字错误。修正了答案。请拿最新的好吗?在def项目之后,它丢失了
=
。是的,
kase
(用作变量)是正确的,因为
case
是一个关键字。用更新的代码更改了它,现在我得到了错误:{code}org.codehaus.groovy.control.multiplecompationerrorseception:startup失败:Script8.groovy:10:需要“}”,在第10行第36列找到“-”。project.testSuiteList.each{suite->^org.codehaus.groovy.syntax.SyntaxException:应为“}”,在第10行第36列找到“-”。位于{Code}的org.codehaus.groovy.antlr.antlrpasserplugin.transformcstinoast(antlrpasserplugin.java:140)