BMC Remedy IT Service Management Support

The workflow for testing BMC Remedy IT Service Management with Silk Performer is the same as the workflow for testing Web-based applications, with the following exceptions:

BMC Tutorial

BMC has created an excellent tutorial that illustrates how to load test BMC Remedy IT Service Management (ITSM) applications with BMC Remedy Action Request System (AR System). To obtain the tutorial, contact BMC and request the following white paper: Performance Benchmarking Kit: Using Incident Management with Silk Performer .

Licensing

A premium virtual user license is required to test Remedy with Silk Performer.

TrueLog Support

TrueLog functionality is not supported for Remedy testing.

Data Representation in Silk Performer

Remedy uses a proprietary format for data that is sent from the client to the server. This format includes length prefixes and makes customization difficult.

For example:

157/GetTableEntryList/11/smi-web-00126/
SMI:TEL35:SHR:AgentConsole12/Windows_View9/53687098211/
smi-web-00127/SMI:TEL35:SYS:IncomingEmail0/
1/01/02/0/0/2/0/2/0/2/0/

Such data is sent in HTTP requests to the URL http://<hostname>/arsys/BackChannel.

Remedy versions 6.3 patch level 2 and earlier send such data in the body of HTTP POST requests. Versions 6.3 and later send such data in the query string of HTTP GET requests.

The main benefit of Silk Performer’s Remedy add-on is that this proprietary data format is translated into an XML-based representation that eliminates the length prefixes and introduces names to the individual data items. This makes scripts easier to understand and customize. During script replay, this XML-based format is transparently translated back into the original format.

This backward transformation is performed by the functions WebRemedyBackChannelUrl and WebRemedyBackChannelPost.

WebRemedyBackChannelUrl is a replacement for the function WebPageUrl, while WebRemedyBackChannelPost is a replacement for the function WebPagePost.

For example, without the Remedy add-on the following API call would be recorded as:

WebPagePost("http://213.131.176.85/arsys/BackChannel",
	"157/GetTableEntryList/11/smi-web-00126/
SMI:TEL35:SHR:AgentConsole12/W"
	"indows_View9/53687098211/smi-web-00127/
SMI:TEL35:SYS:IncomingEmail0/1"
	"/01/02/0/0/2/0/2/0/2/0/",
	STRING_COMPLETE,
	"text/plain; charset=UTF-8",
	"arsys/BackChannel");

With the Remedy add-on the API call is recorded as follows:

WebRemedyBackChannelPost("http://213.131.176.85/arsys/BackChannel",
"<?xml version='1.0'?>\r\n"
"<SegueRemedyXml 
operation=\"GetTableEntryList\">\r\n"
"  <string name=\"table_server\">smi-web-001</string>\r\n"
"  <string name=\"table_schema\">SMI:TEL35:SHR:AgentConsole</string>\r\n"
"  <string name=\"table_vui_name\">Windows_View</string>\r\n"
"  <long name=\"table_field_id\">536870982</long>\r\n"
      "  <string name=\"server\">smi-web-001</string>\r\n"
"  <string name=\"schema\">SMI:TEL35:SYS:IncomingEmail</string>\r\n"
      "  <string name=\"app_name\"></string>\r\n"
      "  <long name=\"start_row\">0</long>\r\n"
      "  <long name=\"num_rows\">0</long>\r\n"
"  <Array name=\"sort_order\"></Array>\r\n"
      "  <string name=\"qualification\"></string>\r\n"
"  <Array name=\"qual_field_ids\"></Array>\r\n"
      "  <Array name=\"qual_field_values\"></Array>\r\n"
      "  <Array name=\"qual_field_types\"></Array>\r\n"
"</SegueRemedyXml>",
      STRING_COMPLETE,
"text/plain; charset=UTF-8",
      "BackChannel - GetTableEntryList");

The key differences are:

  • Use of the function WebRemedyBackChannelPost instead of WebPagePost.
  • Data is in XML format instead of the original format.
  • XML format does not contain length prefixes, which would otherwise have to be considered during script customization.
  • XML format specifies data type and meaningful names for each data item.

Additional Remedy Add-On Benefits

In addition to the different representation of the data there are other benefits to using the Remedy add-on:

  • Remedy.bdh: A bdh file that implements the functions WebRemedyBackChannelPost, WebRemedyBackChannelUrl and WebRemedyInit.
  • The recorder places a call to the function WebRemedyInit() in the TInit transaction.
  • The function WebRemedyInit() installs verifications to catch application-level errors.
  • The recorder detects all timestamps which would otherwise be hard coded into the script, and records the function GetTimeStamp() instead.
  • The recorder records parsing functions for IDs of newly created entities and appropriate substitutions for all occurrences of such IDs in the script with the parsed variable.

Remedy SilkEssential

The Remedy application type is triggered through a SilkEssential package. It contains a set of recording rules and a remedy.bdh. The remedy.bdh wraps the WebPageCalls:

// wrapper function for WebPagePost
// param nDataLength will be ignored
function WebRemedyBackChannelPost(sUrl        : string;
                                  sData       : string;
                                  nDataLength : number optional;
                                  sContent    : string optional;
                                  sTimer      : string optional;
                                  formUrl     : form optional) : boolean <API_FUNCTION>
  begin
    WebRemedyBackChannelPost := WebPagePost(sUrl, RemedyBackChannelData(sData),
    STRING_COMPLETE, sContent, sTimer, formUrl);
  end WebRemedyBackChannelPost;

and

// wrapper function for WebPageUrl for use with BackChannel requests
  function WebRemedyBackChannelUrl(sUrl :    string;
                                   sTimer :  string optional;
formUrl : form optional) : boolean <API_FUNCTION>
  var
sXmlData : string(100000);
sDummy   : string;
begin
WebFormExpand(formUrl, sDummy, 1, true);
WebFormValueGet(formUrl, sXmlData, sizeof(sXmlData), "param");
WebFormValueSet(ARSYS_BACKCHANNEL_INTERNAL_HELPER, "param", RemedyBackChannelData(sXmlData));
WebRemedyBackChannelUrl := WebPageUrl(sUrl, sTimer, ARSYS_BACKCHANNEL_INTERNAL_HELPER);
end WebRemedyBackChannelUrl;
dclform
ARSYS_BACKCHANNEL_INTERNAL_HELPER <ENCODE_URICOMPONENT> :
    "param"                     := "";

Protocol Detection and Conversion

Remedy protocol detection is not available by default. However, it is already built into the Silk Performer recorder and is enabled by choosing the appropriate Remedy application type when creating a new project.

The Remedy data conversion into XML and back out of XML is implemented in the ProxyEngine for recording and in the perfRemedy.dll, which is loaded into the perfRun by the Remedy.bdh.