MSDN: 測試應用程序,Test apps early and often ,Improve Code Quality
推薦書: 《Visual Studio 2015高級編程》 《Visual Studio 2012應用生命周期管理高級教程》
推薦資料: DevOpsHub 文檔中心
一、UI Test
這里所講的UI Test主要是基於MS的Code UI Test和Selenium。
1.Code UI Test不僅可以給予web browser,還可以基於普通的客戶端exe的程序,十分強大,不過它只適用於.net。如果用它來測Web項目,它默認只是基於IE的,其他的瀏覽器它會當成普通的客戶端程序處理。如果需要測其他瀏覽器需要安裝Selenium components for Coded UI Cross Browser Testing,詳情可以參考Using Different Web Browsers with Coded UI Tests。
參考文獻:
MSDN: Use UI Automation To Test Your Code
如何使用Coded UI Test對Webpage進行自動化測試
2.Selenium只適用於web browser,需要各個瀏覽器的驅動,簡單說就是安裝個簡版的瀏覽器。它不僅可以用.net,還可以有java,python等等版本。它也可以錄屏設置,Selenium1 和Selenium2的區別很大,Api基本不能通用。注意區分。
參考文獻:
MSDN: Get started with Selenium testing in a continuous integration pipeline
推薦書: 《Selenium自動化測試指南》
總結:雖然兩者都可以通過錄屏來編輯,不過推薦還是手動去一個控件一個控件的寫,因為錄屏的話會多出好多無用的操作步驟,影響我們的測試。UI test的好處可以給到前端開發框架反饋,形成公司通用的前端組件庫,有利於前端規范組件化開發,和制定對應的ui test 組件模板。
二、Performance Test
性能測試和壓力測試是不分家,壓力測試是基於一組性能測試形成的。與MS的Performance Test對應有Jmeter等,同樣,Jmeter也可以做性能測試,不過它的初衷是基於應用的,這點和MS的performance Test很像。
Performance Test是基於Http協議的,這點也是與UI Test最大的區別,所以它不需要依賴於瀏覽器,換句話說,就是你前端寫的所有JS方法都無關,它只記錄Http的請求。除此之外,倒是和UI Test挺相像的,都是基於請求響應,從返回結果中提取驗證規則,判斷是否成功。這里推薦使用錄制生成的圖形配置界面去管理,因為它的參數化,數據源等都很到位,加上自定義的validation rule完全可以應付大多數的情況,它還能生存手動的測試代碼,最是方便。
這里需要提一下,Performance的組合測試,試想一下,如果我們有一些通用的步驟,會在多個性能測試中出現,比如說登錄,這就很有用了。簡單的說就是把一個大的performance拆分成多個小的測試(通過Extract Web Test),來組合成一個大的測試。詳情可以參考:演練:創建一個需要登錄和注銷的 Web 性能測試。大家可能會關系他們之間傳參的問題,事實上,他們是通過webTest.Context的上下文對象傳遞的,就是說我之前在WebTest.Context["state"]賦了值,然后我整個performance都能拿得到這個參數。可以參考:Is it possible to pass parameters between web performance tests in visual studio 2013?
關於登錄功能,比如我需要記住token,然后在每次請求頭中都帶有這個token值,當然可以用上面的方法,不過還有一個更方便的辦法,就是使用自定義插件。因為即使是上面的抽取公共步驟,我們還是會在接下來的每一步都要去設置這個請求頭參數,比較麻煩,這時,用上Web性能測試插件就比較完美了。因為它不僅可以通過WebTest.Context獲取token值,還可以重寫PreRequest、PostRequest、PrePage、PostPage、PreTransaction、PreWebTest等方法。詳情可以參考:如何:創建 Web 性能測試插件和如何:創建請求級插件.
參考文獻:
MSDN: Performance testing
使用 Visual Studio Web 性能和負載測試進行性能和壓力測試
Coding a custom validation rule for a web performance test
三、Load Test
壓力測試主要是通過模擬請求來測試服務器的相應情況,還能監控服務器的各項性能指標。不過對於大量用戶而言,單機不足以模擬大量用戶,visual studio 2012還有一個限制,開發環境最多模擬250個用戶。需要大量用戶的話,Visual Studio支持分布式環境下的負載測試,需要安裝控制器和代理服務。(P478)(使用測試控制器和測試代理在多台測試計算機之間分發負載測試運行)
當然還有一個重點要提一下,通常在開發環境下,你可以在即裝sql server,也部署服務站點,通過本機的visual studio來模擬測試。但為了更好的模仿真實環境,比較通常服務器都是分開部署的(數據庫和應用站點,當然還有可能有緩存服務器,負載均衡和集群等),所以我們要有對遠程服務器監控的能力。
Visual Studio的Load Test當然只能針對於windows的服務器,關於Load Test的配置比較簡單,只需在counter中添加計算機並設置監控參數(在這里提一下,默認的“ASP.NET”、“Application”、“.NET Application”、“IIS”、“SQL”等都是vs默認指派好的監控項,里面復選可能會有一些監控指標重復,當然也可以自定義),計算機可以是局域網內的計算機名,也可以是IP地址,詳情可以參照如何:使用負載測試編輯器管理計數器集。
遠程服務器也需要配,筆者也是試了很多次,主要是關閉防火牆(或者開發端口LoadTestCounterCategoryNotFoundException),添加測試用戶賬號並給予監控或管理員權限,開啟監控服務器的監控進程等,詳情可以參考Reading Performance Counters on Vista and Server 2008 Machines(第四步看不懂可以不用)。
原文摘錄:
In order to allow remote performance counter collection for a machine, you need to follow these steps on the machine you are collecting from. Note if you are using a test controller, the user account is the account the controller service is running as. If you are running load tests locally, the counters are collected using your user credentials.
- Run WF.msc
- Enable the Performance Logs & Alerts firewall exception
- On Vista, enable the File and Printer Sharing firewall exception
- Run lusrmgr.msc
- Add the user to the Performance Log Users, Performance Monitor Users, or Administrators group.
- Add the user to the Event Log Readers group
- Run services.msc
- Set the Performance Logs & Alerts service to autorun
- Set the Remote Registry service to autorun
- Run secpol.msc to assign the Log on as a Batch User privilege to Performance Log Users and Performance Monitor Users group:
- In Local Security Policy navigate to Local Policies -> User Right Assignment
- Double-click on “Log on as batch job”
- Add Performance Log Users group
- Add Performance Monitor Users group
Open a command prompt and rebuild all counters on the machine by running
lodctr /r
參考文獻:
MSDN:使用 Visual Studio Web 性能和負載測試進行性能和壓力測試
最省錢及省時的負載壓力測試怎麼做? Visual Studio Online 雲端壓力測試 (Cloud Load Test) 簡介
大家如果想獲得更多的控制能力,可以參考為負載測試創建自定義代碼和插件,或者直接調用Visual Studio ALM 測試工具的 API
源碼:http://pan.baidu.com/s/1mh7v3ks(涉及公司項目,就不公開了)