前面我们简单的介绍了关于WSDL协议,现在我们开始学习如何使用LoadRunner对Webservice 进行介面测试,一般其实很多不会使用LoadRunner来做介面测试,因为现在市场上介面测试的工具也很多,例如soapui、postman等。但其实LoadRunner同样也可以用来做介面测试。下面我们就详细的介绍使用LoadRunner如何对Webservice进行介面测试。

下面将以fy.webxml.com.cn/webser这个WEB服务为例介绍Webservice介面测试。该系统是一个中英文双向翻译的WEB服务。

15.2.1选择Web Services协议

单击【New Script】按钮,在弹出的【New Virtual User】对话框中,选择Web Services协议,如图所示。

15.2.2选择Manage Services管理待测试的服务

在主界面单击【Manage Services】按钮,会弹出一个【Manage Services】对话框,如图所示。在这个对话框中可以选择我们待测试的服务。

15.2.3Import Services导入服务

在弹出的【Manage Services】对话框中,单击【Import Service】按钮,会弹出 【Import Service】对话框,如图所示,在该对话框中来设置待测试的服务。

导入服务的方式有四种:URL、File、UDDI和Quality Center。但我们一般只会用到两种即URL和File两种,下面我们来阐述一下如何使用URL和File两种方式如何来导入服务。

第一:URL方式

如果选择URL方式时,在下面的文本框中输入WEB服务的URL地址,但需要注意的是必须在后面加上「?wsdl」,如我们测试的服务地址为fy.webxml.com.cn/webser,那么填入到文本框的地址实际上应该为fy.webxml.com.cn/webser,如图所示。因为我们测试的对象是Web Services的服务,他是一个类似XML格式写一个文件,所以我们在载入服务时,不能写URL地址,一定得在后面加上「?wsdl」,否则添加服务就会失败。

第二:File方式

导入服务时也可以使用File方式来导入,如果使用文件导入服务时需要注意,在使用File方式导入服务之前,需求将内容另存为后缀名为「.wsdl」的文件,使用浏览器打开我们要测试的服务(fy.webxml.com.cn/webser,注意是包含「?wsdl」的这个wsdl的文件),然后再点击另存为,但别存为时一定得注意,另存为后缀名为「.wsdl」 的文件。再在【Import Service】对话框中选择需要导入的文件,如图所示。

当导入成功后可以在【Operations】标签页中看到该服务所包含的所有方法,如图所示。

这些方法与打开http://fy.webxml.com.cn/webservices/EnglishChinese.asmx这个URL地址所看的方法是一样的,打开该URL地址看的方法,如图所示。

在【Operations】标签页中我们看到每种操作或方法都有两个不同的埠名,分别为:EnglishChinsesSoap和EnglishChinsesSoap12两种,这两种埠名是表示支持Soap协议的两个版本。

15.2.4Add Service Call添加服务调用

导入服务成功后,接下来就得确定要测试的对象,因为每个服务都可能有很多不同的操作,那么我们要测试那个操作呢?这就是这个步骤要做的事情。

单击【Add Service Call】按钮,弹出【New Add Service Call】对话框,如图所示。

在弹出的【New Add Service Call】对话框中,有以下几个选项需要注意:

Service:表示Web Services的伺服器名。

Port Name:表示埠名。

Operation:表示操作或方法名,即该Web Services所包含的方法或操作名,也是做介面测试时待测试的对象。在这个下拉列表框中选择我们要测试的方法或操作。

以测试TranslatorString操作为例,得在Operation下拉列表框中选择TranslatorString操作。该操作是中英文双向翻译(基本)String(),输入参数:wordKey = 单词; 返回数据:一维字元串数组 String[]。

选中操作之后,可以在左边看到该操作输入和输出的相关数据,当然还有可以设置SOAP Header,但一般我们只要设置输入和输出参数即可。

输入的参数就是该操作在调用过程中所需要输入的实参,所谓介面测试其本身就是测试该操作与外界打交道的内容,这就相当于函数,一个函数与外界打交道的只有输入时的实参和输出的结果,并没有其它的内容,所以输入的参数就相当于函数调用中的实参,其意思是一样的。点击【Input Arguments】就可以看到需要输入的参数情况,在这个实例中只需要输入一个参数(关于到底需求多少个参数,这完全取决于在函数定义时所需要输入的形参个数),形参名叫「wordKey」,选中「Include argument in」选项,在下面选择「Value」选项,在该文本框中输入测试时具体的实参,这里我们以输入「Hello为例,即测试的数据为「Heloo」,如图所示。当然有人就会说那如果需要参数化怎么做呢?这里可以直接点【ABC】按钮来参数化,后面我们还会来参数如何参数化。

点击【Ouput Arguments】可以设置输出结果的相关信息。选中「Save returned value in param」,在这里可以设置参数名,这个参数化可以随便设置,用于保存输出结果,如图所示。这个参数主要用于保存该操作的返回值,就相当于函数的返回值一样。

设置完成后,LoadRunner会生成一段代码插入在Action部分,代码如下:

