QTP處理驗證碼的一種方法

2021-08-31 16:01:49 字數 2953 閱讀 3618

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

qtp在測試web站點應用程式時,通常會碰到驗證碼的問題(尤其是論壇類的站點),對於這類問題,通常的做法是利用ocr(optical character recognization,光學字元識別)技術,通過識別中的文本來獲取驗證碼,但是這種方法可靠性不高,受到驗證碼混淆程度的影響。另外一種做法是在開發階段由程式設計師遮蔽驗證碼功能,或者提供所謂的「萬能驗證碼」。

本文介紹在測試discuz !nt 2.5論壇系統時的關於驗證碼獲取和設定的一種解決辦法。通過分析discuz的源**,發現驗證碼儲存在資料庫的dnt_online表中:

///

///

/// 在組使用者id

/// 驗證碼

/// 在組使用者id

public bool checkuserverifycode(int olid, string verifycode, string newverifycode)

; datatable dt = dbhelper.executedataset(commandtype.text, string.format("select top 1 [olid] from [online] where [olid]=@olid and [verifycode]=@verifycode", baseconfigs.gettableprefix), parms).tables[0];

parms[1].value = newverifycode;

dbhelper.executenonquery(commandtype.text, string.format("update [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

給我老師的人工智慧教程打call!

3種方法實現隨機驗證碼

1 由4個字元組成的字串 2 4個字元是隨機的數字 大小寫字母 3 4個字元的字型是隨機的,並且顏色,大小都是隨機的 4 同時,字型也是傾斜的 1 在這裡,我們要用到 random 這個隨機函式物件 2 那麼該如何來使用random呢?rabdom 既然是個函式物件,那麼,它肯定是先建立 例項化這個...

簡單的驗證碼處理

廢話不說 直接進入 區 private static final string chararray private string getrandchar int randnumber return chararray randnumber private color getrandcolor int...

(十二)驗證碼的處理

一 去掉驗證碼 對於開發人員來說,只是把驗證碼相關 注釋掉即可,如果是在測試環境,這將可省去測試人員不少麻煩,如果自動化指令碼是在正式環境跑,則會給系統帶來一定的風險。二 設定萬能碼 在 中加個特殊邏輯即可 三 記錄cookie 在我們第一次登陸某 可以勾選 記住密碼 的選項,當下次再訪問該 時自動...