已經上線運作的網站系統,使用者又提出會動搖國本的核心功能修改需求,此時你會?

1) 警告使用者修改後可能導致家破人亡,然後立即裝忙忘記使用者曾說過什麼?
2) 硬著頭皮改完,苦著一張臉花十八小時把所有相關功能重新測過一次
3) 修改程式後即刻上線,將使用者編制為”虛擬測試團隊”,等著蒐集”虛擬測試員”回報的Bug

測試工作很煩人卻很重要,尤其理論上系統只要經過修改,就應該再做一次完整的系統測試,避免修掉一個Bug又冒出兩個Bug的鳥事。但將所有的網站功能操作做完一輪可能得耗上數小時,誰能有此等耐性在每次修改後都演一次鐵杵磨成繡花針的悲情戲? (如果真有人樂此不疲,建議該去醫院精神科掛個號,檢查一下是否罹患了強迫性精神官能症?)

比較好的做法是將這些測試程序自動化,把枯燥的工作丟給不會喊累不會嫌煩的機器人,避免自己陷入手工測試的無間地獄,把時間拿來做更有意義的事。

看過好多人都有驚人的耐性不厭其煩地一測在測,沒有耐心的我自嘆弗如之餘,只能去找來自動測試的工具—IEUnit(目前還有Selenium等其他選擇,但我IEUnit已經上手,各功能也都齊備,就沒想要換),一開始要投入很多時間熟悉工具,撰寫Test Script,但之後就可以翹著二郎腿用一根手指頭搞定系統測試,算是先苦後甘。

關於IEUnit的介紹,以下是我早先發表在RUN!PC雜誌的文章,給大家參考。

文章下載


Comments

# by A*lan~

小弟拜讀大大的Blog很久,也潛水很久~呵 第一次浮出水面,和大大請教 小弟試了IeUnit後,確實好用也產生出測試結果的XML,可是就是一直找不如何將xml結合NUnit2Report產生的測試報表,所以可以請大大解答嗎?多謝! 還有一件事就是和大大偷師,小弟也改用ASPNIX的空間,真的很穩定,謝謝! 請問您右邆Live traffic feed是怎麼抓到國家的呢~有參考嗎?謝謝,一次問了二個問題~希望不會造成您的困擾!

# by Jeffrey

To A*lan, 幸會了。 1) NUnit2Report的細節已經被劃入中年人的壞軌區,不復記憶~"~a。試過NAnt了嗎? http://nunit2report.sourceforge.net/NUnit2Report.Usage.NAnt.html 2) Live traffic feed是一個免費服務FeedJIT,詳細介紹可以參考異塵行者的Blog http://playpcesor.blogspot.com/2007/08/feedjitblog.html 裡面有超多新奇又有趣的新東西介紹,值得訂閱。

# by clarkluo

您好: 使用IeUnit時,遇到彈跳視窗-->請按確定時,就當住,就必須手動按才會繼續自動執行下去。 請問這點該如何解決呢?謝謝!

# by Jeffrey

to clarkluo, 你可以參考我的文章,看要不要採行IeUnit\Samples\ApiTest\SupressPopupWindow.jst裡用的偷天換日法解決。

# by clarkluo

偷天換日法?? 我試過IeUnit\Samples\ApiTest\SupressPopupWindow.jst 的語法,結果自動登入帳號時,仍會顯示請按確定的視窗,目前仍試不出來,不知該如何解決呢?謝謝!

# by Jeffrey

to clarkluo, IE的登入視窗(輸入帳號密碼)跟alert()的Popup是不一樣的東西,小心不要混淆了。 SuppressPopupWindows.jst可以解決alert()的問題; 至於自動登入的部分,則要看文章第8頁提到的openWindowAsUser解決(在中文環境下需要修改Win32Dom.js解決比對文字的問題, 見第9頁)

# by nic

