使用loadrunner测试RSA服务器性能

先是一个dll,我的做法是简单的实现了下radius协议的组包,然后去A了ZwelL的UDP发包代码,通过UDP封包发给服务器,直接读取返回值中的RADIUS协议第一个字节就知道结果了。详见附件。

主要的一个比较郁闷的问题在于radius协议的Authenticator字段,协议规定,每个包的这个字段必须不同,否则视为重复发送的封包直接XX掉。在C里面实现的时候用了rand函数,设置seed为time(),因为time的精确度为1s,导致并发的时候出现部分重复的Authenticator封包发送,这样在loadrunner上测试就表现为fail事务的失败率7%左右,后面使用_ftime来获取比较精确的时间作为种子(一种说法是可能不是十分精确,不过我的要求仅仅是连续的时候尽量是不同的,就符合了)再次测试。这次好点,50U下跑了8个小时,失败率大概在0.5%左右,可以接受。

还有个很奇怪的事情, int i=0;

         
2;

     
//printf("i:%d\n",i);

     
if(type==0x02)

     {

          

          
pwdencode(passvalue,auth,secret);

          for(
i=2;j<16;j++,i++){

               
typeString[i] = pass[j];

          }     

     }

在里面的循环的时候不加i=2的赋值,编译成EXE后执行正常,for循环以i=2开始,编译成dll的时候则for循环中i=0开始,极度无语。

Loadrunner部分如下:

在vuser_init中载入编写的dll

#include "lrs.h"





vuser_init()

{

     
lrs_startup(257);     

     
lr_load_dll("RadiusClient.dll");

     return 
0;

}

然后action中则执行dll中导出的验证函数:

#include "lrs.h"

Action()

{

          
int result=0;

             
lr_start_transaction("RSA");

          
result sendRadiusAuthorizelr_eval_string("<user>") , "1111""suddy""10.0.250.81""10.0.250.199");

             
lr_message("测试的结果为%d",result);

          

          if(
result==2){

               
lr_end_transaction("RSA"LR_PASS);

          }else {

               
lr_error_message("错误ID:%d",result);

               
lr_end_transaction("RSA"LR_FAIL);

          }

             return 
0;

}

其中<user>为参数化用户名

然后直接让loadrunner去 run就可以了。从结果来看还是很强悍的,YY结论是这台测试机器1分钟可以验证4W8的用户。恐怖。折去使用动态口令时的算法消耗,估计也可以是2W5左右,强哪。

先唠叨这些,附件是dll的code,记录下,以备后查。

 

10.09ps : 测试web login中 必须ignore thinktime  并且 关闭 simulated browser

否则结果有较大的偏差。

附件: radiusclient.rar (139.83 K, 下载次数:261)

« 上一篇 | 下一篇 »

1条记录访客评论

顶一个先

Post by chenht on 2012, July 20, 11:12 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):