軟件測試早已成為一門學科,它也是傳統軟件開發周期中重要的環節。在互聯網行業,網站測試也是必不可少的。回憶在自己的技術成長過程中,從中可以看出測試工作越來越被企業重視(自身所在環境):
- 2004~2006:以學習技術為主,偶爾開發小軟件(VB)和個人站點(ASP),完全沒有認識到測試的概念,只是在開發過程中完成功能測試,記得當時ASP漏洞橫掃一片……
- 2007~2008:為學校官方做一些網站,自己聯系老師收集需求,從網上找PSD模板,Table布局,最后用ASP/ASP.NET連接Access 實現功能。08年從事一家科技公司“生產”企業站,由美工完成效果圖,自己完成剩余的工作,銷售會配合技術人員完成一些功能測試,並沒有完全認識到兼容性的問題,當時還都是以IE6為主。
- 2009~2010:09年從事第一家互聯網公司,開發B2C商城,此時的技術團隊成員雖少,但每個成員的工作內容划分很明確。由設計人員完成網站的主體設計(LOGO、首頁色調),美工兼前端(DIV+CSS)完成網站效果圖的設計和網站頁面的布局,當時的JavaScript還主要由后台開發人員編寫。團隊中沒有專業的測試人員,相關測試工作都由開發者來完成,比如前端開發人員要完成網站兼容性測試,后台開發人員要完成具體的功能測試,在網站上線前會由相關編輯及運營人員配合測試系統。10后半年嘗試傳統軟件開發行業,套用頁面模板進行功能開發,有專業的測試人員和項目管理流程,測試人員根據需求文 檔完成產品的功能測試,測試工具和測試方法還都不全面。
- 2011~現在:重新回到互聯網公司,從頭開始一個“親子門戶網站”的開發,技術團隊的組成參考“第一章、團隊建設”,測試組在團隊中發揮着重要作用,本篇文章主要分享自己在整個項目周期中,有關測試所整理的總結。
6.1 測試環境
從網上找到一個公式:測試環境=軟件+硬件+網絡+數據准備+測試工具
6.1.1 硬件環境
在“第二章、環境搭建”中介紹了采用“虛擬化”來解決測試環境中的硬件問題,根據實際需求模擬多台操作系統來部署網站。在我們網站的測試過程中,有以下測試專題需要特別硬件支持:
- 壓力測試:在“虛擬化”環境中對網站進行壓力測試時,本地“虛擬化”系統的吞吐量和網絡流量有限,無法模擬出高並發的訪問量,可以借助公司內部交換機,在多台員工機器安裝LoadRunner客戶端進行最大化壓力測試。
- 穩定測試:在進行網站功能測試時,可以把網站“最小化”部署到單台虛擬機上,只要能保證網站可以正常運行而不影響功能測試。對網站子功能進行穩定性測試,利用“虛擬化”模擬發布環境,根據需求搭配必要的硬件,並且為網站填充適量的數據進行穩定性測試。
6.1.2 軟件環境
在“第二章、環境搭建”介紹了網站所使用的軟件和技術,開發組在發布第一個測試版本時需要協助測試組來部署網站的運行環境,也可以參考《項目配置說明書》。在部署軟件環境時,需要注意以下事項:
- 軟件版本:測試環境需要和生產環境使用一致的軟件版本,避免出現意想不到的Bug,可以在公司內部搭建文件服務器,由專人進行維護和更新,大家統一從文件服務器下載軟件,防止病毒和版本不一致的問題。負責編寫《項目配置說明書》的人員,需要在文檔中寫清楚軟件的版本號和下載地址。
- 統一環境:在測試環境中,一定要具備和上線后一樣的網站運行環境,測試人員才能最大化覆蓋系統的Bug,同樣運維專員在具體實施過程中也有“樣板部署”可以參考。
6.1.3 參考資源
測試組在對項目進行測試時,需要參考其它部門或小組交付的文檔和資源。
內部文檔
在測試過程中,測試組主要參考以下文檔:
- 功能性測試:《產品原型說明文檔》、《產品開發規格說明書》
- 穩定性測試:《產品技術架構說明文檔》
- 數據庫結構驗證測試:《產品數據庫結構說明書》
- 安全性測試:《產品安全測試標准化流程文檔》
效果圖和靜態頁面
除了參考文檔外,還可以參考效果圖對網站整體進行“黑盒測試”,效果圖是原型文檔的具體實現,在測試過程中如果有疑問需要及時和產品經理進行溝通。
6.2 測試工具
6.2.1 常規測試
網站的常規測試是指功能測試,在不同測試周期可以采用不同操作系統和瀏覽器對網站進行常規測試,此處用版本對照來舉例說明:
- 內部測試版本(Alpha):網站部分功能還沒有開發完畢,此時測試組可以采用開發組推薦的測試環境(Firefox、Chrome) 只對交付的程序進行功能測試。
- 公開使用版本(Beta、Release):采用網站目標群體使用最多的系統和瀏覽器,比如“Windows XP+IE6”。
注:目前項目並沒有引入TDD開發方法,只能對網站進行“黑盒測試”。
6.2.2 工具介紹
測試管理
測試工具
- QTP:自動測試工具,使用QTP的目的是執行重復的手動測試。
- LoadRunner: 預測系統行為和性能的負載測試工具,主要對網站前台進行壓力測試。
- WcfStorm:用於測試WCF和WebService的工具,支持傳輸Object[]類型。
- Webscarab:是一款代理軟件,用於對網站進行手工安全測試,主要功能包括HTTP代理,網絡爬行、網絡蜘蛛,會話ID分析,自動腳本接口。
- 其它:AppScan、Xenu
6.3 測試方法
6.3.1 功能測試
無論是在網站開發過程中還是網站開發完畢后,當把發布的網站程序交付給測試組時,測試人員首先開始對發布的網站程序進行功能測試。在進行網站功能測試 時,需要參考《產品原型說明文檔》和《產品開發規格說明書》。這兩個文檔對網站功能以及每個頁面呈現都描述的很清楚,甚至對每個表單所要輸入的字數限制都有要求,測試組會嚴格按照需求對網站進行功能測試。
對於一些重復性的功能測試,可以采用自動化工具進行批量測試。比如:鏈接是否可用、重復表單數據輸入、批量填充數據庫數據等。
6.3.2 安全測試
個人認為互聯網項目安全性是最重要的,無論功能做的再完善,用戶體驗做的再好,如果不能保證項目的安全性,會導致項目在運行過程中存在着安全隱患。在項目的架構時期就應該考慮安全設計,並且開發人員要有構建Web站點的安全意識和經驗,測試人員也需要具備安全測試的技能。以下推薦一些安全方面的資料:
- 《Web 安全測試》:講解一些Web安全知識,也介紹了一些安全測試工具的使用。
- 設計安全的Web應用:介紹了Web站點流行的“csrf”攻擊手法和防范措施。
- 做好網站安全的縱深防御:InfoQ針對之前互聯網公司用戶信息泄露事件做的專題,文章底部有相關安全鏈接。
寫文章之前對鄭州幾家還不錯的互聯網項目進行了簡單的安全測試,多多少少都存在有安全漏洞,之所以存在這些問題,首先開發人員對安全意識不夠,測試人員 或許就沒有對網站進行安全測試。我們的網站在上線前,對項目所存在安全隱患進行了總結,整理為文檔對測試組進行了培訓,這里會介紹一些常見的安全測試方法。
在進行安全測試前,項目負責人要說明項目所存在的安全隱患和安全測試點,以及目前項目所做了哪些安全防范,測試人員參考文檔來驗證安全問題,如果測試人員具備安全測試技能,可以在進行功能測試時,同時對功能點進行安全測試。目前項目表格如下:

