相信在測(cè)試過程中,大家都會(huì)碰到一個(gè)費(fèi)時(shí)又枯燥的工作,即“測(cè)試輸入項(xiàng)可接受的最大長(zhǎng)度是否符合需求。”尤 其是當(dāng)一個(gè)新系統(tǒng)剛開發(fā)的時(shí)候,有大量的字段需要測(cè)試。而當(dāng)眾多的新功能需要測(cè)試的時(shí)候,這個(gè)測(cè)試點(diǎn)常常優(yōu)先級(jí)不高,測(cè)試人員往往只是挑了其中一些重要的 或者偶然碰到的字段進(jìn)行了測(cè)試,有時(shí)甚至忘記這檔子事了。不幸的是,根據(jù)來自生產(chǎn)環(huán)境的缺陷報(bào)告,我們幾乎每個(gè)項(xiàng)目都碰到過由于用戶輸入了超長(zhǎng)的字段而產(chǎn) 生的產(chǎn)品缺陷,有的甚至嚴(yán)重妨礙了用戶操作。這個(gè)差異告訴我們“應(yīng)該要測(cè)試字段的最大長(zhǎng)度,而且要用一種更簡(jiǎn)單易行的辦法使得做這個(gè)工作的代價(jià)較低。”
James Bach在他的網(wǎng)站(http://www.satisfice.com/tools.shtml)上發(fā)布了他寫的一個(gè)小程序Perlclip,可以用來生成一定規(guī)律的指定長(zhǎng)度的字串,放在windows的剪貼板中,然后你可以粘貼到任何你想要輸入的字段中。這是一個(gè)適用范圍比較廣的小工具,如果你還在自己手工輸入長(zhǎng)串?dāng)?shù)據(jù),并且用word去計(jì)算這個(gè)字串的長(zhǎng)度。那么建議你至少可以向前走一步,試試James的工具。
有時(shí),我們還需要貪心一點(diǎn)。想想,James工具只能一個(gè)一個(gè)地準(zhǔn)備數(shù)據(jù),而把這些數(shù)據(jù)粘貼到對(duì)應(yīng)的輸入框里還是需要手工來做。看數(shù)據(jù)字典、生成字串、粘貼、提交、驗(yàn)證;看數(shù)據(jù)字典、生成字串、粘貼、提交、驗(yàn)證。。。如此五步需要大量重復(fù),是否也可以自動(dòng)化呢?讓我們以一個(gè)基于ExtJS的web應(yīng)用為例,借助Sahi這個(gè)開源的輕量級(jí)web自動(dòng)化工具,來嘗試測(cè)試字段最大長(zhǎng)度的更省力的辦法。
思路1: 從頁(yè)面元素得到它的長(zhǎng)度限制,然后生成一個(gè)最大長(zhǎng)度的字串和一個(gè)最大長(zhǎng)度加1(此處用邊界值法簡(jiǎn)化)的字串,進(jìn)行測(cè)試。但困難在于頁(yè)面元素的長(zhǎng)度限制在UI層得不到,只好放棄。
思路2:在整個(gè)頁(yè)面的字段中找到那個(gè)允許長(zhǎng)度最長(zhǎng)的字段,然后以這個(gè)最長(zhǎng)的長(zhǎng)度加1的隨機(jī)串去填充各個(gè)某種特定輸入類型(如textbox或者textarea)的所有字段,保存,看是否每個(gè)字段都報(bào)錯(cuò)。報(bào)錯(cuò)時(shí)頁(yè)面應(yīng)該提示數(shù)據(jù)非法(所有有長(zhǎng)度校驗(yàn)的字段都失敗),且此時(shí)失敗的字段個(gè)數(shù)及相應(yīng)的提示(最大長(zhǎng)度是多少)應(yīng)與數(shù)據(jù)字典一致。(需要人工檢查)如果DB出了異常,我們應(yīng)該可以從服務(wù)器返回的信息或者異常的日志中知道哪個(gè)字段出錯(cuò)。
這個(gè)思路沒有大的問題,但是在我們具體的程序?qū)崿F(xiàn)技術(shù)下碰到了兩個(gè)問題。一、我們程序的頁(yè)面上有些list因?yàn)橐彩莟extbox類型,所以被賦了值非法的長(zhǎng)值。這并不是我們想要的,因?yàn)樗逊欠ㄖ档男r?yàn)的和長(zhǎng)度的校驗(yàn)揉雜在一起了。所以,我通過數(shù)據(jù)字典那邊只抽出需要校驗(yàn)自由輸入的長(zhǎng)度的字段來屏蔽這個(gè)問題。二、我發(fā)現(xiàn)一些系統(tǒng)生成的只讀的
textbox字段,如某對(duì)象的ID,不應(yīng)該通過我們的Sahi程序?qū)⑺闹敌薷牡簟_€
有一些UI不可見的元素,如開發(fā)人員設(shè)計(jì)中特意用到的一些
oid,因?yàn)橐彩莟extbox類型,如果用我們的長(zhǎng)字串代替了就會(huì)出錯(cuò)。所以我僅僅對(duì)UI可見的且非只讀的textbox來做。經(jīng)過上述修正,最后我的方法如下:
準(zhǔn)備工作:
準(zhǔn)備一個(gè)包含兩列的
excel,第一列是需要驗(yàn)證字段長(zhǎng)度的字段名,第二列是該字段允許的最大長(zhǎng)度。當(dāng)然,你也可以準(zhǔn)備一個(gè)三列的excel,其中多一列字段的類型,以便你既可以生成字串又可以生成數(shù)字。
步驟:
1. 打開一個(gè)待測(cè)試的頁(yè)面
2. 跑驗(yàn)證字段長(zhǎng)度的腳本
a. 將excel中每個(gè)頁(yè)面label對(duì)應(yīng)的textbox都填上excel中指定長(zhǎng)度的字符串,然后一起保存。預(yù)期結(jié)果應(yīng)該是保存成功(不因?yàn)樽侄伍L(zhǎng)度的校驗(yàn)而失敗)。以此方法還可以順便就把label拼寫錯(cuò)誤(UI label與數(shù)據(jù)字典label匹配不上)的情況輕松地暴露出來。
b. 將excel中每個(gè)頁(yè)面label對(duì)應(yīng)的textbox都填上excel中指定長(zhǎng)度再加1的字符串,觀察系統(tǒng)行為。如果在前臺(tái)已經(jīng)做了校驗(yàn),則觀察前臺(tái)的提示。如果前臺(tái)不會(huì)禁止掉用戶的超長(zhǎng)輸入,則通過保存來提交后臺(tái),預(yù)期結(jié)果應(yīng)該是保存失敗。