肥皂ui请求内容的动态值
问题描述:
我有一个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()
以上常规脚本如下给人输出:
Wed Oct 18 14:55:13 SGT 2017:INFO:[${=(int)(Math.random()*9999)}]
LengthValue标签的实际值= 3 490,如何获取此值?
答
我想你正在做的是从请求'模板'获取LengthValue,而不是SoapUI实际传递给Web服务的东西。
在你的榜样,你有...
def stepReq = tStep.getProperty("Request").getValue()
的要求是什么,你在看到了SoapUI包括您的增值经销商,例如$ {myVar的}。我认为你所追求的是'原始要求'。
在SoapUI中,运行请求,运行后,您应该看到标有“原始请求”的选项卡。这是SoapUI实际发送到Web服务的内容,在这里你会看到已经评估过的变量,并显示出值,这就是你所追求的。
我已经采取了你的例子,并做了一些mods它。我没有测试过它,但它应该可以帮助你。
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)(数学.random()* 9999)}“
答
它可以很容易地从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"
请勿使用'workspace',因为它无法运行side soapui,即如果使用testrunner执行项目,它将失败。 – Rao