qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          QA 應該更新的測試工具

           2013,一個即忙碌又精彩的一年。雖然它已經過去,但是總想寫點什么總結一下。作為一名QA,過去一年是我的軟件質量知識體系和自動化測試知識體系收獲最豐的一年,讓我對于軟件質量和自動化測試有了一個更高層次的認識。所以我寫下了一些自己更新了的知識,以及在和其他公司的QA交談之后發現的一些他們應該更新的知識。借此希望能對各位看官起到一些提示或者補充作用,當然我也希望各位與我進行聯系,并共同探討未來的QA到底應該具有什么樣的能力和知識體系。
            Web應用程序視覺感知測試
            視覺感知測試,對于很多QA,包括我在2013以前對于它的認知都是手動測試領域的一個成員。在這個Web系統爆炸的年代,Web UI界面布局測試,多瀏覽器測試,CSS的refactor等都成為了Web UI測試的痛中之痛,特別是大型Web應用的功能回歸測試量太大,從而導致很多時候根本無法完成,所以很少會有團隊去做全方位的UI界面布局回歸測試,特別是對于使用Agile流程開發的團隊就更加困難。
            為了緩解這樣的困境,不斷地有人思考怎么自動化UI測試,我以前的公司就有人嘗試在手機上做自動UI測試,但是最后也沒有什么成效。最幾年,Web應用程序發展得如火如荼,所以在去年,就有兩個工程師,一個來自于Google,一個來自于ThoughtWorks就在嘗試解決Web應用程序測試上的這個問題。不過他們的思路和以前不一樣,不是想做一個全自動的UI測試框架,而是基于Agile的持續集成和持續部署的概念上,使用半自動的方法來減少UI回歸測試的時間,從而減少WEB應用程序UI回歸測試的時間。
            來自Google的工具是Dpxdt,而來自ThoughtWorks的是Viff. 這兩個工具的基本原理都是類似的,只是使用了不同的語言開發,以及適用的范圍有點區別。
            Dpxdt是基于Python和PhantomJS開發的一個Web Service系統,其中PhantomJS可以理解為一個沒有UI的瀏覽器。用戶使用其提供的RESTFul API可以十分方便的對比兩個頁面,而且它還提供一個功能十分強大的報表系統。 對于全部是靜態頁面的Web系統來說非常適用,不過對于需要手動導航,比如需要進行輸入,點擊等之后才能進行比較的頁面,它現在的版本并不適合。它還提供了一個方式可以把他很方便的部署到GWS上,所以對于國內在GFW下的用戶可以暫時不用考慮這個功能。
            Viff是基于NodeJS和Selenium開發的一個本地工具。通過編寫JavaScript代碼來調用Selenium API, 并在真實的瀏覽器中進行截圖比較。所以它比較適合動態的Web系統,因為可以編寫代碼模擬用戶輸入和點擊操作。由于它底層使用的是Selenium作為驅動,所以他支持多種瀏覽器,比如IE,Chrome,Firefox等。在最新的Selenium中加入了對Android和iOS的支持,不過現在還不是很穩定,所以Viff還支持Android和iOS上的瀏覽器測試。如果對你來說搭建多瀏覽器環境比較困難,比如需要同時測試IE8,IE9,IE10等,可以選擇BrowserStack。
            BrowserStack是一個商業產品,他同時通過Web界面和API接口提供多瀏覽器環境給客戶進行Web測試,Viff可以使用期API進行進行多瀏覽器截圖。對于Viff,由于編寫JavaScript代碼也需要一定的門檻,所以對于沒有代碼能力的使用者在測試靜態網頁的時候應該選擇Dpxdt,但是如果你有一定的代碼能力,建議選用Viff。現在Viff正在開發Web Service功能,這樣以后就可以作為一個Service進行部署和使用。
            不過現在這兩個工具都還不是很成熟,還存在一些Bug,其中Viff還在繼續開發新的功能中,不過基本使用還是可以的。如果在使用這兩個工具的過程中發現任何Bug,請通過Github的Issues跟蹤功能來及時反饋給作者,幫助這兩個開源系統越來越好。我在BQConf上有一個Perceptual Testing的演講,有興趣的可以聽一聽。
            下圖為實施了視覺感知測試之后對于Web系統回歸測試的時間示意圖:

           移動測試
            最近幾年由于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的興起,學習腳本將會成為測試人員的一門必修課。不要再猶豫了,更新自己吧,要知道不進則退哦。

          posted on 2014-02-24 10:39 順其自然EVO 閱讀(498) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年2月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          2324252627281
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岢岚县| 江口县| 麻阳| 吕梁市| 奎屯市| 交城县| 宝坻区| 北碚区| 明溪县| 通化市| 江城| 台东市| 浠水县| 大庆市| 抚顺县| 永寿县| 绥棱县| 灌阳县| 高碑店市| 巩留县| 集安市| 延津县| 唐海县| 诸暨市| 叙永县| 北辰区| 清苑县| 多伦县| 尚志市| 绩溪县| 武鸣县| 东乡族自治县| 九寨沟县| 吴堡县| 崇左市| 贵州省| 平度市| 望城县| 万全县| 三明市| 静宁县|