在这次性能测试过程中,有这样的一个场景:
要求数据:
交换局:2W
网元:2W
用户端口:2000W
交接箱:4W
分线盒:160W
主干+配线线对:5000W
性能测试场景:
每用户地址可开1000门电话,即1个用户地址下挂1000个号码资源;
并发用户数从400起,每5分钟增加10个用户直到满足以下三个条件时退出:
1、总体事务错误率在统计区间内的平均值首次大于1%;
2、服务器CPU负载在统计区间内的平均值首次大于80%;
3、被测系统任一服务器主机发生操作系统重启情况;
根据以上场景,和开发人员讨论、和预测试的经验,初步判断系统可并发用户为500左右,则系统运行时间为1小时左右,每装一门电话系统运行时间为10″钟左右,think_time设定为3*3=9″钟,迭代次数预估计为180次,也不排除更多的可能性;
则计划需要20W条基础数据,数据建立规则如下:
号码段从99000001到992000000;
用户地址从“XX街道XX小区XX号13B000001”到“XX街道XX小区XX号13B002000”;
每分线盒下挂100个资源,分线盒资源编号从000001到000200;
用户端口、线对编号后六位从000001到200000;
由于参数量比较大,所需要参数化的内容也比较多,所以经过尝试后不打算使用参数文件或者从数据库读取参数的方式;
而是使用VUserID+IterationNumber生成参数;
参数化的过程如下:
1、在系统参数中为脚本建立ParameteType为VUser ID 和IterationNumber的参数,分别使用%3S【NewParam_VUserID】和%3D【NewParam_ItrationNbr】;
2、将两个参数叠加,形成六位数字,作为基本参数;
3、当迭代数超过200时,VUserID+500,IterationNumber-200,重新生成六位基本参数;
4、分线盒资源参数、地址资源参数通过基本参数的换算后得到;
所使用到的函数以及方法都是比较常用的,如下:
1、sprintf:合并两个参数,并将其保存为基本参数;
sprintf(ParamVI,"%s%s",lr_eval_string("{NewParam_ItrationNbr}"),lr_eval_string("{ParamVUID_Nbr}"));
2、lr_save_string:保存参数用;
lr_save_string(ParamVI,"ParamVI");
3、atoi:字符转数字;
4、itoa:数字转字符;
5、intlength:判断字符串长度;
当这样做了之后,会发现参数化的过程也变得非常简单,简单的将需要参数化的内容替换成{ParamVI}即可,为调试脚本和数据节约了大量的时间,也为测试结果打下了比较好的基础;
PS:总的来讲过程比较简单,但想法比较有意思,所以Blog出来希望给出指导建议。