Enhance a recorded session with XML
You can prepare an XML script by recording a session and then manually adding the relevant XML and Vuser API functions.
The following example illustrates how a recorded session was enhanced with Vuser API functions. Note that the only function that was recorded was web_submit_data, which appears in bold.
The first section contains the XML input declaration of the variable SOAPTemplate, for a SOAP message:
#include "as_web.h" // SOAP message const char* pSoapTemplate= "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" "<soap:Body>" "<SendMail xmlns=\"urn:EmailIPortTypeInft-IEmailService\"/>" "</soap:Body>" "</soap:Envelope>";
The following section represents the actions of the user:
Example:
Action1() { // get response body web_reg_save_param("ParamXml", "LB=", "RB=", "Search=body", LAST); // fetch weather by HTTP GET web_submit_data("GetWeather","Action=http://glkev.net.innerhost.com/glkev_ws/
WeatherFetcher.asmx/GetWeather", "Method=GET", "EncType=", "RecContentType=text/xml", "Referer=http://glkev.net.innerhost.com/glkev_ws/WeatherFetcher.asmx?op=GetWeather", "Snapshot=t2.inf", "Mode=HTTP", ITEMDATA, "Name=zipCode", "Value=10010", ENDITEM, LAST);
// Get City value lr_xml_get_values("Xml={ParamXml}", "Query=City", "ValueParam=ParamCity", LAST ); lr_output_message(lr_eval_string("***** City = {ParamCity} *****"));
//Get State value lr_xml_get_values("Xml={ParamXml}", "Query=State", "ValueParam=ParamState", LAST ); lr_output_message(lr_eval_string("***** State ={ParamState}*****"));
// Get several values at once by using template
lr_xml_get_values_ex("Xml={ParamXml}",
"Template="
"<Weather>"
"<Time>{ParamTime}</Time>"
"<Temperature>{ParamTemp}</Temperature>"
"<Humidity>{ParamHumid}</Humidity>"
"<Conditions>{ParamCond}</Conditions>"
"</Weather>",
LAST
);
lr_output_message(lr_eval_string("***** Time = {ParamTime},
Temperature = {ParamTemp}, "
"Humidity = {ParamHumid},
Conditions = {ParamCond} *****"));
//Generate readable forecast
lr_save_string(lr_eval_string("\r\n\r\n*** Weather Forecast for {ParamCity},
{ParamState} ***\r\n"
"\tTime: {ParamTime}\r\n"
"\tTemperature: {ParamTemp} deg. Fahrenheit\r\n"
"\tHumidity: {ParamHumid}\r\n"
"\t{ParamCond} conditions expected\r\n"
"\r\n"),
"ParamForecast"
);
// Save soap template into parameter
lr_save_string(pSoapTemplate, "ParamSoap");
// Insert request body into SOAP template lr_xml_insert("Xml={ParamSoap}", "ResultParam=ParamRequest", "Query=Body/SendMail", "position=child", "XmlFragment=" "<FromAddress>john1@mydomain.com</FromAddress>" "<ToAddress>softwaresupport@mydomain.com</ToAddress>" "<ASubject>Weather Forecast</ASubject>" "<MsgBody/>",
LAST); "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" "<soap:Body>""<SendMail xmlns=\"urn:EmailIPortTypeInft-IEmailService\"/>""<FromAddress>john1@mydomain.com</FromAddress>" "<ToAddress>softwaresupport@mydomain.com</ToAddress>" "<ASubject>Weather Forecast</ASubject>" "<MsgBody/>" "</SendMail>" "</soap:Body>""</soap:Envelope>";
// Insert actual forecast text lr_xml_set_values("Xml={ParamRequest}", "ResultParam=ParamRequest", "Query=Body/SendMail/MsgBody", "ValueParam=ParamForecast", LAST);
// Add header for SOAP
web_add_header("SOAPAction", "urn:EmailIPortTypeInft-IEmailService");
// Get response body
web_reg_save_param("ParamXml", "LB=", "RB=", "Search=body", LAST);
// Send forecast to recipient, using SOAP request
web_custom_request("web_custom_request",
"URL=http://webservices.matlus.com/scripts/emailwebservice.dll/soap
/IEmailservice",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body={ParamRequest}",
LAST);
// Verify that mail was sent
lr_xml_find("Xml={ParamXml}",
"Query=Body/SendMailResponse/return",
"Value=0",
LAST);
return 0;
}