一. 前期准备
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请求消息脚本格式如下:
- 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;
- }
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)”该复选框控制。