每個工具的具體使用方法可以Google,對Web站點的業務邏輯進行測試時,最常用的工具是“Webscarab”,使用它可以截獲HTTP的請求和 輸出,並可以修改Cookie,通過它來繞過客戶端驗證,測試服務器端是否采用相關安全措施。上圖介紹了Web站點常見的安全項目,嘗試了幾個站點,多數 都存在以下問題:
- 服務器端缺少驗證:網站表單提交只采用了前端JavaScript驗證,通過Firebug或者Webscarab可以偽造數據破壞系統業務邏輯,比如“用戶名長度”、“郵箱格式”、“相關必填項”、“腳本注入”等。
- 權限控制:網站特殊業務邏輯的權限設計不夠謹慎,之前測試一個網站,當用戶登陸成功后,可以通過傳入具體站內信標識刪除其它會員的站內信,並可以根據任意用戶訂單號查看訂單明細等權限漏洞。
- 文件上傳:只采用客戶端驗證文件擴展名和文件大小,當通過手工POST上傳文件超過需求文件大小時並沒有相關的攔截提示,只有文件上傳完畢后服務器端才判斷文件大小有問題,這樣會嚴重影響服務器的網絡帶寬。
- 驗證碼:在提交表單時,通常采用驗證碼來防止客戶端惡意提交或者暴力破解用戶信息,有些網站甚至把驗證碼明文存儲到Cookie當中,這和沒有驗證碼有什 么區別呢?另外有些網站把驗證碼存儲到Session當中,但是提交表單成功后並沒有銷毀當前驗證碼,而只是在當前頁面重新加載時重新給Session ID賦值,這也是一種錯誤的使用方法。當客戶端第一次輸入正確的驗證碼后,提交表單並攔截頁面輸出,利用工具使用之前正確的驗證碼進行重復提交,這樣的驗證碼也相當於沒用。有關驗證碼識別就不介紹了,屬於另外攻擊手段。
- 腳本注入:最常見的Web站點攻擊方法,參考“設計安全的Web應用”。
- SQL注入:這個就更不用介紹了,參考“SQL Injection”, 常見的解決辦法有“參數化傳遞”、“存儲過程過濾”或者采用第三方工具“UrlScan”。
- ……
注:本節只介紹網站本身的安全測試,有關操作系統以及應用軟件本身的安全可以使用“及時更新安全補丁”和“最小化安全設置”的原則。
6.3.3 兼容性測試
在做產品規划時,就應該決定網站所針對人群和所能運行在什么平台,這些屬於網站的基礎需求,只有確定這些后,前端才可以做相應的取舍,根據平台和瀏覽器的特性設計前端部分代碼。可以通過“虛擬化”來構建兼容性測試所需要的測試環境,優先用戶使用最多的平台和瀏覽器進行測試。
平台測試
- Windows:xp、2003、2008、7
- IPad
瀏覽器
- IE
- Firefox
- Chrome
- Safari
- Opera
- 山寨瀏覽器:360、搜狗、世界之窗等
分辨率
- 標准:1024×768
- 小於:800×600等,產生滾動條。
- 大於:1280×800等,顯示大背景。
測試工具推薦
- IETester:支持多標簽來測試IE系列瀏覽器。
- SuperPreview:微軟提供的工具。
- 在線測試:http://browsershots.org/、http://spoon.net/browsers/
開始進行兼容性測試前,可以看一些有關瀏覽器內核和工作原理的文章:
6.3.4 性能測試
網站的性能可以通過很多手段來提高,針對不同的階段和場景采用不同的方法,推薦一本書給開發人員參考《構建高性能Web站點》。
加載速度
測試頁面和頁面元素的加載速度,查看整體頁面在穩定網絡環境(內網)下的加載速度,發現問題並提供給開發人員分析,網站上線后可以通過一些第三方服務(http://www.webkaka.com/)查看網站在各地區的訪問速度。
壓力測試
網站上線前我們需要對整個網站和一些核心組件(數據庫訪問)進行壓力測試,有些問題在開發階段是無法呈現的,而在多用戶並發訪問時就會出現問題。我們在開發數據庫訪問組件時,會建立一些demo頁面,使用“LoadRunner”對這些頁面和操作進行壓力測試,查看數據庫組件的相關性能和在特定環境下所 支持的並發率(操作時間上下限)。整個網站的壓力測試受限於測試場景,要在穩定的網絡環境中和特定的硬件條件下,分析網站功能並錄制多個常用的用戶操作場 景,並對這些場景進行壓力測試,分析測試結果並對網站進行優化。
具體有關“LoadRunner”的使用方法可以參考網上的一些教程,這里提供一個快速入門的系列“當DiscuzNT遇上了Loadrunner”。
6.3.5 穩定性測試
網站穩定性是指在有特定“數據量”和“訪問量”的前提條件下,可長時間正常運行。有些問題只有在運行一段時間后才會發現,做好網站的日志系統,記錄網站在運行過程中的記錄和錯誤日志,對這些問題進行分析並解決。
本系列目錄:2011 年終項目總結
