繁体   English   中英

是否可以使用Groovy脚本从字面上将'<'和'>'字符注入SoapUI请求XML中?

[英]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时,标记如下所示:

&lt;![CDATA[TestArg-Hyphen]]&gt;

我一直在网上徒劳搜寻,寻找解决这个问题的方法。 看起来“ <”和“>”字符不能像其他特殊字符(“-”,“ /”等)一样简单地转义。

我试过用单,双,三,斜线,美元斜线引号将我的字符串括起来:都产生相同的结果。

我敢肯定有一种方法可以做到这一点(只是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仍将更新为显示:

&lt;![CDATA[TestArg-Hyphen]]&gt;

真的没有简单,直接的方法吗?

恕我直言,这不是Groovy问题,而是XML问题。

唯一需要转义的字符为“ <”本身。

您只需要用lt替换“ <”即可; 在XML中。

例:

def param1 = "<foo-bar>"
println param1.replace("<", "&lt;")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM