LoadRunner提供了功能强大的API集合,足够应付大多数性能测试的需求。但在某些情况下,这些API仍然有覆盖不到的地方。例如,我们有一个WEB应用,该应用有一个页面输入用户的信息,为了安全起见,用户输入的信息在提交之前都要先进行加密处理,加密处理通过本地的COM组件实现。
对这个要求而言,LoadRunner的现有API不能提供直接支持,因为LoadRunner在录制脚本时只录制数据交互,因此,COM的加密处理过程是不能录制下来的。在LoadRunner的脚本中,可能只有类似以下的语句描述了这个过程:
…………
web_url("userinfo",
"URL=",
"TargetFrame=",
"Resource=0",
"Referer=",
LAST);
web_submit_form("login ",
"Snapshot=t4.inf",
ITEMDATA,
"Name=username", "Value=4e92Sh6d394g", ENDITEM,
"Name=password", "Value=932A2hf34U18", ENDITEM,
LAST);
…………
从脚本可以看到,输入的数据是加密后的数据,但LR没有录制到加密过程。
假设加密函数所在的DLL名为security.dll,用于加密的函数名为encode,则一种可能的对脚本的修改方法如下代码所示。
…………
char *encode_username, *encode_password, *orgin_username, *orgin_password;
char* uservalue, passvalue;
int ret;
……
web_url("userinfo",
"URL=",
"TargetFrame=",
"Resource=0",
"Referer=",
LAST);
orgin_username = lr_eval_string(“{ username }”); //获取参数的值
orgin_password = lr_eval_string(“{ password }”);
ret = lr_load_dll(“security.dll”); //加载DLL库
encode(origin_username, encode_username); //调用encode函数
encode(origin_password, encode_password);
sprintf(uservalue, “Value=%s”, encode_username);
sprintf(passvalue, “value=%s”, encode_password);
web_submit_form("login ",
"Snapshot=t4.inf",
ITEMDATA,
"Name=username", uservalue, ENDITEM,
"Name=password", passvalue, ENDITEM,
LAST);
…………
说明:
若指明绝对路径,dll文件可以放在脚本文件夹外。
还要加一句,DLL文件要放在脚本路径里,可不能乱放。