簡體   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