Loadrunner Webservice接口性能测试脚本编写优化总结

时间:2023-03-09 03:55:29
Loadrunner Webservice接口性能测试脚本编写优化总结

本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结。

1.Webservice协议脚本编写流程

下面介绍使用Loadrunner 11调用Webservice接口通用的流程与方法

1.1 新建脚本,选择"Webservice"协议

Loadrunner Webservice接口性能测试脚本编写优化总结

1.2 选择Manage Services->Import,输入URL(注意需要在Webservice地址后面加上?wsdl),最后选择Impoort

Loadrunner Webservice接口性能测试脚本编写优化总结

1.3 点击脚本中Action脚本中return 0前,后选择Add Service Call

Loadrunner Webservice接口性能测试脚本编写优化总结

1.4 在打开的New Web Service Call窗口中,选择输入参数inputXML,勾选Include argument in,在Value中可以随便填写一些字符(接下来脚本中,我们会做一些参数化设置)

Loadrunner Webservice接口性能测试脚本编写优化总结

1.5 同理,选择输出参数中SubmitNLSMSRequestResult,后选择Save returned value in param,最后选择OK

Loadrunner Webservice接口性能测试脚本编写优化总结

这样调用一次Webservice接口就保存在Action脚本中

Loadrunner Webservice接口性能测试脚本编写优化总结

1.6 参数化

  • 在脚本中用" <mobileno>13312345678</mobileno><smscontent>飞信</smscontent>"(此接口输入参数示例)替换"xxx"
  • 选中"13312345678"并右键选择Replace with a Parameter,输入参数名称及参数类型(Unique Number)

Loadrunner Webservice接口性能测试脚本编写优化总结

1.7 参数设置

  • 选择脚本右上角P图标进入参数列表进行
  • 选择Unique Number"唯一数",选择格式为%8d (下图②)
  • 选择"Block size per vuser"为1000000(每个虚拟用户分配到的参数个数,下图③)
  • 同时Update value选择"Each iteration",When Out of values选择"Continue in a cyclic manner"(每次迭代后,参数才会更新,且每个虚拟用户用到的参数超过分配的参数个数1000000时,从头开始取,如此循环。下图④)

Loadrunner Webservice接口性能测试脚本编写优化总结

到此,我们已经完成了基本的Loadrunner脚本编写,下面我们开始本文真正的重点:脚本优化及实战演练,包括集合点添加,事务添加,返回结果判断及"保存20000会话"脚本编写。

2.Webservice脚本优化

2.1集合点添加

2.1.1什么是集合点?

集合点用以同步虚拟用户以便恰好在同一时刻执行任务。性能测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中通过在提交数据操作前面加入集合点,当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。

2.1.2如何添加集合点?

在需要添加集合点之处,如开始调用接口前,右键选择Insert->Rendezvous,输入集合点名称即可。也可以直接在需要添加的脚本前添加"lr_rendezvous("Step1");",其中Step1为集合点名称,可自定义。

Loadrunner Webservice接口性能测试脚本编写优化总结

2.2事务添加

2.2.1添加开始事务

由于需要统计响应时间重要参数指标等,需要在脚本中手工添加事务。添加事务方法与集合点类似。在需要添加事务处,如集合点后,右键选择Insert->Start Transaction,输入事务名称即可。也可在脚本中直接添加"lr_start_transaction("Step1");",其中Step1为事务名称,可自定义。

Loadrunner Webservice接口性能测试脚本编写优化总结

  • 在集合点前后添加事务区别?

  如果在集合点前添加事务,在最后统计事务时间时就包括了在集合点等待的时间,导致统计的响应时间数据不准确(变大)。所以在此,我们选择在集合点后添加事务。

2.2.2添加结束事务

同理,在需要添加结束事务处,一般在web_service_call后,右键选择Insert->End Transaction,输入需要结束的事务名称即可。也可在脚本中直接添加"lr_end_transaction("Step1", LR_AUTO);",其中Step1为需要结束的事务名称。

Loadrunner Webservice接口性能测试脚本编写优化总结

  • LR_AUTO是什么?

  lr_end_transaction中第二个参数为"事务结束状态",有LR_PASS(通过)、LR_FAIL(失败)、LR_AUTO(自动)、LR_STOP(暂停)。如果在lr_end_transaction中没有指定结束事物状态是LR_AUTO,而是明确指定为LR_PASS、LR_FAIL、LR_STOP其中的一种,则事物将以最后指定的状态来结束。

2.3返回结果判断

2.3.1单个返回结果判断

例如,当我们调用Webservice接口输入如下参数时"<mobileno>13312345678</mobileno> <smscontent>飞信</smscontent>",接口正确返回结果包括"飞信是中国移动的业务"。在此我们就需要对返回结果进行判断。示例代码如下:

Loadrunner Webservice接口性能测试脚本编写优化总结

  • lr_eval_string函数说明

  C的变量都不能被LR的函数直接调用。所以:LR函数调用C变量,得先经过lr_eval_string的解析,相当于桥梁的作用。

  • strstr函数说明

  函数格式为strstr(str1,str2),其中str1: 被查找目标string expression to search,str2:要查找对象The string expression to find.该函数返回str2第一次在str1中的位置,如果没有找到,返回NULL.

  • lr_error_message和lr_output_message函数说明

  1) lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。

  2) lr_error_message在回放日志中显示的是红色的字体,且显示语句所在行号;同时,如果脚本在controllor中运行时,会生成一个error信息。

  3) lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。

2.3.2多个返回结果判断

与单个结果判断类似,其实就是嵌套if语句,在此恕不赘述,示例代码如下:

Loadrunner Webservice接口性能测试脚本编写优化总结

3.实战演练 – 保存20000会话

3.1需求说明

实际项目中,需要测试组件是否可以保存最大20000个会话,同时在保存20000个会话后,用户可以正常发送上行短信结束该20000会话。 压力测试中,我们共添加了50个虚拟用户,那么一个虚拟用户只需开始保存20000/50=400个会话,后结束这些会话即可。

3.3脚本编写

我们可以使用一个For循环完成这部分的工作,示例代码如下:

Loadrunner Webservice接口性能测试脚本编写优化总结

3.3.1lr_whoami函数说明

void lr_whoami (int *vuser_id, char **sgroup, int *scid);

返回值:返回当前运行的vuser ID、运行脚本的组名称以及场景ID

参数说明:

  • int *vuser_id 需先注册,保存正在运行的vuser的ID,在Virtual User Generator中回放返回-1
  • char **sgroup 需先注册,保存正在运行的vuser的组名(脚本名),在Virtual User Generator中回放返回None
  • int *scid需先注册,保存正在运行的Scenario的ID,在Virtual User Generator中回放返回0

3.3.2lr_save_int函数说明

lr_save_int函数意思是把一个整数保存为参数

abs(id)意思是取id的绝对值(因为在Virtual User Generator中,id返回为-1)