軟體效能測試工具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> <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_concurrent_start(NULL); web_url("a.jsp", //獲取C.JSP頁面上的驗證碼 web_reg_save_param("aaa", web_url("c.jsp_2", //打印出來 也可以通過loadrunner log日誌設定檢視 param |
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