最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loadrunner不是很熟悉,所以一开始也走了一些弯路,现将学习的过程记录下来,为以后做参考吧。
TCP协议的服务器的性能测试,我想大家都会选择loadrunner的winsocket协议进行测试,我也是采用此种方式。下面将逐一记录如何使用此协议做性能测试。
1.采用DLL文件方式进行测试
由于与服务器连接的客户端的DLL文件我手头有,同时其对应的头文件也有,所以一开始试想的是采用loadrunner调用DLL文件的方式来实现性能测试。因为这种方式简单,不需了解很多loadrunner的winsocket的相关函数,容易上手。下面的代码即是采用DLL文件初步编写的代码:
vuser_init.c
vuser_init()
{
lrs_startup(257);
lr_load_dll("InnoVSSBASClient.dll");
lr_load_dll("ole32.dll");
return 0;
}
action.c
#include "lrs.h" #include "def.h" Action() { char* test; long handle; NET_CLIENT_INFO info; int isLogin; NET_CROSS_INFO crossInfo; NET_VEHCILE_PASS_INFO lrPassInfo = {0}; NET_VEHCILE_ALARM_INFO lrAlarmInfo = {0}; handle = InnoVSSBASClient_Init(NULL,NULL); strcpy(info.clientId,guid_gen()); strcpy(info.serverIP,"127.0.0.1"); info.serverPort = 9300; strcpy(info.username,"admin"); strcpy(info.password,"admin"); lr_start_transaction("tran_login_start"); isLogin = InnoVSSBASClient_CreateConn(handle,&info); if(isLogin==1){ lr_end_transaction("tran_login_start", LR_AUTO); lr_output_message(info.clientId); lr_output_message("登陆成功"); //InnoVSSBASClient_SetCallbackFunc(handle,InnoVSSBASClientCallback,1L); lr_start_transaction("tran_addcross_start"); strcpy(crossInfo.crossId,lr_eval_string("{crossId}")); InnoVSSBASClient_AddCrossInfo(handle,&crossInfo); lr_end_transaction("tran_addcross_start", LR_AUTO); }else{ lr_end_transaction("tran_login_start", LR_FAIL); lr_output_message(info.clientId); lr_output_message("登陆失败"); } while(1) { sleep(100); } return 0; } |
vuser_init中加载了程序所需要的DLL文件,InnoVSSBASClient.dll为与服务器连接的客户端的DLL文件,而ole32.dll为程序中的字符串函数(比如strcpy等)需要加载的DLL文件。
action中则是性能测试的主体代码。本代码一共对两个操作:登录和添加路口信息做了事务监控。
采用DLL文件的方式针对测试简单的顺序的操作很适用,但是本客户端还有个功能是需要处理服务器实时传输的过车等信息的功能,即在测试服务器端功能的时候,还需要模拟出客户端的回调函数的功能,但是在loadrunner中没有找到定义回调函数的方式,于是不得不放弃这种简单的性能测试的方式。在此想向loadrunner的大牛问一下,如何在loadrunner中第一回调函数呢?
上面的方式不能真实的模拟客户端的情况,于是下面会记录采用loadrunner本身的winsocket函数进行测试。