获取SoapUI groovy脚本中Rest请求类型的上一个测试步骤的名称

获取SoapUI groovy脚本中Rest请求类型的上一个测试步骤的名称,rest,groovy,properties,soapui,Rest,Groovy,Properties,Soapui,我使用groovy脚本从REST请求的响应中传输特定属性,如下所示: def setCookie = testRunner.testCase.testSteps["SubmitCompleteDeviceRegistration"].testRequest.response.responseHeaders["Set-Cookie"] def global = com.eviware.soapui.SoapUI.globalProperties re = /(SESSION_AUTHENTICA

我使用groovy脚本从REST请求的响应中传输特定属性,如下所示:

def setCookie = testRunner.testCase.testSteps["SubmitCompleteDeviceRegistration"].testRequest.response.responseHeaders["Set-Cookie"]
def global = com.eviware.soapui.SoapUI.globalProperties

re = /(SESSION_AUTHENTICATION_TOKEN=[A-Za-z0-9_-]+;)/
matcher = ( setCookie =~ re )
def cookie = matcher[0][0]

global.setPropertyValue("SESSION_AUTHENTICATION_TOKEN","$cookie")

return cookie
现在我要做的是将上述测试步骤的名称命名为“SubmitCompletedDeviceRegistration”,变量,这样我就可以对各种REST请求使用传输

此变量TestStep的名称应等于RestRequest类型的上一个TestStep的名称

如何定义与此条件相等的测试步骤

我试着用类似的东西

def prevGroovyTestStep =       
testRunner.testCase.findPreviousStepOfType(testRunner.testCase.getTestStepByName
("SubmitCompleteDeviceRegistration"),RestRequest)

log.info(prevGroovyTestStep.getName())
但我不知道如何实现这一点


任何帮助都将不胜感激

获取上一个步骤名称

def previousStepName=context.testCase.testStepList[context.currentStepIndex-1].name
log.info“以前的步骤名称为:${previousStepName}”

如果前一步的类型是Rest请求,则获取前一步的名称

def testStep=context.testCase.testStepList[context.currentStepIndex-1]
def previousStepName
if(com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep的testStep实例){
previousStepName=testStep.name
}否则{
log.error“上一步不是Rest请求类型”
}
如果(以前的步骤名称){
log.info“以前的步骤名称为:${previousStepName}”
}
如果在上述情况下类型不匹配,它将记录错误消息


更新-根据本问题作者的最新评论进行更新。下面的一个可以满足您的所有需要,上面的可能不再需要了

  • 为测试用例添加一个自定义属性,其名称为
    STEP_name
    ,其值为需要添加http头的测试步骤名称。正如您所评论的,本例中的最后一个测试步骤名称
  • 转到请求测试步骤,在该步骤中,您将获得Cookie作为响应头
  • 添加脚本断言类型的断言,并具有以下代码。注意,您需要修改要添加请求头
    Cookie
    的测试步骤名称。暂时使用占位符
  • 应将下面的脚本用作第一个测试请求步骤的脚本断言 *假设如下 *a。测试响应包含名为“Set Cookie”的http头 *b。其他请求需要发送名为“Cookie”的http头 *如果两个标题名称有任何更改,您可能需要 *在下面更改其引用 **/ def responseCookieKey='Set Cookie' def requestCookieKey='Cookie' def setHttpHeaders(字符串nextStepName,def headers){ def nextRequest=context.testCase.testSteps[nextStepName].httpRequest def existingHeaders=nextRequest.requestHeaders 标题。每个{ existingHeaders[it.key]=it.value } nextRequest.requestHeaders=现有Headers } if(messageExchange.responseHeaders.containsKey(responseCookieKey)){ log.info“在响应头中找到Cookie” def cookiez=messageExchange.responseHeaders[responseCookieKey] 断言null!=cookiez,“响应不包含Cookie” def headers=[(requestCookieKey):(cookiez)] setHttpHeaders(context.testCase.getProvertyValue('STEP_NAME'),标题) }否则{ log.error“在响应头中找不到Cookie” }
    ,是否只需要上一步?或者应该是上一步和匹配的休息步骤?如果上一个步骤不是Rest步骤类型,你想要什么?嗨,Rao,谢谢你的回复。对不起,我可能没有足够清楚地定义我需要什么。我需要的是rest请求类型的最后一个执行的teststep,也就是说,它可以从groovy teststep中删除3个步骤,只要它是rest请求。我认为脚本应该从上一步开始,如果这一步不是rest请求,它将继续上一步,直到满足条件为止。如果不满足条件,则应继续操作,而不记录错误。你能调整脚本以满足这些要求吗?你能解释一下你的用例是什么,而不是你想实现什么,可能还有其他或更好的解决方案吗?好的,看来问题的摘要引起了混乱。如果需要提取头值(可以是会话id或cookie)并将其分配给某个全局属性。这就是你的问题吗?是的,我确实提取了一个头值(cookie)并将其分配给属性。我想做的是从REST测试步骤的响应中提取一个cookie,以便在下面的REST请求中使用它。我使用groovy脚本来实现这一点,但是每次我将这个测试步骤复制到一个新的测试用例时,我都必须根据提取cookie所需的测试步骤的名称来调整脚本。此teststep将始终是最后执行的REST teststep,这就是为什么我试图找到一种方法来轻松识别此teststep的名称并将其用作脚本中的变量。理想情况下,我甚至不必将groovy teststep复制到每个testcase,而只需将其添加为一个独立的testcase,可以在每个testcase中运行(运行testcase>指向groovy测试步骤),但是其他方法也可以。