web_service_call( "StepName=TranslatorString_102",

"SOAPMethod=EnglishChinese|EnglishChineseSoap|TranslatorString",

"ResponseParam=response",

"Service=EnglishChinese",

"ExpectedResponse=SoapResult",

"Snapshot=t1525517692.inf",

BEGIN_ARGUMENTS,

"wordKey=Hello",

END_ARGUMENTS,

BEGIN_RESULT,

"TranslatorStringResult/*[1]=Param_string",

END_RESULT,

LAST);

15.2.5调试脚本

在Action里面其实只生成了一个函数(web_service_call),其实我们对 Web Services进行介面测试时,只是通过这个函数来发送请求的,也就是说如果对这个函数很熟悉的话,根本就不会上面几个步骤来折腾,可以直接写web_service_call这个函数来达到目的。

当代码生成后,接下来就得调试代码,检查结果是否正确,在调试代码之前,需要先在【Run-time Settings】对话框中设置一下「Log」的属性,需要将日志文件的格式设置为「Extended log->Parameter substitution」,这样可以在回放日志的地方将参数提交相关的日志都可以列印出来,设置好日志格式之后就可以回放脚本。回放后的日志文件内容如下:

Virtual User Script started at : 2018-05-05 19:11:43

Starting action vuser_init.

Web Services replay version 11.0.0 for WINXP; Toolkit: ".Net"; build 8859

Run-Time Settings file: "C:Documents and SettingsAdministratorLocal SettingsTemp
oname120\default.cfg"

Vuser directory: "C:Documents and SettingsAdministratorLocal SettingsTemp
oname120"

Vuser output directory: "C:Documents and SettingsAdministratorLocal SettingsTemp
oname120"

LOCAL start date/time: 2018-05-05 19:11:43

Ending action vuser_init.

Running Vuser...

Starting iteration 1.

Starting action Action.

Action.c(3): Web service call "TranslatorString_102" started

Action.c(3): Notify: Saving Parameter "TranslatorString_102_Response = <TranslatorString><TranslatorStringResult><string>hello</string><string>hel?u, hel?u</string><string></string><string>int.(见面打招呼或打电话用语)喂,哈罗</string><string>1059.mp3</string></TranslatorStringResult></TranslatorString>".

Action.c(3): Notify: Saving Parameter "response = <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="schemas.xmlsoap.org/soa" xmlns:xsi="w3.org/2001/XMLSchema-i" xmlns:xsd="w3.org/2001/XMLSchema"><soap:Body><TranslatorStringResponse xmlns="WebXml.com.cn/"><TranslatorStringResult><string>hello</string><string>hel蓹u, hel蓹u</string><string /><string>int.锛堣闱㈡墦𨰾涘懠鎴栨墦鐢佃瘽鐢ㄨ锛夊杺,鍝堢绥</string><string>1059.mp3</string></TranslatorStringResult></TranslatorStringResponse></soap:Body></soap:Envelope>".

Action.c(3): Notify: Saving Parameter "Param_string = hello".

Action.c(3): Web service call "TranslatorString_102" was successful

Ending action Action.

Ending iteration 1.

Ending Vuser...

Starting action vuser_end.

Ending action vuser_end.

Vuser Terminated.

查看回放日志时,需要检查TranslatorString_102_Response、response和Param_string这三个参数的值是否正确,那么如何判断这三个参数返回出来的值是否正确呢?可以进入Web Service的系统中进行手工测试,进入这个fy.webxml.com.cn/webser地址单击TranslatorString操作,输入要测试的关键「Hello」,然后点「调用」就可以看到结果了,如果两次结果一样说明,测试的结果是正确的。

15.2.6增强脚本

脚本调试没问题后,应该对脚本进行增强,那么这里增强脚本有两个方面要处理:一是参数化;二是设置检查点;

关于参数化在这里就不详细介绍了,在6.3章节中对如何参数化进了详细的介绍,那么Web Service脚本的参数化和6.3章节中讲的策略是一致的。

脚本检查点是必须的,一般情况每个脚本都会设置相对应的检查点,用于检查脚本运行结果的正确性。在之前的章节中会使用web_reg_find函数来检查内容是否正确,但在这个脚本中不需要使用web_reg_find这个函数来检查,因为待检查的内容就在上面所讲的那几个参数中,不用到缓存中去查询我们需要的结果,也即待检查的内容就在一个变数中,所以这个时候只要比较变数中的值是不是我们需要的,所以在这里使用strstr函数来检查就可以。

strstr(str1,str2) 函数用于判断字元串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

增强后的脚本代码如下:

web_service_call( "StepName=TranslatorString_101",

"SOAPMethod=EnglishChinese|EnglishChineseSoap|TranslatorString",

"ResponseParam=response",

"Service=EnglishChinese",

"ExpectedResponse=SoapResult",

"Snapshot=t1523427287.inf",

BEGIN_ARGUMENTS,

"wordKey={keyword}",

END_ARGUMENTS,

BEGIN_RESULT,

"TranslatorStringResult/*[1]=Param_translator",

END_RESULT,

LAST);

if(strstr(lr_eval_string("{Param_translator}"),lr_eval_string("{keyword}")) == NULL)

{

lr_error_message("FAIL");

}

else

{

lr_error_message("PASS");

}

return 0;

脚本增强完成后,那么这个脚本就可以算是开发好了。


推荐阅读:
相关文章