2014-02-10 56 views
0

給節點值我使用XPath提取找出從XML響應節點值,但JMeter是我每次與以下錯誤執行時拋出一個錯誤:的JMeter的XPath提取不是有效的XPath

jmeter.extractor.XPathExtractor: TransformerException while processing ((//*[local-name() = 'RequestID'])[2]/text()) -1

Jmeter中使用的xpath表達式:(//*[local-name() = 'RequestID'])[2]/text()

我在線檢查了我的xpath表達式,並驗證了它的有效性並返回了期望值。不知道jmeter有什麼問題。

這裏是XML:

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Header> 
<urn1:ServiceControl xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2"> 
<urn1:EmergencyRequestIndicator>true</urn1:EmergencyRequestIndicator> 
<urn1:VersionID>1.0</urn1:VersionID> 
<urn1:LanguageCode type="Advisor">en-US</urn1:LanguageCode> 
<urn1:LanguageCode type="Subscriber">en-US</urn1:LanguageCode> 
<urn1:ApplicationID>GAA</urn1:ApplicationID> 
<urn1:LogicalID>W2DZD0Y06</urn1:LogicalID> 
<urn1:ComponentID>GAA-ocsComponent</urn1:ComponentID> 
<urn1:ReferenceID>CorrelationId</urn1:ReferenceID> 
<urn1:SentTimeStamp>2010-04-23T14:27:10Z</urn1:SentTimeStamp> 
<urn1:MessageType>ocsMessageType</urn1:MessageType> 
<urn1:ChannelID>GAA</urn1:ChannelID> 
<urn1:TaskID>ocsTask</urn1:TaskID> 
<urn1:Environment>4.0</urn1:Environment> 
<urn1:BODID>GAA-CorrelationId</urn1:BODID> 
<urn1:Asynchronous> 
<urn1:TimeToLive xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">10</urn1:TimeToLive> 
<urn1:PassThroughData xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2"> 
<urn1:Key xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">1</urn1:Key> 
<urn1:Value xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">10</urn1:Value> 
</urn1:PassThroughData> 
<urn1:ExpectedResponseTime xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">30</urn1:ExpectedResponseTime> 
<urn1:RequestID xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">100</urn1:RequestID> 
<urn1:RetryStrategy xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2"> 
<urn1:Name xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">RetryName</urn1:Name> 
<urn1:LongTermRetryIndicator xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">false</urn1:LongTermRetryIndicator> 
<urn1:ResponseRequiredOnErrorPoolMoveIndicator xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">true</urn1:ResponseRequiredOnErrorPoolMoveIndicator> 
</urn1:RetryStrategy> 
<urn1:ReplyRequiredIndicator xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">true</urn1:ReplyRequiredIndicator> 
<urn1:ReplyToMessageID xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">1000</urn1:ReplyToMessageID> 
<urn1:CallbackURI xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">urn1:www:com</urn1:CallbackURI> 
<urn1:FaultURI xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">urn1:www:com</urn1:FaultURI> 
<urn1:ProcessingModes xmlns:urn1="urn:com:sample:global:common:schema:ServiceControl:2">ProcessingMode</urn1:ProcessingModes> 
</urn1:Asynchronous> 
<urn1:Synchronous/> 
</urn1:ServiceControl> 
</S:Header> 
<S:Body> 
<ns2:ServiceRequestReference xmlns="urn:com:sample:ocs:common:schema:AutoTask:11" xmlns:ns10="urn:com:sample:global:common:schema:CallContext:2" xmlns:ns11="urn:com:sample:ocs:common:schema:ServiceFault:11" xmlns:ns12="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns13="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns14="http://www.w3.org/2000/09/xmldsig#" xmlns:ns15="urn:com:sample:global:common:schema:ServiceControl:2" xmlns:ns2="urn:com:sample:ocs:common:schema:CommonTypes:11" xmlns:ns3="urn:com:sample:ocs:common:schema:AutoInformation:11" xmlns:ns4="urn:com:sample:ocs:common:schema:UnitConfiguration:11" xmlns:ns5="urn:com:sample:ocs:common:schema:SubscriberRequest:11" xmlns:ns6="urn:com:sample:ocs:common:schema:ElectricAuto:11" xmlns:ns7="urn:com:sample:ocs:common:schema:EmergencyRequest:11" xmlns:ns8="urn:com:sample:ocs:common:schema:AutoRequest:11" xmlns:ns9="urn:com:sample:ocs:common:schema:AutoConnection:11"> 
<ns2:RequestID>2648331</ns2:RequestID> 
<ns2:isProcessingAnotherRequest>false</ns2:isProcessingAnotherRequest> 
<ns2:estimatedProcessingTime>0</ns2:estimatedProcessingTime> 
</ns2:ServiceRequestReference> 
</S:Body> 
</S:Envelope> 
+0

我不知道你所描述的環境,但我相信本地的名字是一個XPath 2.0功能,所以我會檢查,如果這產品支持xpath 2.0而不僅僅是xpath 1.0 – TGH

回答

0

可以使用即Beanshell Post Processor

假設你在XPath Extractor使用RequestID作爲參考的名字和下面的XPath減去可變1被用來獲取請求ID

(//*[local-name() = 'RequestID'])[2]/text() 

或 // ns2:RequestID/text()

下一頁BeanShell的代碼可以讓你操縱變量

int requestId = Integer.parseInt(vars.get("RequestID")); 
requestId = requestId--; 
vars.put("RequestID", String.valueOf(requestId)); 
+0

感謝您的迴應。但是,你能幫我理解爲什麼我需要使用Beanshell後處理器從變量中減去1,我只需要xml中的節點值。 – user3293853

+0

通過使用beanshell,得到以下錯誤 錯誤 - jmeter.util.BeanShellInterpreter:錯誤調用bsh方法:eval源文件:內聯評估:''int requestId = Integer.parseInt(vars.get(「Request_ID_Value」)); ;'':類型變量聲明:方法調用Integer.parseInt WARN-jmeter.extractor.BeanShellPostProcessor:BeanShell腳本中的問題org.apache.jorphan.util.JMeterException:調用bsh方法時出錯:eval源文件:內聯評估:'' 'int requestId = Integer.parseInt(vars.get(「Request_ID_Value」)); ;'':類型化變量聲明:方法調用Integer.parseInt – user3293853

+0

如果你只需要XML中的值,那麼只需輸入'// ns2:RequestID/text()',我最後會被你的'-1'表達式混淆的XPath。對於Beanshell - 你有不必要的分號。還要確保你有正確提取的變量'Request_ID_Value',如果它有默認值'null' - 它不會播放 –