【Loadrunner】解决如何实践中动态链运用接库DLL 的方法

       问题背景:XXapi发语言为c++,通信机制采用socket信机制,采用Loadrunner中的socket制模式虽然可以录制,但存在以下缺点:

   由于必须取得返回内容和buffer大小Loadrunner会耗费较多时间进行检查,默认为10s由于API目前处于调优中,虽然请求方法和参数一样,但数据的返回有可能动态变化进行传输(动态代表着数据大小有可能不同),故程序稍微有改动后,脚本重复开发的工作量大,而如果直接调用代码函数,将大大提高脚本编写的效率,提高可读性,降低重复工作率。如下面的代码:

 send    buf0 159

 "刉泙"

 "\xf1\x12"

 "USER"

 "\x00"

 "{\n"

 "      \"Account\" : \"csmarapi\","

 "\x1b\x00"

 "aExInfo"

 "\x1a\x00"

 "Cuser"

 "\x16\x00"

 "AGuid"

 "\x14\x00\xf3\x15"

 "34FC6BEC-F2BC-4e33-97D3-A35F1690A3DA4"

 "\x00"

 "1Mac3"

 "\x00\xf3\x02"

 "00-E0-6F-03-64-F9 "

"\x00"

 "rPassworX"

 "\x00"

 "\v"

 "\x86\x00"

 "oken\" : \"\"\n"

 "}\n"

 

解决方法步骤

   1. api源代码,查看是否支持__declspec(dllexport)导出规则,#define GTAAPI_API__declspec(dllexport)

    查看源代码中的方法,我们可以看到APIAuthentication方法中使用RecordSet的实例,但是C言不能使用类的实例的方法,因此我们需要解决这个问题。

     RecordSet rcdset;

     Authentication("xxx", "xxx", rcdset, "user");

 2. 请求开发c++ SDK DLL再新建一DLLRecordSet的实例封装在调用的方法内,

 Loadrunner用这testStress.Dll实现测试,如下面的代码:

 ifdef STRESSTEST_EXPORTS

 #define STRESSTEST_API __declspec(dllexport)

 #else

 #define STRESSTEST_API __declspec(dllimport)

 #endif

 #ifdef __cplusplus

 extern "C" {

 #endif

 int STRESSTEST_API Authentication_Stess(const char* pName, const char* pPassword);

 int STRESSTEST_API CallFunction(const char* pParamInfo);

 #ifdef __cplusplus

 };

 #endif

   3. 在loadrunner中新建C Vuser 脚本

 4File—>Add Files to Script—>选择C++ DLL

 5. 使用lr_load_dll ("SDK_CPP.dll")导入Dll

 6.Loadrunner实现调用:

    int nret,nretuser;

   lr_load_dll("StressTest.dll");

   //连接服务器

    lr_start_transaction("");

    nret=OpenSession_Stress("192.168.xx.xx",8800,90, 0, "{FileName}"); if(nret==0)

 {

    lr_end_transaction("", LR_PASS);

    lr_output_message("接成功,标识码:%d",nret);

    lr_start_transaction("登陆");

   nretuser =Authentication_Stess("xxx", "xxx");

 if(nretuser==0)

{

   lr_end_transaction("", LR_PASS);

   lr_output_message("登陆成功,标识码:%d",nretuser);

 }else

{

    lr_end_transaction("登陆", LR_FAIL);

   lr_error_message("次登录失败,标识码:%d",nretuser); 

 } 

 }

 else

 {

    lr_end_transaction("连接", LR_FAIL);

    lr_error_message("本次连接失败,标识码:%d",nret);

}

    lr_output_message("FileName=%s",lr_eval_string("{FileName}"));

    lr_think_time(30);

 

备注:感谢亲爱的同事共享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值