一般來說,測試報告需要包含以下幾個資訊:
Vsinstr.exe –coverage image.dll
如果要給網站 bin檔案夾裡面所有的程式執行代碼注入操作的話,可以使用下面這個簡單的指令來完成:
for %f in (*.dll) do vsinstr.exe –nowarn –coverage “%f”
for指令的用法,請檢視Windows幫助檔案裡面的批處理一章;%f使用引号括起來是避免%f代碼的檔案路徑包含空格的情況;-nowarn這個參數告訴vsinstr不要輸出警告資訊了,因為懶得看, :)
2. 代碼注入完成以後,啟動vsperfmon.exe。在整個執行測試用例的過程中,vsperfmon.exe會在背景持續運作,收集代碼覆寫率資訊。你可能會奇怪,這個程式的名字怎麼叫做perfmon?而不是使用什麼covermon之類的名字,這是因為vsperfmon.exe本來就是用來做性能測試的,隻不過是兼職收集代碼覆寫率罷了。
啟動vsperfmon.exe的指令很簡單:
vsperfmon.exe /START:COVERAGE /OUTPUT:result.coverage /CS
上面的參數解釋一下:
參數
說明
/START:COVERAGE
告訴vsperfmon進行代碼覆寫率的收集。
/OUTPUT
儲存結果的檔案路徑,可以是絕對路徑或者相對路徑,最好将字尾名設定為.coverage,這樣你可以直接通過資料總管裡面輕按兩下在Visual studio中打開這個檔案。
/CS
CS是CrossSession的簡寫。
Session的意思有必要解釋一下,Windows 從Windows 2000以後是一個多使用者,多任務的作業系統(不知道NT是不是)。而Windows 95/98/Me不是多使用者多任務作業系統,它們隻是單使用者多任務作業系統。多使用者的意思是多個使用者可以同時登入同一台主機(通過遠端登入系統,mstsc.exe),作業系統會在這多個同時進行獨立操作的使用者當中執行有效的程序分離。雖然你可以在Windows 95/98/Me設定多個使用者,但是這多個使用者不能同時登入同一台機器,必須要等另外一個使用者登出(LogOff)才能登入這台機器。
每個使用者登入到Windows作業系統時,Windows以Session(會話)的概念來描述它,一個使用者可以有多個Session,例如這個使用者可以從實體上直接登入主機,這個Session叫做Console Session;這個使用者同時也可以通過遠端登入來操作這台主機,這又是另外一個Session。
之是以要在這裡花很大的篇幅去描述Session,是因為如果我們在IIS裡面啟動網站時,IIS的應用程式池(Application Pool)需要你指定一個使用者用于通路資料庫、檔案系統等資源,這個會話(Session)不會使用控制台會話(Console Session),是以一般來說,即使IIS的應用程式池使用的使用者與目前執行測試用例的使用者是同一個使用者,也是在使用不同的會話。
在Windows Vista和Windows Server 2008以後,大部分Windows服務(當然也包括IIS提供的W3C服務)都是在第0會話(Session 0)當中運作,目的是為了更好地将Windows服務與其他程序分隔開來。而第一個登入Windows Vista或Windows Server 2008的使用者的會話辨別号是1,而不象以前那樣是0了。如下圖所示:
在Vista之前,Windows服務(比如運作Asp.Net網站的IIS的W3C服務)和普通使用者的程序(比如vsperfmon.exe)是運作在同一個會話裡,兩個程序之間交流消息隻要用SendMessage或者PostMessage這個API就可以了。
但是在Vista之後,由于服務程序和普通使用者程序不是在同一個會話裡,是以就需要用命名管道(Named Pipeline)等IPC機制來執行互動了。/CS選項就是告訴vsperfmon.exe關注在其他會話裡執行的程序的代碼覆寫率資訊。
3. 當所有的測試用例都執行完畢以後,VSTT關閉被測試的程序。因為在收集代碼覆寫率資訊時,vsperfmon是和被統計的程序直接進行互動的;在儲存覆寫率資訊時,它需要等被收集的程序關閉以後,才能執行儲存操作。如果測試時,你的網站是運作在IIS裡的,你需要使用下面的指令關閉IIS:
iisreset /stop
(啟動iis的指令時iisreset /start)
如果你沒有安裝IIS,但是你會發現在VSTS直接按下F5運作網站時,網站照樣能運作,那是因為VSTS自帶了一個支援Asp.Net的Web伺服器WebDev.WebServer.EXE。這個程式儲存在檔案夾C:\Program Files\Common Files\microsoft shared\DevServer\9.0(假設你的系統盤是C,并且安裝的是VSTS 2008版本)裡面。
當你在VSTS裡面運作網站的時候,Visual Studio采用下面的指令啟動網站:
Webdev.webserver /path:<網站的實體路徑> /port:<網站的端口> /vpath:/
如果是使用webdev.webserver運作網站的話,在指令行關閉這個程式的指令是(實際上是幹掉這個程式):
taskkill /im WebDev.WebServer.EXE
4. VSTT執行下面的指令關閉vsperfmon.exe,vsperfmon.exe将搜集到的代碼覆寫率儲存到指定的檔案當中。
vsperfmon.exe /shutdown
備注:vsperfmon.exe預設情況下隻能收集同一個使用者運作的程序的代碼覆寫率資訊,如果你是将asp.net網站放在iis裡面進行測試,預設情況下,運作這個網站的應用程式池(application pool)的使用者是NetworkService,這種情況下,要麼用vsperfmon.exe的/USER選項指定NetworkService這個使用者。要麼将應用程式池的使用者改成執行vsperfmon.exe的那個使用者。
基本上一個測試自動化系統講的差不多了,下一篇講如何複用現有的自動化測試代碼自動生成測試用例。
未完待續……
本文轉自 donjuan 部落格園部落格,原文連結: http://www.cnblogs.com/killmyday/archive/2010/04/06/1705494.html ,如需轉載請自行聯系原作者