
移動測試
最近幾年由于iOS和Android設備越來越普及,移動應用的出現了井噴,大部分都是個人開發者或者小型公司開發的個人應用或者手游。而且隨著iOS和Android的設備和SDK的初步成熟,大量的大型商業公司已經或者準備開發移動應用。對于商業移動應用,穩定性非常重要。對于穩定性,測試就非常重要。由于智能系統越來越復雜和成熟,其上面的應用程序的功能也越來越多,所以自動化測試也就越來越重要。自動iOS在2007年和Android在2008年發布以來,基于這兩個系統的自動化測試工具就初步發展起來。一般情況下最好使用和應用程序開發使用的語言來寫功能測試,但是由于商業應用的業務需求越來越復雜,所以我傾向于使用基于BDD和SBE的測試工具來做業務測試。比如Calabash就是一個十分好用的基于Cucumber[2]的BDD移動測試工具,它同時支持Android和iOS。其Android的實現是基于robotium,而iOS的實現是基于Frank和UISpec。使用Calabash,測試人員可以使用自然語言來編寫的cucumber測試腳本,然后通過在PC上運行cucumber腳本來測試iOS和Android設備上的應用程序。如果你的公司擁有大量的手動測試人員,并且希望進行移動自動化測試,ThoughtWorks針對這樣的公司開發了一套全新的移動自動化測試工具:Lever,他和Calabash一樣,同時支持Android和iOS。測試人員只需要通過打開一個網頁,通過選擇移動應用界面上的特定組件和對其的操作來進行組成自動化測試步驟,多個測試步驟可以形成一個測試場景,最終完成各種自動化測試案例并運行。由于Lever不是開源產品,也沒有公開的詳細資料,所以如果你想了解其詳細功能和內容,可以BQConf上的Lever的專題演講。
Web服務器性能測試
敏捷開發在當今軟件行業里面扮演著越來越重要的角色,軟件測試也隨著逐步敏捷起來。由于軟件系統,特別是服務器系統越來越復雜,規模也越來越大。開發人數也達到幾十,甚至幾百人,而且大規模使用第三方的軟件庫,比如Spring,Rails,Hibernate,.Net等。如果使用不當,將會引起很嚴重的性能問題甚至是穩定性問題,所以性能問題在當前的軟件開發中已經越來越明顯了。常規的持續集成驗證了構建是否滿足了功能設計要求,而持續性能測試增加了另外一重驗證標準,程序是否滿足了性能要求,從而是性能問題盡早被發現。持續性能測試主要的優點就是可以在代碼改變以后可以快速的知道性能變化,比如如果發現性能問題,可以讓提交這個Commit程序員去修復這個問題,因為他還能記住這個Commit。如果等到最后發布之前才發現,那么這個程序員可能已經不記得這個Commit,或者已經離開了公司,有可能導致修復這個問題的難度大大增加。如果這個是一個設計上的錯誤,那么團隊就可以盡早修復它并避免以后的功能受其影響。
比如鐵道部的12306購票系統上線后的第一個春節就遇到了嚴重的性能問題,面對預料中的高訪問量,系統在春運期間經常長時間無法訪問,導致大量用戶無法購票。像這樣嚴重的性能問題是在開發的時候是可以預見的,不過還是出現在產品環境上,由此可見系統在構架上沒有對性能進行有效的設計,在測試上沒有進行有效的性能測試(由于12306產生這個性能問題的原因很復雜,我們這里不做過多討論,比如各種組織和利益等原因,也不討論怎么解決。)。當這個性能問題出現的時候,根本無法在短時間內修復,導致了如此嚴重的性能問題維持了很長一段時間。在第二年的春運里面,系統才增加了排隊系統,有效的緩解了性能問題,不過還是會時不時出現無法訪問的情況。由于12306是中國唯一的網上火車票購票系統,就算出現這樣嚴重的性能問題,人們還是只有繼續使用它。但是如果有多個購票網站,一旦某個出現了性能問題而導致客戶長時間無法訪問,那么就會帶來大量的客戶流失,造成巨大的損失。因此性能測試對擁有大量用戶軟件系統十分重要,而且需要越早發現性能問題,越早修復越好,因為等到發布前,就算測試出性能問題,也有可能因為構架問題而無法修復。
讓性能測試成為敏捷開發的一等公民對于更好的進行敏捷開發和高質量的持續部署越來越重要。持續性能測試不應該只是說說,特別是對于大型服務器項目和開發人員眾多的情況下,持續性能測試將成為必不可少的組成部分。持續性能測試應該被看做持續交付的重要步驟,應該和回歸測試一樣,可以做到更頻繁的高性能持續交付。在2013年5月發布的ThoughtWorks技術雷達中,讓性能測試成為敏捷開發一等公民已經被列入了ADOPT。對于當今的軟件系統,特別是對于大型服務器系統,并且它又擁有大量用戶的情況下,持續性能測試將成為一個必不可少的組成部分。讓我們一起去實踐持續性能測試,比如新一代的性能測試工具Gatling 就是一個很好的試驗田,通過它,我們可以很好的實踐對于服務器系統的持續性能測試。
Web自動化功能測試
在過去幾年,由于Web2.0的出現導致了Web的第二春的到來,并且我知道的公司和客戶們都非常重視Web自動化測試,并且使用率也很高。但是我發現很多測試人員還在使用Selenium IDE或QTP等。對于Selenium,我認識的一般的測試人員只會使用Selenium IDE進行測試錄制,然后使用“重播”進行測試。對于通過Selenium IDE錄制的腳本是非常難以維護的,導致測試步驟的更改之后一般只能重新錄制。對于開發中的項目的其Cost非常高,所以在實際中使用的效果很不好。
對于當前廣泛使用的Agile的開發模型,Selenium IDE的方法基本不可用,所以需要更新到Selenium WebDriver(Selenium 2.0)。Selenium WebDriver提供了一套支持各種語言的WebDriver API,比如Java,Ruby, Python等。通過這套API用戶可以啟動各種不同的瀏覽器,比如IE,Chrome,Firefox等,并且通過API可以讓瀏覽器訪問不同的網頁,模擬點擊和輸入等,獲取網頁中的內容等。使用WebDriver API比老的Selenium IDE帶來了更多的好處,更為適合Agile開發,測試流程更為靈活,維護更為方便,測試流程更為清晰易讀,斷言也更為多樣化等。但是對于測試人員也有一個麻煩,就是至少需要學習一門語言來開發測試案例。驅動Selenium WebDriver的測試可以使用xUnit或者各種BDD框架。
如果你們使用的是Ruby On Rails開發的Web系統,或者你想嘗試一種新的快速的開發方式,你還有一個選擇就是Watir。Watir是一個使用Ruby開發的測試API,和WebDriver API類似,而且它自帶和Rails集成的組件,所以對于Rails的Web系統它有天生的優勢。
由于Web Service的流行以及用戶UI的需求越來越復雜,Web開發已經由MVC的模型發展到MVP和MVVM模型。由此一來前端的邏輯復雜程度和代碼量(如Javascript等)就會大大增加,由此帶來的問題就是測試量也會大大增加。對于如此大量的Javascript代碼邏輯層的測試,并不適合使用做UI層功能測試的Selenium。所以我們應該在Javascript層做自動化測試。基于Javascript的自動測試框架很多,由于我傾向于Agile和BDD,所以我傾向于Jasmine,Mocha和Karma。其中Jasmine是一個支持BDD的自動化測試框架,而Macha是新的基于NodeJS開發的支持BDD的自動化測試框架。而Karma是一個自動化測試運行環境,它也是基于NodeJS開發的,Jasmine和Macha都可以在其上面運行。Karma支持多種browser,比如Firefox,Chrome, IE等,而且它使用也比較簡單。
Windows 應用程序測試
雖然Web從上個世紀90年代開始崛起,到現在的空前盛世,但是任然有很多公司仍在開發和維護Windows應用程序。并且Windows應用程序的開發也從C++和MFC時代進入了.Net 和Silverlight時代。但是Windows應用程序的測試一直都是一個不大不小的問題,雖然有很多商用且成熟的自動測試系統,比如Test Complete和QTP等,不過大部分是基于錄制或者Action模型來創建測試,更沒有提供現代流行的腳本支持,比如QTP使用的是VBScript,更不用說BDD的支持。在Agile的時代,測試工具API化才是一個正確的選擇,如果能支持DSL那就更好了。使用API后,可以獲得良好的可維護性,并且可以更為容易實現CI和CD。幸好有一幫志士開發了一套針對Windows應用程序的免費自動化測試框架White,以及.Net的BDD框架SpecFlow。White封裝了Microsoft's UIAutomation Library,并提供了一套簡單易用的API。它支持Win32, WinForms, WPF, Silverlight and SWT (Java) platforms的應用程序,并且通過MicroSoft Windows SDK里面的Inspect工具可以非常容易的找到應用程序中UI控件的ID來進行自動化測試。
Web安全
安全,一個即神秘又興奮還憂心的話題。其中安全世界里面的東西太多太多了,比如服務器安全,移動安全,網絡安全,殺毒軟件,入侵檢測等等,不過今天我只想說說Web的安全。Web,在前面我已經用了各種的詞匯來描述它的現狀。正是由于它當前這種現狀,我們不得不特別關注它。所以有一批黑客發起了一個關注Web安全的公益性項目OWASP(Open Web Application Security Project)。在這個項目里面,有各種關于Web安全的資料,比如文檔有《OWASP安全編碼規范快速參考指南》,《OWASP測試指南》 和 《OWASP安全風險Top 10 》2013年版等, 以及各種安全測試和培訓工具,比如ZAP和WebGoat等。其中ZAP是一款簡單易用并且免費的Web安全掃描工具,使用在針對網站滲透測試過程中的檢測網站步驟中,并且很容易的和maven以及CI進行集成。由于它是由java開發的,所以也支持多種操作系統,比如Windows和MacOS等。而WebGoat是一個漏洞百出的J2EE Web應用程序,這些漏洞是故意設計用來演示Web應用程序安全課程的。這個應用程序提供了一個讓用戶可以真實去實踐和學習的平臺,讓用戶可以真實看到漏洞以及嘗試去修復這個漏洞。
除了上面介紹的免費工具和練習平臺以外其實還有很多其他的免費和商業版本的工具和平臺,比如w3af,Burp,metasploit,Google’s Gruyere等。我暫時還沒有用過這些,有興趣的同學可以自己去學習研究。最后如果大家想學習和使用這些工具,并練習Web的安全問題,比如OWASP Top 10,可以使用Maven公司的Web Security Dojo就可以非常方便的進行。
總結
對于測試人員,需要了解各種測試方法,測試策略和測試工具,隨著軟件行業的迅速發展也需要更新它們,比如視覺感知測試, 移動測試,性能測試等等。但是隨著Agile越來越普及,持續集成和持續部署的廣泛使用,以及BDD的興起,學習腳本將會成為測試人員的一門必修課。不要再猶豫了,更新自己吧,要知道不進則退哦。