文章轉載于搜狗測試
先說說我們搜狗公司都有哪些服務器端的應用。
1.有web端的服務,包括搜狗搜索、搜狗百科、搜狗搶票、搜狗地圖、12306服務器端搶票等等。
2.有客戶端相關的服務,包括瀏覽器的名單更新服務、客戶端的升級服務、搜狗號碼通的號碼查詢服務,等等。
針對以上的這些服務,我們總結歸納了一下,劃分了兩種類型:
a. 一種,我們稱之為B\S結構,即瀏覽器\服務器結構,也就是各種web應用,這些web應用只與瀏覽器有關,他的web頁面以及各種后臺邏輯均運行在各種服務器上。
b. 另一種,我們稱之為C\S結構,即客戶端\服務器結構,這種產品的客戶端需要與服務器端通過接口進行通訊,同時服務器端還有自己的功能邏輯,在接收到客戶端發送的請求之后會進行處理,然后返回給客戶端。
那么針對以上這兩種不同結構的服務器端程序,我們是如何進行測試的呢?
首先,我們制定了一套完善的測試流程,通過該流程,指導測試、開發、產品、OP運維等同學的工作。在這個流程中,有三個關鍵的環節:
1.我們有“兩會”。
a)產品需求評審會
在這個評審會上,產品會對提出的需求做出詳細的講解,如果各方涉及的人員比較多,還會確定產品負責人、開發負責人、測試負責人。各負責人的職責如下:
i.產品負責人:是這個項目的總負責人,負責各配合方之間的溝通。
ii.開發責任人:包括客戶端和服務端,原則上由客戶端開發為開發的總負責人。
iii.測試負責人:包括客戶端和服務端,原則上由客戶端測試為測試的總負責人。
b)開發設計實現講解會
在這個環節,開發會在接到需求后,組織一次設計評審,在這里主要由開發(包括前端和后端)和測試參加,在會上我們會做以下幾件事情:
i.由開發詳細的講解功能得到設計思路,包括客戶端和服務器端的功能實現
ii.后續的計劃排期
iii.在設計階段就會增加線上的監控機制
經過這兩個評審會之后,測試會給出大概的測試方案,待開發提測后,測試就可以展開后續的測試工作。
2.三種服務器環境
a)測試服務器
我們的開發會將編寫完成的代碼上傳到SVN上,所有測試環境中的代碼均來自SVN,這樣可以保證被測試的代碼與SVN上的代碼是一致的,與此同時,我們也會不斷的關注開發開發SVN上的改動,以便確認測試的范圍和后續的驗證。
b)待上線服務器
待服務器端的功能測試完畢后,會將被測試完成的代碼部署到待上線服務器上,待上線環境的配置與線上環境完全相同。我們會在這臺機器上進行性能相關的測試。
c)線上服務器
待性能測試與功能測試均完畢后,測試會將開發提交的代碼進行凍結,開發會給OP運維部門提交上線申請單,然后由OP運維部門將SVN中測試完畢的代碼部署到線上。待部署完成后,測試會針對線上環境進行上線驗證。
那么測試人員與開發人員如何在這三個環境中進行切換呢?如下圖:
3.一套線上實時監控
我們會針對線上提供的服務進行監控,主要是該服務的接口功能正確性。而服務器運行的穩定性是由OP運維部門負責監控。當發生線上問題時,測試、產品、開發、OP均會收到包括郵件和短信的通知。測試先進行問題確認,并及時給出結果反饋,如果有問題,開發和OP會對問題進行排查,并由測試進行驗證。如果沒有問題,會查當時通知時發生了什么,以便確認問題是被自動修復了,還是線上監控腳本出現了問題。
有了上面的測試流程之后,那么在開發提測后,我們是如何進行測試的呢?針對之前提到的兩種不同的產品類型,我們會進行以下兩方面的測試:
1.功能測試。
2.性能測試。
針對功能測試,我們有兩種不同的測試方法:
1.基于用戶層面的黑盒功能測試
a)根據產品提出的需求文檔,劃分功能,拆分需求點,根據需求點,進行對應測試用例的編寫;
b)在這個過程中,基本上忽略了客戶端與服務器端或前臺頁面與后臺邏輯是如何進行交互的,完全通過客戶端或前端頁面的行為進行功能測試。
2.基于代碼邏輯和服務器配置的白盒測試
a)服務器端配置的正確性與合理性
i.服務器是否有緩存機制;
ii.服務器對連接數是否有限制;
iii.服務器的負載均衡是否合理;
iv.服務器連接的是否有超時設置;
v.各種網絡請求是否使用的是內網IP。
b)接口測試
我們知道一般情況下客戶端與服務器端的數據交互,均是通過http請求完成的。而服務器端通過web服務器將接收到的請求進行處理。這些處理主要圍繞著,對數據的存儲、運算、轉發等操作,并將操作之后的結果反饋給客戶端。所以接口功能的正確與否,會直接反映服務器端功能的正確與否。那么,這對接口我們是如何進行測試的呢?
i.根據該接口的功能,評估該接口定義的合理性與安全性,例如:
1.客戶端發送的網絡請求是否需要帶有時間戳;
2.客戶端發送的網絡請求是否需要有固定的參數,比如客戶端發送的請求中需要帶有版本號等信息;
3.客戶端發送的數據是否需要進行加密;
4.服務器端是否有針對請求發送來源的校驗;
5.服務器端給客戶端返回的數據及狀態碼是否合理。
ii.接口的測試方法
通過編寫測試腳本,針對接口進行測試,步驟一般是這樣的:
1.根據接口定義的參數,確認傳輸的參數都有哪些,可能的正常取值和異常取值;
2.通過腳本模擬客戶端發送網絡請求,對接口進行單獨測試,并對服務端返回的結果數據進行自動化校驗;
3.通過腳本構造用戶的一系列操作,用以驗證系統功能的可用性。
c)代碼功能邏輯測試
i.對服務器端的代碼做靜態代碼走查,主要關注以下內容:
1.定義的變量是否都被初始化;
2.服務器是否有針對客戶端發送的數據進行異常校驗;
3.對數據庫的操作是否有未釋放的情況;
4. 服務器端的判斷邏輯是否存在功能隱患;
5.連接的數據庫環境是否正確;
6.對數據庫的操作是否有關閉操作。
ii.通過編寫單元測試用例進行驗證