无法使用Groovy Script

时间:2017-10-12 02:58:21

标签: jdbc groovy soapui

我有以下XML,它是从JDBC响应步骤生成的:

<ResultSet fetchSize="64">
    <Row rowNumber="1">
        <TW341_LIMITDEFN.LIMIT_CODE>022</TW341_LIMITDEFN.LIMIT_CODE>
        <TW341_LIMITDEFN.LIMIT_TYPE>N</TW341_LIMITDEFN.LIMIT_TYPE>
        <TW341_LIMITDEFN.PERIOD_VAL>1</TW341_LIMITDEFN.PERIOD_VAL>
        <TW341_LIMITDEFN.PERIOD_TYPE>C</TW341_LIMITDEFN.PERIOD_TYPE>
    </Row>
    <Row rowNumber="2">
        <TW341_LIMITDEFN.LIMIT_CODE>023</TW341_LIMITDEFN.LIMIT_CODE>
        <TW341_LIMITDEFN.LIMIT_TYPE>N</TW341_LIMITDEFN.LIMIT_TYPE>
        <TW341_LIMITDEFN.PERIOD_VAL>3</TW341_LIMITDEFN.PERIOD_VAL>
        <TW341_LIMITDEFN.PERIOD_TYPE>R</TW341_LIMITDEFN.PERIOD_TYPE>
    </Row>
    <Row rowNumber="3">
        <TW341_LIMITDEFN.LIMIT_CODE>030</TW341_LIMITDEFN.LIMIT_CODE>
        <TW341_LIMITDEFN.LIMIT_TYPE>N</TW341_LIMITDEFN.LIMIT_TYPE>
        <TW341_LIMITDEFN.PERIOD_VAL>1</TW341_LIMITDEFN.PERIOD_VAL>
        <TW341_LIMITDEFN.PERIOD_TYPE>C</TW341_LIMITDEFN.PERIOD_TYPE>
    </Row>

我试图在后面的步骤中将这些值捕获到一个断言中。我希望值到达数据映射

我在断言中有以下Groovy脚本,我希望从JDBC响应中获取值并将它们分配给脚本中声明的每个数据映射:

def jdbcResponse = context.expand( '${JDBC Request for expected results#ResponseAsXml}')

def xml = new XmlSlurper().parseText(jdbcResponse)

def expected = xml.'**'.findAll{it.name() == 'Row'}.collect{ [
              LimitCode       : it.TW341_LIMITDEFN.LIMIT_CODE.text(),
              LimitType       : it.TW341_LIMITDEFN.LIMIT_TYPE.text(),
              LimitPeriod     : it.TW341_LIMITDEFN.PERIOD_VAL.text(),
              LimitPeriodType : it.TW341_LIMITDEFN.PERIOD_TYPE.text()
             ]
          }.sort {it.LimitCode}

但是JDBC响应的值没有到达。 &#39;预期&#39;看起来像这样:

Thu Oct 12 10:51:05 WST 2017:INFO:
[{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=}, 
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=}, 
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},]

我可以看到&#39; xml&#39;正如下:

  

Thu Oct 12 10:55:19 WST 2017:INFO:022N1C023N3R030N1C033N5R043N3R093N1C601S1C

为什么我无法将这些值从JDBC响应XML分配到数据映射值中的任何想法?

1 个答案:

答案 0 :(得分:2)

这是因为,元素名称有.。因此,您需要将元素名称放在单引号(')之间,如下所示:

def expected = xml.'**'.findAll{it.name() == 'Row'}.collect{ [
              LimitCode       : it.'TW341_LIMITDEFN.LIMIT_CODE'.text(),
              LimitType       : it.'TW341_LIMITDEFN.LIMIT_TYPE'.text(),
              LimitPeriod     : it.'TW341_LIMITDEFN.PERIOD_VAL'.text(),
              LimitPeriodType : it.'TW341_LIMITDEFN.PERIOD_TYPE'.text()
             ]
          }.sort {it.LimitCode}