軟件測試工具中QTP處理驗證碼的一種方法

發表于:2010-04-15來源:作者:點擊數: 標簽:軟件測試工具qtpQTP驗證
軟件測試工具 中 QTP 處理驗證碼的一種方法 QTP 在測試WEB站點應用程序時,通常會碰到驗證碼的問題(尤其是論壇類的站點),對于這類問題,通常的做法是利用OCR(Optical Character Recognization,光學字符識別)技術,通過識別圖片中的文字來獲取驗證碼,

 軟件測試工具QTP處理驗證碼的一種方法

QTP在測試WEB站點應用程序時,通常會碰到驗證碼的問題(尤其是論壇類的站點),對于這類問題,通常的做法是利用OCR(Optical Character Recognization,光學字符識別)技術,通過識別圖片中的文字來獲取驗證碼,但是這種方法可靠性不高,受到驗證碼圖片混淆程度的影響。另外一種做法是在開發階段由程序員屏蔽驗證碼功能,或者提供所謂的“萬能驗證碼”。

  本文介紹在測試Discuz !NT 2.5論壇系統時的關于驗證碼獲取和設置的一種解決辦法。通過分析Discuz的源代碼,發現驗證碼保存在數據庫的dnt_online表中:

/// <summary>
/// 檢查在線用戶驗證碼是否有效
/// </summary>
/// <param name="olid">在組用戶ID</param>
/// <param name="verifycode">驗證碼</param>
/// <returns>在組用戶ID</returns>
public bool CheckUserVerifyCode(int olid, string verifycode, string newverifycode)
{
  DbParameter[] parms = {
  DbHelper.MakeInParam("@olid", (DbType)SqlDbType.Int, 4, olid),
  DbHelper.MakeInParam("@verifycode", (DbType)SqlDbType.VarChar, 10, verifycode)
  };
DataTable dt = DbHelper.ExecuteDataset(CommandType.Text, string.Format("SELECT TOP 1 [olid] FROM [{0}online] WHERE [olid]=@olid and [verifycode]=@verifycode", BaseConfigs.GetTablePrefix), parms).Tables[0];
parms[1].Value = newverifycode;
DbHelper.ExecuteNonQuery(CommandType.Text, string.Format("UPDATE [{0}online] SET [verifycode]=@verifycode WHERE [olid]=@olid", BaseConfigs.GetTablePrefix), parms);
return dt.Rows.Count > 0;
}

  dnt_online表中的最后一個字段verifycode存儲的就是驗證碼。驗證碼是在用戶登錄論壇后隨機產生并存入表中的,在管理員選擇“系統設置”功能進入“管理員控制臺”模塊之前需要輸入驗證碼,輸入的驗證碼與dnt_online表中所存儲的驗證碼進行對比,如果一致則接受用戶登錄請求。

  因此可以在在QTP腳本中編寫數據庫查詢語句,在登錄管理員控制臺之前從數據庫dnt_online表獲取到管理員的驗證碼,具體的QTP腳本如下所示:

  ' 登錄論壇

Browser("Discuz!NT ASP.net|論壇 -").Page("Discuz!NT ASP.net|論壇 -").WebEdit("username").Click
Browser("Discuz!NT ASP.net|論壇 -").Page("Discuz!NT ASP.net|論壇 -").WebEdit("username").Set "admin"
Browser("Discuz!NT ASP.net|論壇 -").Page("Discuz!NT ASP.net|論壇 -").WebEdit("password").Set "123456"
Browser("Discuz!NT ASP.net|論壇 -").Page("Discuz!NT ASP.net|論壇 -").WebButton("登錄").Click

  ' 從數據庫讀取到驗證碼

verifycode = GetVerifyCode ("admin")

  '  登錄管理員控制臺

Browser("Discuz!NT ASP.net|論壇 -").Page("Discuz!NT ASP.net|論壇 -").Link("系統設置").Click
Browser("管理員控制臺登錄").Page("管理員控制臺登錄").WebEdit("PassWord").Set "123456"
Browser("管理員控制臺登錄").Page("管理員控制臺登錄").WebEdit("vcode").Set verifycode       ' 設置驗證碼
Browser("管理員控制臺登錄").Page("管理員控制臺登錄").WebButton("WebButton").Click

  ' 退出

Browser("管理員控制臺登錄").Page("系統設置 - Powered by Discuz!NT").Frame("mainFrame").Link("退出").Click

Function GetVerifyCode( username )
  Dim Conn ' 數據庫連接對象
  Dim Rst ' 數據記錄集對象
  Dim str_Link_DBSource ' 數據庫連接串
  Dim SqlStr ' SQL查詢語句
  str_Link_DBSource="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=dnt25;Data Source=CHENNENGJI"
  SqlStr = "select verifycode from dnt_online where username = '" & username & "'"

  Set Conn=CreateObject("ADODB.Connection")
  Conn.Open str_Link_DBSource

  Set Rst=CreateObject("ADODB.Recordset")
  Rst.Open SqlStr,Conn,2,2

  Rst.MoveFirst
  GetVerifyCode = Rst.Fields(0)   ' 取得驗證碼

  Rst.Close
  Conn.Close
  Set Rst=Nothing
  Set Conn=Nothing
End Function

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

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