我们今天开始学习如何使用LoadRunner对Webservice 进行接口测试,一般其实很多不会使用LoadRunner来做接口测试,因为现在市场上接口测试的工具也很多,例如soapui、postman等。但其实LoadRunner同样也可以用来做接口测试。下面我们就详细的介绍使用LoadRunner如何对Webservice进行接口测试。
下面将以http://fy.webxml.com.cn/webservices/EnglishChinese.asmx这个WEB服务为例介绍Webservice接口测试。该系统是一个中英文双向翻译的WEB服务。
一、选择Web Services协议
单击【New Script】按钮,在弹出的【New Virtual User】对话框中,选择Web Services协议,如图15-1所示。
图15-1 选择Web Services协议
二、选择Manage Services管理待测试的服务
在主界面单击【Manage Services】按钮,会弹出一个【Manage Services】对话框,如图15-2所示。在这个对话框中可以选择我们待测试的服务。
图15-2 Manage Services对话框
三、Import Services导入服务
在弹出的【Manage Services】对话框中,单击【Import Service】按钮,会弹出 【Import Service】对话框,如图15-3所示,在该对话框中来设置待测试的服务。
图15-3 Import Service导入服务
导入服务的方式有四种:URL、File、UDDI和Quality Center。但我们一般只会用到两种即URL和File两种,下面我们来阐述一下如何使用URL和File两种方式如何来导入服务。
第一:URL方式
如果选择URL方式时,在下面的文本框中输入WEB服务的URL地址,但需要注意的是必须在后面加上“?wsdl”,如我们测试的服务地址为http://fy.webxml.com.cn/webservices/EnglishChinese.asmx,那么填入到文本框的地址实际上应该为http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl,如图15-4所示。因为我们测试的对象是Web Services的服务,他是一个类似XML格式写一个文件,所以我们在加载服务时,不能写URL地址,一定得在后面加上“?wsdl”,否则添加服务就会失败。
图15-4 URL方式添加WEB服务
第二:File方式
导入服务时也可以使用File方式来导入,如果使用文件导入服务时需要注意,在使用File方式导入服务之前,需求将内容另存为后缀名为“.wsdl”的文件,使用浏览器打开我们要测试的服务(http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl,注意是包含“?wsdl”的这个wsdl的文件),然后再点击另存为,但别存为时一定得注意,另存为后缀名为“.wsdl” 的文件。再在【Import Service】对话框中选择需要导入的文件,如图15-5所示。
图15-5 File方式添加WEB服务
当导入成功后可以在【Operations】标签页中看到该服务所包含的所有方法,如图15-6所示。
图15-6 查看导入成功的方法或操作
这些方法与打开http://fy.webxml.com.cn/webservices/EnglishChinese.asmx这个URL地址所看的方法是一样的,打开该URL地址看的方法,如图15-7所示。
图15-7 查看WEB站点的方法是否与导入的一致
在【Operations】标签页中我们看到每种操作或方法都有两个不同的端口名,分别为:EnglishChinsesSoap和EnglishChinsesSoap12两种,这两种端口名是表示支持Soap协议的两个版本。
四、Add Service Call添加服务调用
导入服务成功后,接下来就得确定要测试的对象,因为每个服务都可能有很多不同的操作,那么我们要测试那个操作呢?这就是这个步骤要做的事情。
单击【Add Service Call】按钮,弹出【New Add Service Call】对话框,如图15-7所示。
图15-7 添加本次要测试的操作或方法
在弹出的【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”,如图15-8所示。当然有人就会说那如果需要参数化怎么做呢?这里可以直接点【ABC】按钮来参数化,后面我们还会来参数如何参数化。
图15-8 设置输入参数
点击【Ouput Arguments】可以设置输出结果的相关信息。选中“Save returned value in param”,在这里可以设置参数名,这个参数化可以随便设置,用于保存输出结果,如图15-9所示。这个参数主要用于保存该操作的返回值,就相当于函数的返回值一样。
图15-9 设置输出参数
设置完成后,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);
五、调试脚本
在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 Settings\Administrator\Local Settings\Temp\noname120\\default.cfg"
Vuser directory: "C:\Documents and Settings\Administrator\Local Settings\Temp\noname120"
Vuser output directory: "C:\Documents and Settings\Administrator\Local Settings\Temp\noname120\"
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 = hello'hel?u, he'l?uint.(见面打招呼或打电话用语)喂,哈罗1059.mp3".
Action.c(3): Notify: Saving Parameter "response = hello'hel蓹u, he'l蓹uint.锛堣闈㈡墦鎷涘懠鎴栨墦鐢佃瘽鐢ㄨ锛夊杺,鍝堢綏1059.mp3".
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的系统中进行手工测试,进入这个http://fy.webxml.com.cn/webservices/EnglishChinese.asmx地址单击TranslatorString操作,输入要测试的关键“Hello”,然后点“调用”就可以看到结果了,如果两次结果一样说明,测试的结果是正确的。
六、增强脚本
脚本调试没问题后,应该对脚本进行增强,那么这里增强脚本有两个方面要处理:一是参数化;二是设置检查点;
关于参数化在这里就不详细介绍了,在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;
脚本增强完成后,那么这个脚本就可以算是开发好了。
附:川石信息全国校区最新开班时间,课程资料获取13691729932(微信同号)。