9 messages in com.canoo.lists.webtestRe: [Webtest] Reading values from an ...
FromSent OnAttachments
Matt Raible06 Oct 2003 07:49 
Marc Guillemot06 Oct 2003 08:57 
Christian Sell06 Oct 2003 09:15 
Matt Raible06 Oct 2003 09:56 
Matt Raible06 Oct 2003 13:11 
Marc Guillemot07 Oct 2003 01:27 
Matt Raible07 Oct 2003 15:44 
Matt Raible08 Oct 2003 11:38 
Matt Raible08 Oct 2003 12:28 
Subject:Re: [Webtest] Reading values from an XML File
From:Matt Raible (ma@raibledesigns.com)
Date:10/08/2003 12:28:03 PM
List:com.canoo.lists.webtest

The #{count} value is 0, I'm not setting it. I tried removing the <repeat> wrappers and putting in "1" and this worked. Is it possible to increment the "repeat" variable by 1?

Thanks,

Matt

On Wednesday, October 8, 2003, at 01:11 PM, Daniel Potter wrote:

I believe Xpath indeces begin at 1 (instead of 0). Try //Menus/Menu[1]/@page instead. That should match the xml you listed below.

Daniel

On Wed, Oct 08, 2003 at 12:38:19PM -0600, Matt Raible wrote:

I'm trying to implement this - exactly as you have below - and I'm getting a StackOverFlow on super.execute();

public void doExecute(final Context context) throws Exception { super.execute(context);

I tried removing it, and it seems to run, but now I get:

No match for xpath expression <//Menus/Menu[0]/@page>

My menu-config.xml looks like this:

<MenuConfig><Menus><Menu name="" page=""/></Menus></MenuConfig>

Thanks,

Matt

On Tuesday, October 7, 2003, at 09:34 PM, Daniel Potter wrote:

Matt, Here is the code for a custom WebTest step that would do what I mentioned in my previous email (I didn't try to compile it, but it should work). Just drop it in the src/com/canoo/webtest/extension directory, run WebTest's "clean_compile" target, and add it to the webtestTaskdefs.properties file.

Then use it in your script like this:

<target name="displayMenus"> <testSpec name=""> <config ... /> <steps> <loadXml file="${basedir}/defaultroot/WEB-INF/menu-config.xml"/> <repeat count="<-- insert number of menus -->"> <storexpath xpath="//Item[#{count}]/@page" property="page" /> <invoke url="#{page}"/> </repeat> ... </steps> </testSpec> </target>

Unfortunately, this requires you to know the number of menu items in your xml file and hardcode it in the script. You could modify the code below to use an xml api to determine the number of items in the file and set it as a WebTest dynamic property (using the Step class's setDynamicProperty() method) to get around this.

Hope that helps. Good luck!

Daniel

========================= package com.canoo.webtest.extension;

import java.net.HttpURLConnection; import java.net.URL; import java.io.*; import java.util.HashMap; import java.util.Map;

import com.canoo.webtest.engine.Context; import com.canoo.webtest.engine.StepExecutionException; import com.canoo.webtest.self.WebResponseStub; import com.canoo.webtest.steps.Step; import com.meterware.httpunit.WebResponse;

/** * Custom WebTest (webtest.canoo.com) step that reads an XML file and uses * the result to set WebTest's last response so that the standard WebTest * tasks can be used to validate and/or utilize the contents of the message. */ public class LoadXmlStep extends Step {

private static String DUMMY_URL = "http://dummyurl"; private static String FILE = "file";

private String file;

public LoadXmlStep() { super(); }

public void doExecute(final Context context) throws Exception { super.doExecute(context); verifyParameters();

String line = null; StringBuffer xml = new StringBuffer(); BufferedReader reader = new BufferedReader( new FileReader(file)); while ((line = reader.readLine()) != null) { sb.append(line); } reader.close();

WebResponse response = new XmlWebResponseStub( xml.toString(), new URL(DUMMY_URL), HttpURLConnection.HTTP_OK); context.setLastResponse(response); }

protected void verifyParameters() { if (file == null) { throw new StepExecutionException( "Required parameter " + FILE + " not set!"); } }

public void expandProperties() { super.expandProperties(); file = expandDynamicProperties(file); }

public Map getParameterDictionary() { Map map = new HashMap(); map.put(FILE, file); return map; }

public void setFile(String file) { this.file = file; }

}

/** * Stub for web responses containing XML. Overrides default HTML content-type * that's hardcoded in WebResponseStub superclass and sets it to indicate XML * content. */ class XmlWebResponseStub extends WebResponseStub {

public static final String CONTENT_TYPE_HEADER = "Content-type"; public static final String XML_CONTENT_TYPE = "application/xml; charset=utf-8";

/** * Constructor for XmlWebResponseStub. * @param content String containing the XML content of the web response * @param url URL associated with the original request (can be a dummy URL * since this is just a stub and not the result of a real web request) * @param returnCode HTTP status/error code */ public XmlWebResponseStub(String content, URL url, int returnCode) { super(content, url, returnCode); Map headers = getHeaders(); headers.put(CONTENT_TYPE_HEADER, XML_CONTENT_TYPE); } } ============================

------------------------------------------------- This mail sent through IMP: http://horde.org/imp/