軟件性能測試工具LoadRunner驗證碼的解決方案

發表于:2011-07-08來源:未知作者:領測軟件測試網采編點擊數: 標簽: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。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97