记录我的学习。。。。。。

(转)LoadRunner录制图片验证码

上一篇 / 下一篇  2013-04-03 10:52:48 / 个人分类:LoadRunner

LoadRunner录制图片验证码

LoadRunner自身是无法捕获到图片验证码的,但是我们可以帮助LoadRunner来实现验证码的捕获。

1.图片验证码

图片验证码的产生来自服务器端,由服务器生成随机数,然后写入到图片中。虽然LR可以录制下图片,但是无法从图片中获取数据,因此表面上看LR是无法跳过这关了,那么我们从服务器下手,通常产生的随机数是保存在session中,所以我们可以想办法获取到这个session。

a.针对应用,采用不同的语言,本次讲的是java应用,首先写个*.jsp脚本,用来获取应用当前session的名值对。
b.将脚本调试通过后,放入应用的root目录下。
c.访问该脚本,验证能获取session名值对。

2.捕获验证码

既然可以从服务器获得session的名值对,那么我们就可以用LR来捕获这些值。

a.添加注册函数web_reg_save_param,设置目标边界。
b.通过web_url访问*.jsp文件。
c.处理名值对,使用atoi将字符串型的验证码转换成整型。

3.筛选捕获的信息

a.在捕获的session信息中,可能存在多个名值对,所以建议用循环处理,筛选出验证码的session。
b.建议在获得验证码session后,重新整理脚本,修改web_reg_save_param的目标边界值,然后直接调用web_url访问*.jsp,这样可以避免循环带来的性能问题,提高效率。

4.参数化

将验证码进行参数替换,脚本回放即可。

5.实例

Action()
{
web_url("reg.jsp",
   "URL=http://localhost:8090/verf/reg.jsp",
   "Resource=0",
   "RecContentType=text/html",
   "Referer=",
   "Snapshot=t2.inf",
   "Mode=HTTP",
   LAST);

web_url("CheckCode.jsp",
   "URL=http://localhost:8090/verf/CheckCode.jsp",
   "Resource=1",
   "RecContentType=image/jpeg",
   "Referer=http://localhost:8090/verf/reg.jsp",
   "Snapshot=t3.inf",
   LAST);

web_reg_save_param("vcode","LB=S:","RB=:E", "ORD=ALL", LAST);

SessionInfo("vcode", "http://localhost:8090/verf/verify.jsp", "http://localhost:8090/verf/reg.jsp");

lr_start_transaction("very");

web_submit_data("actreg.jsp",
   "Action=http://localhost:8090/verf/actreg.jsp",
   "Method=POST",
   "RecContentType=text/html",
   "Referer=http://localhost:8090/verf/reg.jsp",
   "Snapshot=t4.inf",
   "Mode=HTTP",
   ITEMDATA,
   "Name=CheckCode", "Value=5715", ENDITEM,
   "Name=btnG", "Value=登录", ENDITEM,
   LAST);

lr_end_transaction("very",LR_AUTO);

return 0;
}

小结

a.此方法有一定的局限性,主要表现在需要写一个服务端的脚本,并将脚本放入应用中,其次对于不同语言编写的应用,需要编写不同的脚本,如java、c#,最后此方法只适用于将验证码保存到session中的应用。
b.可以将上面关于LR的方法写入函数中,方便以后的测试,提供session.hverify.jsp脚本供参考。

 

2。verify.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" %>

<html>
<head>
   <title> verify code </title>
</head>

<body>
<%
   java.util.Enumeration<String> enu = session.getAttributeNames();
  
        while (enu.hasMoreElements())
        {
            String name = enu.nextElement();
            Object value = session.getAttribute(name);
           
            out.println("S:name=" + name + ",value=" + value + ":E");
        }
%>

</body>
</html>

 

3.session.h

int SessionInfo(char *name, char *url, char *ref)
{
int count = 0;
char param[50], u[100], r[100];

if (name == "" || url == "" || ref == "")
{
   lr_error_message("Please input all parameters");
   return -1;
}

sprintf(u, "URL=%s", url);
sprintf(r, "Referer=%s", ref);

web_url("Verify.jsp",
   u,
   "Resource=1",
   "RecContentType=image/jpeg",
   r,
   LAST);

sprintf(param, "{%s_count}", name);
count = atoi(lr_eval_string(param));

if (count == 0)
{
   lr_output_message("No match results");
   return 0;
}

while (count > 0)
{
   sprintf(param, "{%s_%d}", name, count--);
   lr_output_message("Results is %s", lr_eval_string(param));
}

return 0;
}


TAG:

fonona的个人空间 引用 删除 fonona   /   2013-05-02 09:59:52
3
 

评分:0

我来说两句

Open Toolbar