soap ui 来自请求内容的动态值
soap ui dynamic value from request content
我有一个 SOAP 请求,它具有通过随机方法生成的动态值。如何捕获这些生成的值来记录?
我的 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()
上面的 groovy 脚本给出的输出如下:
Wed Oct 18 14:55:13 SGT 2017:INFO:[${=(int)(Math.random()*9999)}]
LengthValue标签的实际值=3490,如何获取这个值?
我认为您正在做的是从请求中获取 LengthValue 'template',而不是 SoapUI 实际传递给 Web 服务的内容。
在你的例子中,你有...
def stepReq = tStep.getProperty("Request").getValue()
请求是您在 SoapUI 中看到的内容,包括您的变量,例如${myVar}。我想你想要的是 'raw request'.
在 SoapUI 中,运行 请求和 运行 之后,您应该会看到一个标签为 'Raw Request' 的选项卡。这是 SoapUI 实际发送到 Web 服务的内容,在这里您会看到变量已经过评估并将显示值,这就是您所追求的。
我以你的例子为例子做了一些修改。我还没有测试过,但它应该对你有帮助。
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()
您正在从实际请求中获取价值。尝试从 RawRequest
获取数据
使用下面的代码
def holder = groovyUtils.getXmlHolder(mentionThenameofthestep#RawRequest)
以上代码将指向您的测试步骤的原始请求,其中包含执行期间传递的实际值而不是“${=(int)(Math.random()*9999)}”
对于相同的请求步骤,使用 Script Assertion
可以很容易地从 RawRequest
属性 中读取。
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"
我有一个 SOAP 请求,它具有通过随机方法生成的动态值。如何捕获这些生成的值来记录?
我的 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()
上面的 groovy 脚本给出的输出如下:
Wed Oct 18 14:55:13 SGT 2017:INFO:[${=(int)(Math.random()*9999)}]
LengthValue标签的实际值=3490,如何获取这个值?
我认为您正在做的是从请求中获取 LengthValue 'template',而不是 SoapUI 实际传递给 Web 服务的内容。
在你的例子中,你有...
def stepReq = tStep.getProperty("Request").getValue()
请求是您在 SoapUI 中看到的内容,包括您的变量,例如${myVar}。我想你想要的是 'raw request'.
在 SoapUI 中,运行 请求和 运行 之后,您应该会看到一个标签为 'Raw Request' 的选项卡。这是 SoapUI 实际发送到 Web 服务的内容,在这里您会看到变量已经过评估并将显示值,这就是您所追求的。
我以你的例子为例子做了一些修改。我还没有测试过,但它应该对你有帮助。
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()
您正在从实际请求中获取价值。尝试从 RawRequest
获取数据使用下面的代码
def holder = groovyUtils.getXmlHolder(mentionThenameofthestep#RawRequest)
以上代码将指向您的测试步骤的原始请求,其中包含执行期间传递的实际值而不是“${=(int)(Math.random()*9999)}”
对于相同的请求步骤,使用 Script Assertion
可以很容易地从 RawRequest
属性 中读取。
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"