Hi guy, Can I ask you a question?? 如果我在一個網頁上有個必要填寫的Table沒有填寫,然后點擊save出現提示'需要填寫**',假設這個字段填寫,則會轉到另外一個網頁,應該怎樣去編寫script來顯示未能成功. Best Regards, It is my email:nic.pei@audacee.com

# by Jeffrey

to nic, 不是很確定你的問題,我猜你想問的是,如何用IEUnit去測試網頁有正確顯示"需要填寫***"的提示有發生效果。 我想到的方法是,假設欄位未填提示是用alert("需要填寫***");顯示的,那麼我們可以改寫window.alert = function(msg) { document.body.setAttribute("AlertMsg", msg); },如此,呼叫alert("AAA")時,並不會真的跳出確認對話框,IEUnit Script則可以由document.body的Attribute去讀取原本要alert的Message檢查是否符合預期,大概的構想就是這樣。

# by nic

多謝大大的幫助!我明白了! 我研究了一天都沒有能夠產生出測試結果的XML文件,小弟技術比較有限,請你給小弟一個幫助!怎樣把很多testcase的執行結果產生到XML文件或者其它的形式來觀看結果呢

# by Jeffrey

to nic, IeTextRunner.wsf有個參數-xml <result-xml-file-path>可以將結果輸出成XML檔案,不知你嘗試過了嗎? 應該可以滿足你的需求。REF: http://ieunit.sourceforge.net/TestFramework.html

# by Nic

感謝你的幫助,我試過這個了,確實書出來XML格式的檔案,這幾天有點時間我就研IeUnit.不過我還是覺得找不到很好的能夠學習好這個工具的方法!因為我的基礎比較差,我發現sample文件夾下的APITest非常有幫助,我已經下載了你寫的那篇文章仔細學習了,學到很多,希望你有其它的關于IeUnit的資料可以Share,小弟感激不盡,因為網絡上這方面的東西真的很少!!

# by 小煎

Dear Jeffery: 這篇文章超棒的啊 (included 你的那篇 DKTD-IEUnit.pdf 的文章) 雖然我很晚才發現 但是我受益良多唷 謝謝 :D

# by Cupoo Lin

Hi Jeffery, 感謝你的這篇文章,對我熟悉這套軟體有很大的幫助!! 但是現在遇到一個瓶頸,項請問你是否有解決的方法 在IE7開啟某個網頁塡好帳號密碼送出後,會開啟一個彈跳視窗,而原來的主視窗會在被強制關閉前,跳出一個確認視窗 "您正在檢視的網頁嘗試要關閉視窗,您是否要關閉此視窗" 對IE7來說,主視窗是不能被關閉的,安全性的問題! 我試過下面幾種方式 1.SupressPopupWindow.jst的語法 this.win.confirm = function() { return false; } 但我是放在test case開始的第一行,不確定這樣用法對不對(因為我不是要關閉元視窗,所以回傳false) 2._.seekAndSetWindow("Windows Internet Explorer",true); _.closeWindow(); ->這個完全沒反應 想請問你,我的用法是否有錯誤,或是還有其他方法可以關閉確認視窗? 請賜教~謝謝

# by Jeffrey

to Cupoo, 你可以試試保哥教過的這一招: http://blog.miniasp.com/post/2008/01/How-to-force-close-the-browser-window-in-IE.aspx 讓IE7被JS關閉時不要再跳出警告。

# by Cupoo Lin

Hi Jeffery, 謝謝你撥空回答我的問題,不過因為現在算是在study的階段,所以可能沒辦法從改code下手... 不知道從IEUnit的method能不能做到這類的功能呢? 另外再請問一個問題,IEUnit可以用來做壓力測試嗎?有沒有什麼方式呢? 非常感謝

# by Jeffrey

