現在好多網站系統為了防范,惡意訪問系統,在登陸口進行限制,使用驗證碼登陸。
驗證碼是隨機產生的,并且驗證碼在頁面上顯示為圖片。此時想通過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> <iframe. src="c.jsp"/> |
在iframe中放入的c.jsp頁面就是 獲取驗證碼的頁面。
這兒加了一個c.jsp 頁面鏈接,主要是用在loadrunner錄制腳本的時候,a.jsp 和c.jsp在B頁面上加載的順序不是有序的,因而C.JSP可能獲取到的驗證碼為NULL。
原文轉自:http://www.anti-gravitydesign.com