在SoapUI groovy脚本中用项目属性值替换子字符串

在SoapUI groovy脚本中用项目属性值替换子字符串,groovy,replace,substring,soapui,Groovy,Replace,Substring,Soapui,我需要在查询中用项目属性值替换参数。 举个例子: 从订户中选择姓名,其中phonenb=NEW-CREATE.SUBS.phone和homeaddress=NEW-CREATE.SUBS.address 我应该替换以前缀NEW-CREATE.SUBS开头的所有内容。 具有名称位于此前缀之后的项目属性值。在我的示例中,项目属性名称为phone 值0712345678可以这样获得:testRunner.testCase.testSuite.project.getPropertyValue(“电话”)

我需要在查询中用项目属性值替换参数。 举个例子:

从订户中选择姓名,其中phonenb=NEW-CREATE.SUBS.phone和homeaddress=NEW-CREATE.SUBS.address

我应该替换以前缀
NEW-CREATE.SUBS开头的所有内容。
具有名称位于此前缀之后的项目属性值。在我的示例中,项目属性名称为
phone

0712345678
可以这样获得:
testRunner.testCase.testSuite.project.getPropertyValue(“电话”)

地址

England
来自
testRunner.testCase.testSuite.project.getPropertyValue(“地址”)

因此,在此之后,替换我的新查询应该如下所示:

从phonenb=“0712345678”和homeaddress=“England”所在的订户中选择姓名

我可以在DBConn上运行这个查询,首先是文件中的参数,然后存储结果

有人能给我提供这样的groovy代码吗


谢谢。

您可以使用正则表达式从查询中标识属性名称,然后执行替换。代码看起来像这样

def query = "select name from subscribers where phonenb = NEW-CREATE.SUBS.phone and homeaddress = NEW-CREATE.SUBS.address"

def regExp = /NEW-CREATE.SUBS.([a-zA-Z]+)/

matcher = ( query =~ regExp )

matcher.each { match ->
    def prop = testRunner.testCase.testSuite.project.getPropertyValue(match[1])
    //update the query
    query = query.replace("NEW-CREATE.SUBS." + match[1],prop)
}

log.info query

//returns
//Tue Apr 08 11:59:58 ADT 2014:INFO:select name from subscribers where phonenb = 999-999-9999 and homeaddress = nowhere to go
替代解决方案,使用存储在项目级别的前缀。用于保存前缀的项目级属性称为
prefix

def query = "select name from subscribers where phonenb = NEW-CREATE.SUBS.phone and homeaddress = NEW-CREATE.SUBS.address"

def prefix = context.expand('${#Project#prefix}') //get prefix from project level properties.

def regExp = /${prefix}([a-zA-Z]+)/

matcher = ( query =~ regExp )

matcher.each { match ->
    def prop = testRunner.testCase.testSuite.project.getPropertyValue(match[1])
    //update the query
    query = query.replace(prefix + match[1],prop)
}

log.info query

//returns
//Tue Apr 08 15:20:51 ADT 2014:INFO:select name from subscribers where phonenb = 999-999-9999 and homeaddress = nowhere to go

首先,请使用代码标签。我不确定你想要什么。你想在运行时用它们的值替换像
NEW-CREATE.SUBS.phone
这样的值吗?首先,我需要在查询中识别前缀“NEW-CREATE.SUBS.”的所有外观,然后从该字符串中仅提取变量名:from“NEW-CREATE.SUBS.phone”例如,我只需要“phone”。然后将此变量替换为其值。此代码中只缺少一件事:应根据项目属性值设置regExp。我有一个名为prefix=NEW-CREATE.SUBS的项目属性。那么,是否可以基于此项目属性值设置regExp?类似于
def regExp=/${prefix}([a-zA-Z]+)/
的方法只有一种:)试试看。我想会成功的。如果我的答案能解决你的问题,你能告诉我吗?我试过了,但没有成功。这就是为什么我问你:)。我也这样尝试过:
def regExp=/prefix([a-zA-Z]+)/
,但没有成功。更新了我的答案以使用项目级属性中的prefix。