soapUI: Как получить доступ к свойству Test Step из скрипта утверждения?

Я новичок в SoapUI и Groovy, но опытный программист на Java.

Я создал TestCase с двумя тестовыми шагами:

  1. Шаг свойств называется CID с одним свойством correlationID и значением ${=java.util.UUID.randomUUID()}.
  2. Test Request где я поставил <CorrelationID>${correlationID}</CorrelationID> в запросе.

Он работает отлично и выдает уникальное значение CorrelationID каждый раз, когда я запускаю свои тесты.

Теперь я хочу добавить новое утверждение сценария к этапу проверки 2 (Test Request), которое сравнивает вычисленное значение свойства correlationID из этапа проверки 1 (CID) с некоторыми данными из ответа на этапе проверки 2. Проблема в том, что я не могу получить оттуда доступ к сгенерированному значению 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-скрипта утверждения?

Спасибо


person parxier    schedule 18.02.2011    source источник


Ответы (3)


Проблема с моим подходом заключалась в том, что даже если я получаю доступ к свойству, оно является динамическим, и мой 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.

person parxier    schedule 21.02.2011

Хотел добавить, что context.getPropertyNames () или context.getProperties () не перечисляет свойства, определенные на этапе проверки «Свойство». Работает только context.expand ('').

person shark8me    schedule 21.07.2011
comment
Откуда появился этот объект testRunner? Я видел, что на это ссылаются в нескольких записях форума, но если я добавлю такую ​​строку в свой сценарий утверждения, я всегда просто получаю сообщение об ошибке, нет такого свойства testRunner. - person mmo; 20.08.2015
comment
@mmo На этапе тестирования Groovy Script он доступен автоматически. - person Aron_dc; 04.09.2015

Чтобы получить имена свойств текущего шага теста из утверждения сценария, мы можем использовать следующие коды:

def testStepProp = context.getCurrentStep().getPropertyNames() for(i=0; i<testStepProp.size(); i++){ log.info testStepProp[i] }

Чтобы получить имена свойств текущего тестового примера из утверждения сценария, мы можем использовать следующие коды:

def testCaseProp = context.testCase.getPropertyNames() for(i=0; i<testCaseProp .size(); i++){ log.info testCaseProp[i] }

Чтобы получить значение свойства из утверждения сценария:

Например, если мое имя свойства - «correlationID» -

def myValue = context.testCase.getPropertyValue("correlationID") //If we are in same testCase def myValue = context.testCase.testSuite.testCases["testCaseName"].getPropertyValue("correlationID") //If we are in different testCase

Обратите внимание, что testRunner не работает в утверждении скрипта. Вместо этого нам нужно использовать контекст.

person Chinmay Nanda    schedule 09.08.2018