![]() |
Testing web services with TestComplete is obsolete. We recommend that you use ReadyAPI, another SmartBear's automated testing tool for SOAP and REST web services. If needed, you can run ReadyAPI tests from TestComplete. |
A web service method may use out or in/out parameters. Testing these methods have the following specifics:
-
In WSDL terms, the return value of a function is a parameter of the
outtype. So, in WSDL terms, the method that returns a value and uses one or moreout(orin/out) parameters is treated as a method that has two (or more)outparameters. From the WSDL information it is impossible to determine which of these parameters should be treated as a return value and which should be treated as a parameter.To work around the problem, TestComplete considers these methods as routines that do not return any value. These procedures contain all the method parameters plus one more
outparameter that corresponds to the method’s result value. The name of this parameter contains the method’s name and the word Result. For instance, the following C# method --C#
public bool MyTestMethod(int Param1, int Param2, out int ParamA, out int ParamB, out int ParamC)
-- will be treated as --
JavaScript, JScript
function MyTestMethod(int Param1, int Param2, bool MyTestMethodResult, int ParamA, int ParamB, int ParamC);
Python
def MyTestMethod(Param1: int, Param2: int, MyTestMethodResult: bool, ParamA: int, ParamB: int, ParamC: int);
VBScript
Sub MyTestMethod(Param1 as Integer, Param2 as Integer, MyTestMethodResult as WordBool, ParamA as Integer, ParamB as Integer, ParamC as Integer)
DelphiScript
procedure MyTestMethod(Param1 : Integer; Param2 : Integer; MyTestMethodResult : WordBool; ParamA : Integer; ParamB : Integer; ParamC : Integer);
C++Script, C#Script
function MyTestMethod(int Param1, int Param2, bool MyTestMethodResult, int ParamA, int ParamB, int ParamC);
Pay special attention to the MyTestMethodResult parameter. It corresponds to the method’s return value (method name + Result). This parameter does not exist in C# syntax. TestComplete adds it since the method uses out parameters.
If a method does not return any value and uses one out parameter, TestComplete will treat this method as a function and will treat the parameter as the function’s return value.
-
You call web services’ methods that use
outparameters in the same manner as you call ordinary methods. After a call, you can check the values assigned to theoutparameters.Note, however, that JScript, Python, C++Script and C#Script do not support
outparameters, so to obtain the values returned in these parameters, you should parse the web services response.To obtain scripting access to the response’s contents, you can use the
LastResponseproperty of theWebServiceobject that corresponds to the tested web service. This property returns an object that implements theIXMLDOMDocumentinterface and that corresponds to the SOAP response’s data (SOAP uses XML and the response contents match the Microsoft XML DOM model).You can use methods and properties of the
IXMLDOMDocumentobject to parse the response’s data and to obtain the values of theoutparameters. However, this approach requires you to know the names of the elements holding the parameters’ values and the elements structure.To simplify access to parameters, use the
CreateWebServiceInfoFromItemmethod of theWebServicesobject and theWebServiceInfoobject returned by this method. The following example demonstrates how you can use these methods and objects to get easy access to parameter values:JavaScript, JScript
function Test()
{
var a, b, c, r;
var wsiObj, respObj;
// Call the method
WebServices.WebService1.MyTestMethod(2, 3, r, a, b, c);
// After the call the r, a, b and c variables will not contain any values,
// since JScript does not support out parameters
// Obtain the WebServiceInfo object
wsiObj = WebServices.CreateWebServiceInfoFromItem("WebService1");
// Parse the response
respObj = wsiObj.ParseResponse("MyTestMethod", WebServices.WebService1.LastResponse);
// Post the result value and out parameters to the log
Log.Message(aqConvert.VarToStr(respObj.MyTestMethodResult)); // Result value
Log.Message(aqConvert.VarToStr(respObj.ParamA)); // ParamA parameter
Log.Message(aqConvert.VarToStr(respObj.ParamB)); // ParamB parameter
Log.Message(aqConvert.VarToStr(respObj.ParamC)); // ParamC parameter
}Python
def Test(): # Call the method WebServices.WebService1.MyTestMethod(2, 3, r, a, b, c); # After the call the r, a, b and c variables will not contain any values, # since Python does not support out parameters # Obtain the WebServiceInfo object wsiObj = WebServices.CreateWebServiceInfoFromItem("WebService1"); # Parse the response respObj = wsiObj.ParseResponse("MyTestMethod", WebServices.WebService1.LastResponse); # Post the result value and out parameters to the log Log.Message(aqConvert.VarToStr(respObj.MyTestMethodResult)); # Result value Log.Message(aqConvert.VarToStr(respObj.ParamA)); # ParamA parameter Log.Message(aqConvert.VarToStr(respObj.ParamB)); # ParamB parameter Log.Message(aqConvert.VarToStr(respObj.ParamC)); # ParamC parameterVBScript
' VBScript supports out parameters,
' so there is no need to use specific objects
' or methods to obtain their values.DelphiScript
{ DelphiScript supports out parameters,
so there is no need to use specific objects
or methods to obtain their values.}C++Script, C#Script
function Test()
{
var a, b, c, r;
var wsiObj, respObj;
// Call the method
WebServices["WebService1"]["MyTestMethod"](2, 3, r, a, b, c);
// After the call the r, a, b and c variables will not contain any values,
// since C++Script and C#Script do not support out parameters
// Obtain the WebServiceInfo object
wsiObj = WebServices["CreateWebServiceInfoFromItem"]("WebService1");
// Parse the response
respObj = wsiObj["ParseResponse"]("MyTestMethod", WebServices["WebService1"]["LastResponse"]);
// Post the result value and out parameters to the log
Log["Message"](aqConvert["VarToStr"](respObj["MyTestMethodResult"])); // Result value
Log["Message"](aqConvert["VarToStr"](respObj["ParamA"])); // ParamA parameter
Log["Message"](aqConvert["VarToStr"](respObj["ParamB"])); // ParamB parameter
Log["Message"](aqConvert["VarToStr"](respObj["ParamC"])); // ParamC parameter
}Note: In order for TestComplete to be able to parse the response contents correctly, the WSDL information stored in the WebService project element must match the actual WSDL data of the tested web service. If the stored and actual information differs (for instance, if the stored parameter names differ from the actual parameter names), the parsing will work incorrectly. To update the stored WSDL information, open the WebService editor and press Refresh in it. -
When a web service’s method returns an array, this array has the format of a Visual Basic safe array. In order to use such an array in JScript, C#Script or C++Script, you need to convert the array to a standard JScript array by using the
toArraymethod of the variant array:JScript, C#Script, C++Script
//Convert the variant array to the JScript array format
var MyArray = VariantArray.toArray();
//Iterate through array elements
for(var i = 0; i < MyArray.length; i++)
{
Log.Message(MyArray[i]);
}
See Also
Creating Web Service Tests
About Testing Web Services
About Testing Web Services

