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
相關文章
- 驗證碼影像處理(JavaScript 版)JavaScript
- python爬蟲之處理驗證碼Python爬蟲
- python+selenium 處理圖片驗證碼,Image 點不出 crop 方法Python
- 自動化測試中的驗證碼處理
- nacos2.3 密碼驗證的處理過程密碼
- 合成實驗中,十三種後處理方法:實驗室常用13種後處理方法、故障及解決辦法
- 處理VM的一種特殊方法和思路
- 在 Laravel 中處理請求驗證的智慧方法Laravel
- 爬蟲遇到頭疼的驗證碼?教你彈窗處理和驗證碼識別爬蟲
- 爬蟲驗證碼的幾種處理方式,已封裝成類,文章末尾有原始碼!爬蟲封裝原始碼
- django-驗證碼/靜態檔案處理Django
- 自動化測試時對驗證碼的處理
- 驗證代理IP的三種方法
- 驗證碼處理在自動化測試中的應用
- MySQL中處理各種重複的一些方法MySql
- SpringBoot-表單驗證-統一異常處理-自定義驗證資訊源Spring Boot
- dataguard驗證是否正常同步的2種方法
- 使用Fortran實現當前驗證碼自動化處理
- Python web自動化爬蟲-selenium/處理驗證碼/XpathPythonWeb爬蟲
- WebService系列之Axis Https(SSL)證書校驗錯誤處理方法WebHTTP
- 手機號碼驗證方法(正則驗證)
- PHP處理密碼的幾種方式PHP密碼
- 處理一份內心煎熬的工作有兩種方法——只有一種是正確的
- 自定義Spring Security的身份驗證失敗處理Spring
- 使用 Zig 實現自動化登入並處理驗證碼
- 使用 Nim 和 Python 自動化處理登入和驗證碼Python
- .Net Core釋出到Linux下驗證碼失效處理方案詳解Linux
- 使用 JavaScript 驗證電子郵件的 4 種方法JavaScript
- Laravel 表單驗證器的幾種使用方法Laravel
- 細數驗證碼的N種生成方式
- 相親交友原始碼開發中會用到的幾種日期處理方法原始碼
- 一對一聊天原始碼,驗證碼選擇輸入字母驗證原始碼
- 乙太網MAC層處理CRC的兩種方法Mac
- Springboot處理CORS跨域請求的三種方法Spring BootCORS跨域
- npm install過程失敗的幾種處理方法NPM
- PbootCMS後臺關閉驗證碼,登入提示驗證碼不能空的解決方法boot
- 使用 Vyper 和 Python 進行自動化登入並處理驗證碼Python
- 如何使用JSR303驗證及自定義訊息統一處理JS
- 【驗證碼逆向專欄】xx80 郵箱多種類驗證碼逆向分析