[Webtest] Setting checkbox values and <unknown> appears as stepId for groups in report after a failure

Josh Passenger webtest@lists.canoo.com
Fri, 08 Oct 2004 15:39:50 +1000


Hi,

A bit of a brain dump follows.

I have written a custom report stylesheet for processing webtest result 
files and have noticed that group nodes receive a stepId of 
'&lt;unknown>' after a previous failure.

Is this expected behaviour?

I have seen previous postings where in the report viewer, these are 
ignored and the stepId of the first child is displayed.

I have taken this route as well but thought it might be worth reporting it.

Additionally, I have patched my local webtest with 
httpunit-1.5.5-d-16Jun.jar and rolled a new version of the 
form/SetCheckbox.java step that allows an individual checkbox to be 
selected or deselected using the 'value', 'name' AND the 'checked' 
attributes when multiple check boxes exist in a page with the same name.

The change is from:

/**
 * Set / reset the particular checkbox.
 * @param _context The current test context
 * @throws StepExecutionException if the checkbox name is not provided
 */
public void doExecute(final Context _context) throws Exception {

  verifyParameters();

  final WebForm form = _context.getFormForField("input", "checkbox", 
getName());
  if (form == null)
    throw new StepFailedException("No form found with checkbox named \"" 
+ getName() + "\"", this);

  if (getValue() == null)
    form.setCheckbox(getName(), isChecked());
  else
    form.setParameter(getName(), new String[] {getValue()});
}

to:

// my set check box
/**
 * Set / reset the particular checkbox.
 * @param _context The current test context
 * @throws StepExecutionException if the checkbox name is not provided
 */
public void doExecute(final Context _context) throws Exception {

  verifyParameters();

  final WebForm form = _context.getFormForField("input", "checkbox",
    getName());
  if (form == null)
    throw new StepFailedException("No form found with checkbox named \""
      + getName() + "\"", this);

  if (getValue() == null) {
    form.setCheckbox(getName(), isChecked());
  } else {
    form.setCheckbox(getName(), getValue(), isChecked());
  }
}

The current implementation does not preserve the multiple values for 
checkboxes with the same name so attempting to check all of them 
individually results in just the last check box being selected.  I have 
not noticed any issues using this newer version of httpunit but note 
that 1.6 has just come out with changes that are likelt to break webtest.

I am happy to share my new stylesheet, it provides a one page view of 
test results using hideable table rows and is very similar to the junit 
report format with some enhancements.

Lastly, we needed a way to detect failures and call ant <fail 
message="WebTest failed" unless="some.property"/>

JUnit and HttpUnit allow for a failure property to be set but I could 
not see how to achieve this in WebTest.

The solution taken was to roll an additional stylesheet that processes 
the result.xml file into an intermediary XML file suitable for loading 
with ant <xmlproperty/>

The result of a set of tests is evaluated into a temporary status file, 
loaded with <xmlproperty/> and the relevant properties investigated 
using ant <fail/>

The stylesheet is simple and I have inlined it below:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"
    xmlns:xalan="http://xml.apache.org/xalan"
    exclude-result-prefixes="xalan">
<xsl:output method="xml" indent="yes" xalan:indent-amount="2"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<webtest>
  <xsl:choose>
    <xsl:when test="count(/summary/testresult[@successful = 'no']) = 0">
      <success>true</success>
    </xsl:when>
    <xsl:otherwise>
      <failure>true</failure>
    </xsl:otherwise>
  </xsl:choose>
</webtest>
</xsl:template>
</xsl:stylesheet>

A sample xml result file might look like:

<?xml version="1.0" encoding="UTF-8"?>
<webtest>
  <failure>true</failure>
</webtest>

Yielding a property of webtest.failure=true after loading using ant 
<xmlproperty/>

I hope this helps and would appreciate some feedback on the unknown 
stepId for failed groups.

Thanks for such a complete product,

Josh