• 軟件測試技術
  • 軟件測試博客
  • 軟件測試視頻
  • 開源軟件測試技術
  • 軟件測試論壇
  • 軟件測試沙龍
  • 軟件測試資料下載
  • 軟件測試雜志
  • 軟件測試人才招聘
    暫時沒有公告

字號: | 推薦給好友 上一篇 | 下一篇

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

發布: 2010-5-04 17:32 | 作者: 網絡轉載 | 來源: 領測軟件測試網 | 查看: 131次 | 進入軟件測試論壇討論

領測軟件測試網

軟件測試工具中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/

TAG: qtp QTP 工具 軟件測試 驗證


關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

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