to Cupoo, 我的想法是利用IEUnit Script去操作Web Page的DOM,透過保哥說的技巧迴避這個問題,倒不一定要改Web Page的內容(我也常用這招,例如網頁中的alert或confirm,在測試時才偷偷由IEUnit Script換掉)。我有用過IEUnit做過壓力測試,方法跟寫一隻程式用Mutithread去叫用IEUnit Script,不過發現這樣Loading會落在Client上,一台PC只能跑十來個Instance,CPU就滿載了。

# by Cupoo Lin

Hi Jeffery, 非常很感謝你的回答喔!初次使用這套軟體時,你的文章真的給了我很大的幫助!感恩拉~

# by Cupoo Lin

Hi Jeffery, 你好,能否再請教你一個問題! 我用了你給我的方法,確實可以關閉網頁而不跳出確認視窗(再次感謝~)。 但現在發生了另一個問題,因為要被測試的網頁是開在popup視窗裡的(登入後,原視窗被關閉,只留下popup視窗),所以在登入頁面被關閉後,IEUnit就失焦了,無法繼續執行下去! 我試過_.seekAndSetWindow(),也沒有辦法設定在popup的視窗...請問有辦法可以讓它重新接上繼續執行嗎? 另外之前請教過你有關壓力測試的問題!因為我本身不是RD,程式也還在學習中,所以能不能請你在多給我一些這方面的訊息 非常感謝!

# by Jeffrey

to Cupoo, 有點不理解,popup視窗開始原視窗闗閉這是正常的該介面預設的操作順序嗎? 主視窗叫Popup->原視窗關閉->Popup視窗又關閉,看起來不太像一般的網頁操作流程...

# by Cupoo Lin

Hi Jeffery, 抱歉,可能我描述的不是很清楚~ 應該是 開啟登入頁面->輸入帳號密碼點選登入->跳出IFrame開啟的視窗(要被測試的頁面)->此時登入頁面還在,且跳出登入頁面是否關閉的確認視窗(IE7的popup) 在還沒始用"window.open('','_parent','');"之前,我是登入後,在是否關閉的確認視窗手動點選"否"(點選是的話IEUnit也無法繼續走下去),讓IEUnit自己關閉登入視窗,並且seekAndSetWindow到新開的頁面 但若使用"window.open('','_parent','');"視窗會直接關閉,IEUnit測試程序就斷了,我有在之後放alert,但是跑不到。 不知道是否有其它方式可以接上測試程序呢? 謝謝你的回答~

# by Jeffrey

to Cupoo, 確認一下,是登入畫面A內嵌IFrame載入畫面B(要測試的對象),然後畫面A要結束? 感覺上還是沒有很懂你說的情境,我在噗浪開了一條討論串,在上面繼續交流討論好了: http://www.plurk.com/p/1ahzuh

# by Brad

你好,小弟拜讀之後拿來自已的web ap上用(註冊程序)使用,但第一關就卡住了 程序是一開始load page時,會先跑一個alert 說明 寫法大至是這樣 <script> alertMessage() {alert('說明...');} </script> <body onload="alertMessage()">...省略 我採用了大大的建議,用了 => _.win.alert =function() {return true; } 但發現除了一個onload出來的alert 依然存在,但後面的alert都不會出現 (手動測試加的),也就是有效,目前上網實在找不到資料,才來請教一下 不曉得是否有其他解法 >< 請踢教 謝謝

# by Jeffrey

to Brad, 我想問題出在IEUnit跑"_.win.alert =function() {return true; } "的時機總是在<body onload>之後,所以錯過了第一次執行。依我的看法,若Web Page不能做任何修改,恐怕很難突破這個先天上的限制。

# by Brad

感謝你 Jeffery ~ 因為在寫web page時,onload後的alert 很常遇到,所以才這樣試試看,不過我發現如果手動按下alert的確認鈕後,會繼續進行後面的流程作業,所以我拿了滑鼠連點程式;在計算好時間來模擬按下alert的時間,雖然解法有點怪,而且有按錯的可能,但還算是可以使用,謝謝你的回應

Post a comment