无法使用 Groovy 脚本从 JDBC 响应中选取数据
Unable to pick data from JDBC response using Groovy Script
我有以下 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 响应中的值没有到达。 'expected' 看起来像这样:
Thu Oct 12 10:51:05 WST 2017:INFO:
[{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},]
我可以看到 'xml' 如下:
Thu Oct 12 10:55:19 WST 2017:INFO:022N1C023N3R030N1C033N5R043N3R093N1C601S1C
知道为什么我不能将 JDBC 响应 XML 中的这些值分配到数据映射值中吗?
因为,元素名称有.
。因此,您需要将元素名称放在 单引号 (') 之间,如下所示:
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}
我有以下 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 响应中的值没有到达。 'expected' 看起来像这样:
Thu Oct 12 10:51:05 WST 2017:INFO:
[{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},
{LimitCode=, LimitType=, LimitPeriod=, LimitPeriodType=},]
我可以看到 'xml' 如下:
Thu Oct 12 10:55:19 WST 2017:INFO:022N1C023N3R030N1C033N5R043N3R093N1C601S1C
知道为什么我不能将 JDBC 响应 XML 中的这些值分配到数据映射值中吗?
因为,元素名称有.
。因此,您需要将元素名称放在 单引号 (') 之间,如下所示:
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}