2017-10-18 4 views
3

ランダムメソッドによって生成された動的値を持つSOAPリクエストがあります。これらの生成された値をログに記録する方法soap uiリクエストの内容からの動的値

マイSOAPリクエスト:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET/"> 
    <soap:Header/> 
    <soap:Body> 
     <web:ChangeLengthUnit> 
     <web:LengthValue>${=(int)(Math.random()*9999)}</web:LengthValue> 
     <web:fromLengthUnit>Inches</web:fromLengthUnit> 
     <web:toLengthUnit>Centimeters</web:toLengthUnit> 
     </web:ChangeLengthUnit> 
    </soap:Body> 
</soap:Envelope> 

のGroovyスクリプト:

import com.eviware.soapui.support.GroovyUtils; 
def prj = testRunner.testCase.testSuite.project.workspace.getProjectByName("Project1") 
tCase = prj.testSuites['TestSuite'].testCases['TestCase'] 
tStep = tCase.getTestStepByName("ChangeLengthUnit") 

def stepReq = tStep.getProperty("Request").getValue() 

def runner = tStep.run(testRunner, context) 
log.info ("runner status ....... : " + runner.hasResponse()) 
log.info stepReq 
for(assertion in tStep.assertionList) 
{ 
log.info "Assertion [" + assertion.label + "] has status [" + assertion.status + "]" 
for(e in assertion.errors) 
log.info "-> Error [" + e.message + "]" 
} 
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(stepReq.toString()) 

log.info holder.getNodeValues("//web:LengthValue").toString() 

グルーヴィーなスクリプトの上には、以下のように出力を与えている:LengthValueタグの

Wed Oct 18 14:55:13 SGT 2017:INFO:[${=(int)(Math.random()*9999)}] 

実際の値を= 3 490、この値を取得するには?

+0

sideapapuiがうまく動作しない、つまりtestrunnerを使ってプロジェクトを実行すると失敗するため、 'workspace'を使用しないでください。 – Rao

答えて

2

あなたがしていることは、SoapUIが実際にWebサービスに渡したものではなく、リクエスト 'template'からLengthValueを取得していると思います。あなたの例では

、あなたが持っている...

def stepReq = tStep.getProperty("Request").getValue() 

要求は、例えば、あなたのVARSが含まれていることをあなたがSOAPUIで見るものです$ {myVar}。私はあなたがしているのは「生の要求」だと思います。

SoapUIでは、リクエストを実行し、リクエストが実行された後、 'Raw Request'というタブが表示されます。これは、SoapUIが実際にWebサービスに送信するものです。ここでは、varsが評価され、値が表示されます。

私はあなたの例を取っ​​ていくつか改造しました。私はそれをテストしていないが、それはあなたを助けるべきです。

import com.eviware.soapui.support.GroovyUtils; 
def prj = testRunner.testCase.testSuite.project.workspace.getProjectByName("Project1") 
tCase = prj.testSuites['TestSuite'].testCases['TestCase'] 
tStep = tCase.getTestStepByName("ChangeLengthUnit") 

def stepReq = tStep.getProperty("Request").getValue() 

def runner = tStep.run(testRunner, context) 

// CHA MOD - Can only get raw request after running the step. 
def rawRequest = context.expand('${ChangeLengthUnit#RawRequest}') 
//CHA MOD - Quick look at the rawRequest... 
log.info(rawRequest); 


log.info ("runner status ....... : " + runner.hasResponse()) 
log.info stepReq 
for(assertion in tStep.assertionList) 
{ 
log.info "Assertion [" + assertion.label + "] has status [" + assertion.status + "]" 
for(e in assertion.errors) 
log.info "-> Error [" + e.message + "]" 
} 
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(stepReq.toString()) 

log.info holder.getNodeValues("//web:LengthValue").toString() 

//CHA MOD - Get the length from the raw request... 
holder = groovyUtils.getXmlHolder(rawRequest.toString()) 
log.info holder.getNodeValues("//web:LengthValue").toString() 
1

実際のリクエストから値を得ています。上記のコードではなく、「$ {=(int型)(数学の実行時に渡された実際の値が含まれているあなたのteststepの生の要求を指しますコード

def holder = groovyUtils.getXmlHolder(mentionThenameofthestep#RawRequest) 

以下RawRequest

使用からデータを取得してください.random()* 9999)} "

2

RawRequestプロパティから同じリクエストステップでScript Assertionを使用すると簡単に読み取ることができます。

assert context.rawRequest, 'Request is empty or null' 

def xml = new XmlSlurper().parseText(context.rawRequest) 
def actualValueInTheRequest = xml.'**'.find{it.name() == 'LengthValue'}?.text() 
log.info "Value for LengthValue in the actual request is : $actualValueInTheRequest" 
関連する問題