图解LoadRunner实现SOAP接口性能测试

一. 前期准备

SOAP的性能测试使用web services脚本协议。因此,我们要有LoadRunner相应的License。

如果需要添加License,其添加步骤如下:

1. 打开LoadRunner,点击上方“配置”-->“LoadRunner 许可证”:

图1.1

2. 点击“新许可证”,输入相应的License:

图1.2

二. 创建测试脚本

有了web services 的许可,我们就可以开始创建测试脚本了。

1. 打开LoadRunner,点击“创建/编辑脚本”:

图2.1

2. 点击“新建 Vuser 脚本”:

图2.2

3. 选择“新建单脚本”-->“web services”,确定:

图2.3

4. 选择Action。在此处编辑虚拟用户的一些动作脚本:

图2.4

5. 在Action方法里输入动作脚本,其格式如下。Web_add_header添加SOAP消息头信息,soap_reques为发送报文主体:

图2.5

6. LR内,某SOAP请求消息脚本格式如下:

  1. Action()  
  2. {  
  3. int count;  
  4.   
  5. lr_start_transaction("oneSoapOrder");  
  6.   
  7. web_add_header("SOAPAction","");  
  8.   
  9. soap_request("StepName=createSoapOrder",  
  10. "URL=http://192.168.101.1:8080/MySoapProj/services/SoapService",  
  11. "SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GB2312\"?>"  
  12. "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
  13.   "<soapenv:Header>"  
  14.      "<Security>"  
  15.        "<UsernameToken>"  
  16.            "<Username>username</Username>"  
  17.            "<Password>password</Password>"  
  18.        "</UsernameToken>"  
  19.      "</Security>"  
  20.   "</soapenv:Header>"  
  21.   "<soapenv:Body>"  
  22.   "<msg:createSoapOrder>"  
  23.      "<msg:SoapOrder>"  
  24.         "<id>987600001</id>"  
  25.      "</msg:businessGroup>"  
  26.   "</msg:createSoapOrder>"  
  27. "</soapenv:Body></soapenv:Envelope>",  
  28. "ResponseParam=response",  
  29. LAST);  
  30.   
  31. count = lr_xml_find("XML={response}",  
  32. "Query=/Envelope/Body/createSoapOrderResponse/resultcode/value",  
  33. "Value=0",  
  34. "NotFound=continue",  
  35. LAST);  
  36.   
  37. if(count > 0){  
  38. lr_end_transaction("oneSoapOrder",LR_PASS);  
  39. }  
  40. else{  
  41. lr_end_transaction("oneSoapOrder",LR_FAIL);  
  42. }  
  43. return 0;  
  44. }  
Action()
{
int count;

lr_start_transaction("oneSoapOrder");

web_add_header("SOAPAction","");

soap_request("StepName=createSoapOrder",
"URL=http://192.168.101.1:8080/MySoapProj/services/SoapService",
"SOAPEnvelope=<?xml version=\"1.0\" encoding=\"GB2312\"?>"
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
  "<soapenv:Header>"
     "<Security>"
       "<UsernameToken>"
           "<Username>username</Username>"
           "<Password>password</Password>"
       "</UsernameToken>"
     "</Security>"
  "</soapenv:Header>"
  "<soapenv:Body>"
  "<msg:createSoapOrder>"
     "<msg:SoapOrder>"
        "<id>987600001</id>"
     "</msg:businessGroup>"
  "</msg:createSoapOrder>"
"</soapenv:Body></soapenv:Envelope>",
"ResponseParam=response",
LAST);

count = lr_xml_find("XML={response}",
"Query=/Envelope/Body/createSoapOrderResponse/resultcode/value",
"Value=0",
"NotFound=continue",
LAST);

if(count > 0){
lr_end_transaction("oneSoapOrder",LR_PASS);
}
else{
lr_end_transaction("oneSoapOrder",LR_FAIL);
}
return 0;
}

这里需要注意:

1) 报文中节点的域名,最好不要变动;

2) SOAP的URL需要根据实际情况修改;

3) 在一个方法中的某个参数,如果太长,需要换行,则每行单独用双引号括起来;

4) lr_start_transaction("oneSoapOrder");方法,是创建一个名为oneSoapOrder的事务。该事务的结束,由lr_end_sub_transaction方法实现;

5) soap_request方法中的"ResponseParam=response"参数,是将SOAP返回报文存放到response中;

