[Webtest] groovy asserts in macrodefs
Paul King
webtest@lists.canoo.com
Wed, 05 Jul 2006 23:54:38 +1000
Yes, Mittie, I spoke too soon. I can replicate the problem as follows:
<target name="testAssertionErrorInsideMacrodef">
<macrodef name="invokeScriptStep">
<attribute name="regexText"/>
<sequential>
<scriptStep description="assertion using scriptStep" language="groovy">
someText = "this is some text"
someRegex = /@{regexText}/
assert someText =~ someRegex
</scriptStep>
</sequential>
</macrodef>
<webtest name="scriptStep: test scriptStep with groovy assert failure using macrodef">
&sharedConfiguration;
<steps>
<invokeScriptStep regexText="some text"/>
<not description="expected to fail">
<invokeScriptStep regexText="other text"/>
</not>
</steps>
</webtest>
</target>
At first glance, from the stacktrace, it looks like AntWrapper is converting
the StepFailedException into a StepExecutionException.
I will look for a solution when I get a chance to look at it more closely.
Cheers,
Paul.
Dierk Koenig wrote:
> Its also done for GroovyStep, see GroovyInvoker:
>
> try
> {
> LOG.debug("Evaluating script: " + StringUtils.abbreviate(script, 20));
> shell.evaluate(script);
> }
> catch (final CompilationFailedException e)
> {
> LOG.error("CompilationFailedException", e);
> throw new StepExecutionException("Cannot compile groovy code: " + script,
> step, e);
> }
> catch (final AssertionError e) {
> LOG.info("AssertionError", e);
> throw new StepFailedException("Assertion failed within groovy
> code: " + script, step);
> }
>
> It must be some special thing about MacroDef...
>
> cheers
> Mittie
>
>> -----Original Message-----
>> From: webtest-admin@lists.canoo.com
>> [mailto:webtest-admin@lists.canoo.com]On Behalf Of Paul King
>> Sent: Mittwoch, 5. Juli 2006 14:28
>> To: webtest@gate2.canoo.com
>> Subject: Re: [Webtest] groovy asserts in macrodefs
>>
>>
>>
>> Hi Sergey, can you put in a feature request.
>> The following is from the scriptStep selftest:
>>
>> <steps>
>> <scriptStep description="passing assertion"
>> language="groovy">
>> someText = "this is some text"
>> someRegex = /some text/
>> assert someText =~ someRegex
>> </scriptStep>
>> <not description="expected to fail">
>> <scriptStep description="failing assertion"
>> language="groovy">
>> someText = "this is some text"
>> someRegex = /other text/
>> assert someText =~ someRegex
>> </scriptStep>
>> </not>
>> </steps>
>>
>> and shows this works for scriptStep. We will need to replicate the
>> exception handling logic for the groovy step too. You can use
>> scriptStep in the meantime.
>>
>> Cheers, Paul.
>>
>> Sergey Batishchev wrote:
>>> Hi,
>>> we recently started WebTest canoo (R_1353) and discovered one unusual
>>> piece of behavior.
>>>
>>> When you do groovy "asserts" from macrodefs, they cause test error, not
>>> failure. This makes report not very readable and stops you from doing
>>> "<not>" when you want to build your own groovy steps...
>>>
>>> As I am really new to this, can you explain if this is an issue or we
>>> just need to "fail" steps in a different way here from within
>> the groovy?
>>> For example, the following passes just fine:
>>> ...<not><groovy>System.out.println("Test1");assert
>> 1==3;</groovy></not>...
>>> While the following fails with exception:
>>> <macrodef name="sampleMacro">
>>> <sequential>
>>> <groovy>
>>>
>>> System.out.println("Test2");assert 1==3;
>>> </groovy>
>>> </sequential>
>>> </macrodef>
>>> ...
>>> <not><groovy>System.out.println("Test1");assert 1==3;</groovy></not>
>>> ...
>>>
>>> Thanks in advance! Sergey.
>>>
>>> PS: Actual exception is below:
>>> com.canoo.webtest.engine.StepExecutionException: Unexpected exception
>>> caught: C:\Canoo WebTest\tests\FGI Load Tracking\build.xml:26: The
>>> following error occurred while executing this line:
>>> C:\Canoo WebTest\tests\FGI Load Tracking\build.xml:18:
>>> com.canoo.webtest.engine.StepFailedException: Assertion failed within
>>> groovy code:
>>> System.out.println("Test2");assert 1==3;
>>> , Step: GroovyStep at C:\Canoo WebTest\tests\FGI Load
>>> Tracking\build.xml:18: with (taskName="groovy"), Step: AntWrapper at
>>> with ()
>>> at com.canoo.webtest.steps.Step.handleUnexpectedException(Step.java:457)
>>> at com.canoo.webtest.steps.Step.execute(Step.java:133)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at com.canoo.webtest.steps.StepUtil.performStanza(StepUtil.java:34)
>>> at
>>>
>> com.canoo.webtest.steps.AbstractStepContainer.executeContainedStep
>> (AbstractStepContainer.java:150)
>>> at com.canoo.webtest.steps.control.NotStep.doExecute(NotStep.java:46)
>>> at com.canoo.webtest.steps.Step.execute(Step.java:130)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at
>>>
>> com.canoo.webtest.ant.TestStepSequence.executeSteps(TestStepSequen
>> ce.java:58)
>>> at
>>>
>> com.canoo.webtest.ant.TestStepSequence.doExecute(TestStepSequence.java:39)
>>> at com.canoo.webtest.steps.Step.execute(Step.java:130)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at com.canoo.webtest.ant.WebtestTask.execute(WebtestTask.java:152)
>>> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:64)
>>> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at
>>>
>> org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.
>> java:378)
>>> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at org.apache.tools.ant.Target.execute(Target.java:341)
>>> at org.apache.tools.ant.Target.performTasks(Target.java:369)
>>> at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
>>> at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
>>> at
>>>
>> org.apache.tools.ant.helper.DefaultExecutor.executeTargets(Default
>> Executor.java:40)
>>> at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
>>> at org.apache.tools.ant.Main.runBuild(Main.java:668)
>>> at org.apache.tools.ant.Main.startAnt(Main.java:187)
>>> at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
>>> at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
>>> Caused by: C:\Canoo WebTest\tests\FGI Load Tracking\build.xml:26: The
>>> following error occurred while executing this line:
>>> C:\Canoo WebTest\tests\FGI Load Tracking\build.xml:18:
>>> com.canoo.webtest.engine.StepFailedException: Assertion failed within
>>> groovy code:
>>> System.out.println("Test2");assert 1==3;
>>> , Step: GroovyStep at C:\Canoo WebTest\tests\FGI Load
>>> Tracking\build.xml:18: with (taskName="groovy")
>>> at
>>>
>> org.apache.tools.ant.ProjectHelper.addLocationToBuildException(Pro
>> jectHelper.java:539)
>>> at
>>>
>> org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.
>> java:380)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at com.canoo.webtest.extension.AntWrapper.doExecute(AntWrapper.java:85)
>>> at com.canoo.webtest.steps.Step.execute(Step.java:130)
>>> ... 29 more
>>> Caused by: C:\Canoo WebTest\tests\FGI Load Tracking\build.xml:18:
>>> com.canoo.webtest.engine.StepFailedException: Assertion failed within
>>> groovy code:
>>> System.out.println("Test2");assert 1==3;
>>> , Step: GroovyStep at C:\Canoo WebTest\tests\FGI Load
>>> Tracking\build.xml:18: with (taskName="groovy")
>>> at org.apache.tools.ant.Task.perform(Task.java:373)
>>> at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:64)
>>> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> at
>>>
>> org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.
>> java:378)
>>> ... 32 more
>>> Caused by: com.canoo.webtest.engine.StepFailedException: Assertion
>>> failed within groovy code:
>>> System.out.println("Test2");assert 1==3;
>>> , Step: GroovyStep at C:\Canoo WebTest\tests\FGI Load
>>> Tracking\build.xml:18: with (taskName="groovy")
>>> at
>>>
>> com.canoo.webtest.extension.groovy.GroovyInvoker.doExecute(GroovyI
>> nvoker.java:49)
>>> at
>>>
>> com.canoo.webtest.extension.groovy.GroovyStep.doExecute(GroovyStep
>> .java:27)
>>> at com.canoo.webtest.steps.Step.execute(Step.java:130)
>>> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>>> at org.apache.tools.ant.Task.perform(Task.java:364)
>>> ... 36 more
>>>