1. 程式人生 > >伺服器端測試經驗分享

伺服器端測試經驗分享


先說說我們搜狗公司都有哪些伺服器端的應用。

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.通過編寫單元測試用例進行驗證