[英]Is it possible to inject '<' and '>' characters into SoapUI request XML literally using Groovy script?
我正在与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]]>
真的没有简单,直接的方法吗?
恕我直言,这不是Groovy问题,而是XML问题。
唯一需要转义的字符为“ <”本身。
您只需要用lt替换“ <”即可; 在XML中。
例:
def param1 = "<foo-bar>"
println param1.replace("<", "<")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.