6) lr_xml_find方法是查找xml文件中某个指定节点的值。此例中,XML文件存放在response的SOAP响应报文,查找的节点是/Envelope/Body/createSoapOrderResponse/resultcode/value节点(具体的响应返回路径请根据实际项目替换),即返回码。预期结果"Value=0"。该方法如果找到预期值,则返回找到的预期值个数;找不到的话,则返回0;

7) 根据count的值,判断返回码是否是0(操作成功),从而决定事务是否成功。(LR_PASS表示事务成功;LR_FAIL表示事务失败);

8) 这个报文是静态的,再多的虚拟用户执行,也只是执行同一条指令。若想使参数能“动”起来(如编号等取值不冲突的参数),请继续往下看;

7. 让参数可以动态变化的方法:

7.1 双击id标签下的数字987600001,然后右键选择“替换为新参数”:

图2.7.1

7.2 此时可以对此处进行变量替换,类型选为“Unique Number”,即可保证该参数不会出现重复值。原先的数字参数,也会相应变化成粉红色括号括起来的变量:

图2.7.2(1)

图2.7.2(2)

7.3 右键此参数,选择参数属性:

图2.7.3

7.4 设置此参数的取值信息:

图2.7.4

针对上图,做如下说明:
1) 号码范围 启动(S):第一个号码的起始值,接下来的号码会在此基础上递增。
2) 每个 Vuser 的:设置每个虚拟用户可用的号码数。此图中,每个虚拟用户会使用100个号码。
3) 号码显示格式(N):此为正则表达式。%04d 表示6位数字串,位数不足的,前面补0。9876%04d的有效取值范围为98760000—98769999,共1万个id号。
4) 此例中,每个虚拟用户只分配100个号码计算,则9876%04d可满足100个虚拟用户的数据量使用。
5) 虚拟用户使用号码的规则,以此图为例:第一个虚拟用户创建的id号为98760000—98760099;第二个虚拟用户id号为98760100—98760199。以此类推。
6) 可以根据具体的性能测试需求,进行数据调整。(因为可能除了id以外,还有其它参数不能重复,所以可以参照num参数,新设Unique变量,实现唯一性约束)

8. 点击执行按钮(或F5执行),测试脚本是否正确(下方为执行结果):

图2.8

9. 调试好脚本,保存脚本。

三. 运行负载测试
运行脚本创建好后,可以创建虚拟用户,执行性能测试了。
1. 打开LoadRunner,选择“运行负载测试”:


图3.1

2. 选择刚才创建的脚本,加载到场景中:

图3.2

3. 选择需要的虚拟用户数量。可设置的虚拟用户数量的上限,由License决定:

图3.3

4. 选择编辑计划,根据具体需求,设置“加压”、“持续时间”、“减压”等数据。一般情况,“持续时间”比较常用:

图3.4

5. 点击主界面右下方的“运行时设置”,设置每个虚拟用户执行脚本的次数。这里,可以理解为“每个用户,预期创建的集团数量”(此设置,是在需要设置每个虚拟用户执行次数时,才设定的。如果在步骤4中,设定了“持续时间”,则可以不设置迭代次数(默认1次),虚拟用户会一直执行脚本(变量也会递增),直到指定的时间结束):

图3.5

6. 执行性能测试:

图3.6

7. 等待运行结束,分析结果。

四.结果分析
运行结束后,点击性能测试主菜单栏“结果”-->“分析结果”。

图4.1

具体的数据分析方法,请参照其它LoadRunner性能分析文档。

五. 后记,一些注意事项

1. 脚本中,要删除一个自定义参数,需进入“参数列表”中,再删除,在脚本Action中的删除,是没法彻底删除该参数的。
2. 脚本中,一个参数如果被多处引用,则该参数要注意选择“参数属性”,“更新值的时间”选项。该选项有三类:occurrence、iteration、once。选择occurrence时,则该参数每次出现都会递增一次;选择iteration,则该参数在一次循环内多次出现,也不改变;选择once,该参数只变动一次。这些选择,会配合参数属性“当超出值时”的动作,来选择接下来的动作。
3. LR脚本创建后,会默认每个Action为一个事务,这样会出现自己定义了一个事务,但是执行后会多出很多事务。这个设置需要根据具体脚本需求,来决定是否使用该项(本例子中,就不需要)。“Vuser”-->“运行时设置”-->“其它”中,“每个Action定义为一个事务(D)”该复选框控制。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值