1. 程式人生 > >軟體效能測試工具LoadRunner驗證碼的解決方案

軟體效能測試工具LoadRunner驗證碼的解決方案

現在好多網站系統為了防範,惡意訪問系統,在登陸口進行限制,使用驗證碼登陸。

  驗證碼是隨機產生的,並且驗證碼在頁面上顯示為圖片。此時想通過loadrunner直接獲取伺服器傳送過來的引數,肯定是不可行的。

  在進行效能測試的時候,有兩種辦法進行此類系統的測試

  1、將驗證碼暫時遮蔽,待完成效能測試後,在恢復。驗證碼遮蔽一定不會給效能測試帶來影響,這是肯定的。

  2、如果要測試系統是在用的系統,遮蔽驗證碼會帶來不安全因素,不能遮蔽驗證碼。遇到這個問題當然也有辦法解決--新增一個頁面將驗證碼的輸出到頁面,然後用loadrunner獲取到。

  JSP為例:

  驗證碼頁面(a.jsp)

  <%@ contenttype="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" page="">

<%@ contenttype="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" page="">

  <%!

  Color getRandColor(int fc,int bc)

  {//給定範圍獲得隨機顏色

  Random random = new Random();

  if(fc>255) fc=255;

  if(bc>255) bc=255;

  int r=fc+random.nextInt(bc-fc);

  int g=fc+random.nextInt(bc-fc);

  int b=fc+random.nextInt(bc-fc);

  return new Color(r,g,b);

  }

  %>

  <%

  //設定頁面不快取

  response.setHeader("Pragma","No-cache");

  response.setHeader("Cache-Control","no-cache");

  response.setDateHeader("Expires", 0);

  // 在記憶體中建立圖象

  int width=60, height=20;

  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  // 獲取圖形上下文

  Graphics g = image.getGraphics();

  //生成隨機類

  Random random = new Random();

  // 設定背景色

  g.setColor(getRandColor(200,250));

  g.fillRect(0, 0, width, height);

  //設定字型

  g.setFont(new Font("Times New Roman",Font.PLAIN,18));

  //畫邊框

  //g.setColor(new Color());

  //g.drawRect(0,0,width-1,height-1);

  // 隨機產生155條幹擾線,使圖象中的認證碼不易被其它程式探測到

  g.setColor(getRandColor(160,200));

  for (int i=0;i<300;i++)

  {

  int x = random.nextInt(width);

  int y = random.nextInt(height);

  int xl = random.nextInt(12);

  int yl = random.nextInt(12);

  g.drawLine(x,y,x+xl,y+yl);

  }

  // 取隨機產生的認證碼(4位數字)

  String sRand="";

  for (int i=0;i<4;i++){

  String rand=String.valueOf(random.nextInt(10));

  sRand+=rand;

  // 將認證碼顯示到圖象中

  g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//呼叫函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成

  g.drawString(rand,13*i+6,16);

  }

  // 將認證碼存入SESSION

  session.setAttribute("rand",sRand);

  System.out.println("---:"+sRand); //sRand就是隨機數 驗證碼 ,把它放到session中,然後合成到圖片中

  // 圖象生效

  g.dispose();

  //out.clear();

  request.setAttribute("gzip", "false");

  // 輸出圖象到頁面

  ImageIO.write(image, "JPEG", response.getOutputStream());

  out.clear();

  out = pageContext.pushBody();

  %>

  將驗證碼jsp頁面作為圖片放到b.jsp頁面中:

<a href="c.jsp">c.jsp</a>

<br>
<br>
<img src="a.jsp"/>

<iframe. src="c.jsp"/>

<4;i++){

  在iframe中放入的c.jsp頁面就是 獲取驗證碼的頁面。

  這兒加了一個c.jsp 頁面連結,主要是用在loadrunner錄製指令碼的時候,a.jsp 和c.jsp在B頁面上載入的順序不是有序的,因而C.JSP可能獲取到的驗證碼為NULL。

c.jsp

  Q<%=session.getattribute("rand")%>Q

<%=session.getattribute("rand")%>

<%=session.getattribute("rand")%>

  在C.JSP頁面上 在取得的驗證碼前後加上兩個Q主要為了loadrunner能夠捕獲到這個驗證碼做的標記。

  下面我們看一下 loadrunner指令碼:

Action()
{
    web_set_max_html_param_len("1024");
    web_url("b.jsp",
        "URL=http://10.10.129.99:8080/blank/b.jsp",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTTP",
        LAST);

    web_concurrent_start(NULL);

    web_url("a.jsp",
        "URL=http://10.10.129.99:8080/blank/a.jsp",
        "Resource=1",
        "RecContentType=image/jpeg",
        "Referer=http://10.10.129.99:8080/blank/b.jsp",
        LAST);
/*
    web_url("c.jsp",
        "URL=http://10.10.129.99:8080/blank/c.jsp",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=http://10.10.129.99:8080/blank/b.jsp",
        "Snapshot=t2.inf",
        "Mode=HTTP",
        LAST);
*/
    web_concurrent_end(NULL);

//獲取C.JSP頁面上的驗證碼

    web_reg_save_param("aaa",
        "LB/IC=Q",
        "RB/IC=Q",
        "Ord=1",
        "Search=body",
        LAST);

    web_url("c.jsp_2",
        "URL=http://10.10.129.99:8080/blank/c.jsp",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=http://10.10.129.99:8080/blank/b.jsp",
        "Snapshot=t3.inf",
        "Mode=HTTP",
        LAST);

//打印出來 也可以通過loadrunner log日誌設定檢視 param
    lr_log_message("-------:%s", lr_eval_string("{aaa}"));
    return 0;
}

www.lnluqu.cn
www.025invest.cn
www.wx-detian.cn
www.xintravel.cn
www.fenghuicaifu.cn
www.chinaytbzw.cn
www.sydire.cn
www.jnymkj.cn
www.metrel-china.cn
www.hongheqiche.cn
www.zazhiku.cn
www.yz-hysl.cn
www.gutiangelun.cn
www.lnjjpm.cn
www.touraround.cn