SOAP LoadRunner

From PeformIQ Upgrade
Jump to navigation Jump to search

LoadRunner SOAP Manual Entry

Mercury Virtual User Generator User's Guide > Information for Advanced Users > Programming with the XML API > Enhancing a Recorded Session.

Enhancing a Recorded Session

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:

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>taurus@merc-int.com</FromAddress>"
           "<ToAddress>support@merc-int.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>taurus@merc-int.com</FromAddress>" 
//                                                 "<ToAddress>support@merc-int.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; 

} 


Back to SOAP ...