我正在与SoapUI一起进行Web服务功能测试。我正在使用SpecFlow来促进参数化数据驱动的测试。
作为我过程的一部分,我有一个Groovy脚本,该脚本在测试用例请求之前执行。该脚本读取在命令行调用中传递的参数,并将其注入请求XML参数中。
我的请求如下所示:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" >
<soap:Header/>
<soap:Body>
<soap:TestArg1>TestArgValue1</soap:TestArg1>
<soap:TestArg2>TestArgValue2</soap:TestArg2>
<soap:TestArg3>TestArgValue3</soap:TestArg3>
</soap:Body>
</soap:Envelope>
我的脚本运行正常,并且按预期正确注入了字符串值。
但是,在测试期间,我们发现许多测试输入args将包含特殊字符(连字符,斜杠等)。 为了解决此问题,我使用CDATA指令中包含的请求XML中的每个参数测试了服务测试,如下所示:
<![CDATA[TestArg-Hyphen]]>
在SoapUI GUI中的测试已成功;我更新了Groovy脚本以连接
<[CDATA[
之前和
]]>
在变量之后。
但是,当将串联的值注入到请求XML中时,标记如下所示:
<![CDATA[TestArg-Hyphen]]>
我花了很长时间在网上寻找解决这个问题的方法;似乎不能像其他特殊字符(“-”,“ /”等)那样简单地转义“ <”和“>”字符。
我尝试将字符串括在单,双,三,斜线,美元斜线引号中:都产生相同的结果。
我敢肯定有一种方法可以做到这一点(只是Groovy文档中没有突出显示),但是到目前为止,我还无法识别它。
非常感谢您提供任何帮助或建议。 感谢您的关注。
更新: 我的Groovy脚本的相关部分如下所示:
// Get next test step info
def nextStep = testRunner.testCase.getTestStepAt(context.currentStepIndex + 1)
// Create the XmlHolder object for the request step
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(nextStep.name + "#Request")
// Inject arg values into request XML
for (i=0; i < argsNamesArray.length; i++) {
argNode = "//" + argsNamesArray[i]
def argValue = "<![CDATA[" + argsValuesArray[i] + "]]>"
log.info argValue
holder[argNode] = argValue
}
holder.updateProperty()
请注意
log.info argValue
返回要注入到请求中的参数值:
<![CDATA[TestArg-Hyphen]]>
但是,执行脚本后,请求XML仍会更新为显示:
<![CDATA[TestArg-Hyphen]]>
真的没有简单,直接的方法吗?
答案 0 :(得分:1)
恕我直言,这不是一个 Groovy 问题,而是一个 XML 问题。
唯一需要转义的字符是“ <”本身。
您只需要用lt替换“ <”即可;在XML中。
示例:
def param1 = "<foo-bar>"
println param1.replace("<", "<")