Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176381
  • 博文数量: 39
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 19:16
文章分类

全部博文(39)

文章存档

2011年(34)

2010年(5)

我的朋友

分类: 项目管理

2011-03-22 11:35:47

  •     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文件要放在脚本路径里,可不能乱放。
阅读(2848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~