2011-02-18 58 views
4

我是SoapUI和Groovy的新手,但他是一位經驗豐富的Java程序員。soapUI:如何從斷言腳本訪問Test Step屬性?

我創建了兩個測試步驟一個TestCase:

稱爲 CID與單一屬性 correlationID和值 ${=java.util.UUID.randomUUID()}
  1. 屬性的一步。
  2. Test Request其中我在請求中加入了<CorrelationID>${correlationID}</CorrelationID>

它運作完美,每次運行我的測試時都會提供獨特的CorrelationID值。

現在我要添加新的腳本的斷言來測試步驟2(Test Request),其比較從計算與一些數據測試步驟1(CID)從測試步驟2響應correlationID屬性值。問題是,我似乎無法從那裏訪問生成的值correlationID

如果我試試這個:log.info "${correlationId}"

我得到:No such property: correlationId for class: Script19

如果我試試這個:log.info "${CID#correlationId}"

我得到:

startup failed: 
Script43.groovy: 1: unexpected char: '#' @ line 1, column 16. 
    log.info "${CID#correlationId}" 
       ^
org.codehaus.groovy.syntax.SyntaxException: unexpected char: '#' @ line 1, column 16. 
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:97) 
    at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:71) 
    at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:236) 
    at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:158) 
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:814) 
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:511) 
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:487) 
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:464) 
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:306) 
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:287) 
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:727) 
    at groovy.lang.GroovyShell.parse(GroovyShell.java:739) 
    at groovy.lang.GroovyShell.parse(GroovyShell.java:766) 
    at groovy.lang.GroovyShell.parse(GroovyShell.java:757) 
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:148) 
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 
    at com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.GroovyScriptAssertion.assertScript(GroovyScriptAssertion.java:116) 
    at com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.GroovyScriptAssertion.internalAssertResponse(GroovyScriptAssertion.java:133) 
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlMessageAssertion.assertResponse(WsdlMessageAssertion.java:156) 
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest.assertResponse(WsdlTestRequest.java:189) 
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest.setResponse(WsdlTestRequest.java:159) 
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.run(WsdlTestRequestStep.java:346) 
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runTestStep(WsdlTestCaseRunner.java:207) 
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:138) 
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:39) 
    at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:135) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: Script43.groovy:1:16: unexpected char: '#' 
    at org.codehaus.groovy.antlr.parser.GroovyLexer.nextToken(GroovyLexer.java:695) 
    at org.codehaus.groovy.antlr.parser.GroovyLexer$1.nextToken(GroovyLexer.java:248) 
    at groovyjarjarantlr.TokenBuffer.fill(TokenBuffer.java:69) 
    at groovyjarjarantlr.TokenBuffer.LA(TokenBuffer.java:80) 
    at groovyjarjarantlr.LLkParser.LA(LLkParser.java:52) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.nls(GroovyRecognizer.java:780) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.openOrClosableBlock(GroovyRecognizer.java:8848) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.stringConstructorValuePart(GroovyRecognizer.java:13449) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.stringConstructorExpression(GroovyRecognizer.java:11932) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.primaryExpression(GroovyRecognizer.java:11091) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.argumentLabel(GroovyRecognizer.java:10863) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.commandArgument(GroovyRecognizer.java:10756) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.commandArguments(GroovyRecognizer.java:10173) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.expressionStatement(GroovyRecognizer.java:8948) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.statement(GroovyRecognizer.java:1258) 
    at org.codehaus.groovy.antlr.parser.GroovyRecognizer.compilationUnit(GroovyRecognizer.java:650) 
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:93) 
    ... 31 more 

1 error 

我如何訪問correlationId計算值從我斷言Groovy腳本?

謝謝

回答

11

與我的方法的問題是,即使我做訪問屬性,它是動態的,我的UUID是,每次我讀的屬性的值不同。

相反,我代替我Properties測試步驟與測試用例的安裝腳本:

uuid = context.expand('${=java.util.UUID.randomUUID()}') 
testRunner.testCase.setPropertyValue("correlationID", uuid) 

每次我的測試用例執行,將產生一個新的uuid。然後未來的測試步驟可以訪問這個靜態測試用例級別的屬性

在我的測試要求我使用:

<CorrelationID>${#TestCase#correlationID}</CorrelationID> 

在腳本中斷言我用:

correlationID = context.expand('${#TestCase#correlationID}') 

由於Unhandled從了SoapUI論壇。

1

想要添加該context.getPropertyNames()或context.getProperties()不會列出在'屬性'測試步驟中定義的屬性。 只有context.expand('')起作用。

+0

此對象「testRunner」來自哪裏?我在幾個論壇條目中看到了這個引用,但是如果我在斷言腳本中添加這樣一行,我總會收到一條錯誤消息「no such property testRunner」。 – mmo 2015-08-20 12:41:58