2.Webservice脚本优化
2.1集合点添加
2.1.1什么是集合点?
集合点用以同步虚拟用户以便恰好在同一时刻执行任务。性能测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中通过在提交数据操作前面加入集合点,当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。
2.1.2如何添加集合点?
在需要添加集合点之处,如开始调用接口前,右键选择Insert->Rendezvous,输入集合点名称即可。也可以直接在需要添加的脚本前添加"lr_rendezvous("Step1");",其中Step1为集合点名称,可自定义。
2.2事务添加
2.2.1添加开始事务
由于需要统计响应时间重要参数指标等,需要在脚本中手工添加事务。添加事务方法与集合点类似。在需要添加事务处,如集合点后,右键选择Insert->Start Transaction,输入事务名称即可。也可在脚本中直接添加"lr_start_transaction("Step1");",其中Step1为事务名称,可自定义。
- 在集合点前后添加事务区别?
如果在集合点前添加事务,在最后统计事务时间时就包括了在集合点等待的时间,导致统计的响应时间数据不准确(变大)。所以在此,我们选择在集合点后添加事务。
2.2.2添加结束事务
同理,在需要添加结束事务处,一般在web_service_call后,右键选择Insert->End Transaction,输入需要结束的事务名称即可。也可在脚本中直接添加"lr_end_transaction("Step1", LR_AUTO);",其中Step1为需要结束的事务名称。
- 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>",接口正确返回结果包括"飞信是中国移动的业务"。在此我们就需要对返回结果进行判断。示例代码如下:
- 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函数说明
lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。
lr_error_message在回放日志中显示的是红色的字体,且显示语句所在行号;同时,如果脚本在controllor中运行时,会生成一个error信息。
lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。
2.3.2多个返回结果判断
与单个结果判断类似,其实就是嵌套if语句,在此恕不赘述,示例代码如下,:
3.实战演练 – 保存20000会话
3.1需求说明
实际项目中,需要测试组件是否可以保存最大20000个会话,同时在保存20000个会话后,用户可以正常发送上行短信结束该20000会话。 压力测试中,我们共添加了50个虚拟用户,那么一个虚拟用户只需开始保存20000/50=400个会话,后结束这些会话即可。
3.3脚本编写
我们可以使用一个For循环完成这部分的工作,示例代码如下:
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)