專利名稱:在集群系統(tǒng)中執(zhí)行軟件性能測試作業(yè)的制作方法
技術(shù)領(lǐng)域:
這里描述的本發(fā)明的實施例一般地涉及軟件性能測試,更具體而言涉及用于生成 測試模塊和利用所述測試模塊執(zhí)行測試作業(yè)的技術(shù)。
背景技術(shù):
本部分中描述的方法是可以從事的方法,但不一定是先前已經(jīng)設(shè)想到或從事過的 方法。因此,除非另有指明,否則不應(yīng)認(rèn)為本部分中描述的任何方法僅因為其被包括在本部 分中就應(yīng)被當(dāng)作是現(xiàn)有技術(shù)。性能測試性能測試是軟件開發(fā)的一個必要方面。在整個軟件開發(fā)過程中,軟件開發(fā)者通常 對構(gòu)成其軟件的各種組件的性能進(jìn)行測試。性能測試可以提醒軟件開發(fā)者其代碼中潛在的 錯誤或效率低下。例如,性能測試可以暴露出針對軟件組件與一個或多個被測的操作系統(tǒng)、 硬件設(shè)備、軟件包或網(wǎng)絡(luò)環(huán)境之間的交互發(fā)生的效率低下或非預(yù)期的行為。作為另一示例, 性能測試還可以提醒軟件開發(fā)者其軟件的各種組件和應(yīng)用之間的潛在不兼容。性能測試通常要求在仿真的真實世界條件下在仿真的真實世界環(huán)境中運(yùn)行要測 試的軟件。例如,開發(fā)者可能通過在多個計算機(jī)上運(yùn)行一簡單的桌面應(yīng)用并且測試該應(yīng)用 對多種輸入正確響應(yīng),從而來測試該應(yīng)用。更復(fù)雜的軟件,例如以若干個負(fù)載均衡的服務(wù)器 應(yīng)用作為一特色的軟件套件,可能要求在多個不同的系統(tǒng)上進(jìn)行大量的測試,其中每個系 統(tǒng)與大量的仿真客戶端相交互。測試計劃因為軟件通常在整個開發(fā)期間必須被測試多次,所以軟件開發(fā)者經(jīng)常創(chuàng)建一個或 多個測試計劃,這些測試計劃包括步驟和邏輯,用于(1)在仿真環(huán)境中調(diào)用各種軟件組件 的實例,以及(2)自動使得被調(diào)用的實例以預(yù)定的方式動作(即,仿真的條件)。軟件開發(fā) 者可以利用例如包括以腳本語言編寫的代碼的執(zhí)行腳本來描述這種測試計劃。執(zhí)行測試計 劃中描述的步驟的過程在這里被稱為“測試作業(yè)”。測試計劃在整個開發(fā)過程期間可被重新 用于測試作業(yè)以測試各種代碼改變的影響。另外,測試計劃可包括這樣一種邏輯,該邏輯用于改變計劃的步驟以便計劃可用 于測試多種環(huán)境中的類似條件或者相同環(huán)境中的仿真條件的微小變化。測試計劃例如可從 控制此邏輯的命令行界面或配置文件接受輸入。另外,測試計劃可包含這樣一種邏輯作為 一特色,該邏輯用于檢測測試計劃被用于其中的操作環(huán)境,以便根據(jù)操作環(huán)境來調(diào)整計劃。 對在特定測試作業(yè)期間測試的環(huán)境或條件進(jìn)行控制的一組測試參數(shù)可被稱為“測試用例”。收集性能統(tǒng)計信息在測試作業(yè)期間,軟件開發(fā)者可以從測試作業(yè)中涉及的各種計算機(jī)系統(tǒng)收集性能 相關(guān)統(tǒng)計信息和事件。性能相關(guān)統(tǒng)計信息可包括指示出系統(tǒng)的某些方面在測試作業(yè)期間如 何動作的多種度量。性能相關(guān)事件例如可包括由調(diào)試語句、差錯語句或其他代碼觸發(fā)的注 釋所指示出的軟件事件。性能相關(guān)統(tǒng)計信息和事件可利用由系統(tǒng)的日志生成組件生成的日志來收集,所述日志生成組件包括概要剖析器工具、資源監(jiān)視器、操作系統(tǒng)、被測軟件或被 測系統(tǒng)上的任何其他軟件包。另外,測試計劃本身可包括用于向日志輸出性能信息的步驟。 手工收集這種統(tǒng)計信息可能是一項煩冗的任務(wù),因為開發(fā)者必須在每個被測系統(tǒng)上搜索有 關(guān)日志并且識別這些日志的與在該被測系統(tǒng)上執(zhí)行測試作業(yè)的時間相關(guān)的部分。因此,軟件開發(fā)者通常在其測試計劃中包括用于自動化統(tǒng)計信息收集的步驟。然 而,要將這些步驟編寫成代碼也是很煩冗的。例如,用于收集統(tǒng)計信息的過程通常對于不同 的操作系統(tǒng)是不同的。另外,不同的系統(tǒng)可能運(yùn)行相同的操作系統(tǒng),但卻運(yùn)行不同的日志生 成組件。在被測軟件要被部署在多種操作系統(tǒng)的情況下,這些不同之處使得編寫代碼以使 測試作業(yè)期間的統(tǒng)計信息收集自動化的任務(wù)進(jìn)一步復(fù)雜。性能測試中的其他復(fù)雜因素其他障礙增加了軟件開發(fā)期間測試軟件的復(fù)雜性。經(jīng)常很難篩選原始收集的統(tǒng)計 信息以分析重要性能指標(biāo)或測試用例之間的差異。另外,測試計劃一般是非常特定于一個 應(yīng)用或者一定類型的軟件的,意味著它們不能被重新用于不同軟件。還希望調(diào)度測試作業(yè) 以利用諸如CRON之類的系統(tǒng)調(diào)度器來運(yùn)行,以便軟件開發(fā)者不必手工調(diào)用其希望運(yùn)行的 測試作業(yè)。然而,由于測試系統(tǒng)通常被用于多種測試作業(yè),所以難以確保在特定系統(tǒng)上調(diào)度 的測試作業(yè)不與另一個調(diào)度的測試作業(yè)重疊,從而污染了性能結(jié)果。因為在實現(xiàn)測試計劃的代碼、在多種系統(tǒng)上基于多種測試用例執(zhí)行測試作業(yè)、在 每個測試作業(yè)期間從這些系統(tǒng)收集統(tǒng)計信息以及分析所收集的統(tǒng)計信息這些任務(wù)中的這 些和其他困難之處,軟件測試通常未被充分利用或者是勞動密集型的,尤其對于企業(yè)級軟 件更是如此。因此希望提高軟件測試過程的效率。
在附圖中以示例方式而非限制方式圖示了本發(fā)明,附圖中類似的標(biāo)號指代相似的 元件,其中圖1是圖示出根據(jù)本發(fā)明實施例可用于在系統(tǒng)上測試軟件應(yīng)用的測試框架的框 圖;圖2示出了根據(jù)本發(fā)明實施例用于利用測試框架來執(zhí)行對軟件應(yīng)用的性能進(jìn)行 測試的測試作業(yè)的流程圖;圖3示出了根據(jù)本發(fā)明實施例用于輸入數(shù)據(jù)以生成測試模塊的示例性web界面;圖4示出了根據(jù)本發(fā)明實施例用于指定與測試模塊參數(shù)相對應(yīng)的一組名稱-值對 的web界面;圖5是根據(jù)本發(fā)明實施例用于跟蹤由測試調(diào)度器使用的測試作業(yè)隊列的示例性 web界面;圖6示出了根據(jù)本發(fā)明實施例用于呈現(xiàn)測試結(jié)果的示例性web界面;圖7示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的數(shù)據(jù)報告的圖形表示的示 例性web界面;圖8示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的基于文本的數(shù)據(jù)的示例性 web界面;圖9示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的數(shù)據(jù)報告的圖形表示的示
6例性web界面;圖10是根據(jù)本發(fā)明實施例用于利用購物車模型構(gòu)建測試結(jié)果中的數(shù)據(jù)的定制視 圖的示例性web界面;并且圖11是本發(fā)明的實施例可在其上實現(xiàn)的計算機(jī)系統(tǒng)的框圖。
具體實施例方式在以下描述中,出于說明目的,闡述了許多具體細(xì)節(jié)以幫助全面理解本發(fā)明。然 而,很明顯,沒有這些具體細(xì)節(jié)也可以實現(xiàn)本發(fā)明。在其他情況下,以框圖形式示出公知的 結(jié)構(gòu)和設(shè)備,以避免不必要地模糊本發(fā)明。這里根據(jù)以下大綱來描述實施例1. 0.總概述
2. 0.結(jié)構(gòu)概述
3. 0.功能概述
4. 0.實現(xiàn)示例
4. 1.生成測試模塊
4. 2.管理多個測試模塊
4. 3.定義測試用例
4. 4.調(diào)用測試作業(yè)
4. 5.調(diào)度測試作業(yè)
4. 6.管理測試作業(yè)
4. 7.收集統(tǒng)計信息
4. 8.生成測試結(jié)果
4. 9.呈現(xiàn)測試結(jié)果
4. 10.操作系統(tǒng)獨立性
4. 11.實時監(jiān)視5. 0實現(xiàn)機(jī)制_硬件概述6. 0.擴(kuò)展和替換1.0.總概述公開了用于提高軟件性能測試過程的效率的方法、技術(shù)和機(jī)制。根據(jù)一個實施例, 用于可以創(chuàng)建測試模塊來針對特定測試計劃集中資源和結(jié)果。利用來自測試框架的輔助, 測試模塊可以協(xié)助實現(xiàn)例如測試用例的創(chuàng)建、針對每個測試用例的測試作業(yè)的執(zhí)行、每個 測試作業(yè)期間性能統(tǒng)計信息的收集以及將收集的統(tǒng)計信息匯總成有組織的報告以便更容 易分析。測試模塊可以跟蹤測試模塊所執(zhí)行的每個測試作業(yè)的測試結(jié)果以便能夠容易地比 較響應(yīng)于開發(fā)過程的歷史期間的各種條件和環(huán)境的性能度量。根據(jù)一個實施例,用戶可以利用測試框架內(nèi)的測試模塊生成器創(chuàng)建測試模塊。測 試模塊生成器可以接受測試計劃以及為測試模塊定義參數(shù)的一個或多個屬性作為輸入?;?于測試計劃和一個或多個屬性,測試模塊生成器可以生成測試模塊。一個或多個屬性定義 的參數(shù)可以對應(yīng)于測試計劃的任何可能變化的要素。開發(fā)者在經(jīng)由測試模塊創(chuàng)建測試用例 時可以向這些參數(shù)賦予不同的值。測試模塊隨后可以針對測試用例執(zhí)行測試作業(yè)。
7
根據(jù)一個實施例,測試模塊可以利用測試框架的某些組件來執(zhí)行通常在測試作業(yè) 的執(zhí)行期間或之后執(zhí)行的某些任務(wù),包括生成用于定義和管理測試用例的用戶界面、對測 試作業(yè)進(jìn)行集中調(diào)度以便它們不會重疊、收集統(tǒng)計信息、匯總統(tǒng)計信息、以及生成用于審查 結(jié)果的報告界面。測試框架可包括能夠獨立于被測試的軟件或者執(zhí)行測試作業(yè)的操作環(huán)境 來執(zhí)行這些任務(wù)的組件。在這個過程中,測試框架極大地降低了實現(xiàn)測試計劃所需的代碼 的復(fù)雜度和數(shù)量。根據(jù)一個實施例,測試框架可用于基于測試用例來執(zhí)行測試作業(yè)。基于測試用例 的測試作業(yè)的細(xì)節(jié)被發(fā)送到測試管理組件以便解釋。測試管理組件可對測試作業(yè)進(jìn)行調(diào)度 以在測試作業(yè)所需的各種系統(tǒng)和資源空閑時執(zhí)行?;跍y試細(xì)節(jié),測試管理組件可以調(diào)用 執(zhí)行主機(jī)上的包括測試計劃的執(zhí)行腳本,從而啟動測試作業(yè)過程。測試管理組件還可以在 測試作業(yè)使用的系統(tǒng)上調(diào)用日志生成組件。測試管理組件還可以為測試作業(yè)提供管理性輔 助。當(dāng)測試作業(yè)完成時,測試管理組件可以激活統(tǒng)計信息收集組件,以搜集包含性能統(tǒng)計信 息的日志。測試結(jié)果生成組件可以對這些日志應(yīng)用過濾、匯總和其他操作以生成測試結(jié)果。 測試結(jié)果隨后可經(jīng)由由測試報告組件生成的界面被呈現(xiàn)給用戶。根據(jù)一個實施例,測試框架可以是獨立于操作系統(tǒng)的,從而單個測試作業(yè)可同時 在運(yùn)行多種操作系統(tǒng)的多種系統(tǒng)上測試軟件。在其他方面中,本發(fā)明涵蓋了被配置為執(zhí)行上述步驟的計算機(jī)裝置和計算機(jī)可讀 介質(zhì)。2. 0.結(jié)構(gòu)概述圖1是圖示出根據(jù)本發(fā)明實施例可用于在系統(tǒng)170上測試軟件應(yīng)用180的測試框 架110的框圖100。圖1的元件僅僅是示例性的。本發(fā)明的實施例可以不需要圖1所示的 每個元件。測試框架110包括若干個組件。這些組件中的每一個可以存在于同一計算機(jī)系統(tǒng) 上-其可以是也可以不是系統(tǒng)170-或者存在于測試集群172的任何數(shù)目的分開的計算機(jī) 系統(tǒng)上,其中系統(tǒng)170是測試集群172的成員。這些組件之一是測試模塊生成器111,其可 用于生成測試模塊,例如測試模塊120。測試模塊測試模塊120是協(xié)助實現(xiàn)測試作業(yè)(例如測試作業(yè)150)的執(zhí)行的模塊。用戶可 以執(zhí)行這些測試作業(yè)以測試變化的條件下軟件應(yīng)用180的性能。測試模塊120例如可以是 能夠訪問測試框架110的獨立程序單元?;蛘?,測試模塊120可以是由測試框架110根據(jù) 存儲的配置信息生成的對象的實例化。測試模塊120可與測試計劃130相關(guān)聯(lián),測試計劃130可包括在測試模塊120協(xié) 助執(zhí)行的任何測試作業(yè)(包括測試作業(yè)150)期間實現(xiàn)的步驟。測試模塊120可以直接包 括測試計劃130,或者它可以包括指向測試計劃130的位置的指針。測試計劃130例如可以 是用腳本語言編寫的代碼的形式。此代碼可以被計算機(jī)系統(tǒng)直接執(zhí)行。測試計劃130還可 以是可以被編譯并隨后被計算機(jī)系統(tǒng)執(zhí)行的代碼的形式。測試計劃130還可以是可以被計 算機(jī)系統(tǒng)直接執(zhí)行的已編譯代碼的形式?;蛘?,測試計劃130的編譯、解釋或執(zhí)行可以由計 算機(jī)系統(tǒng)上的平臺或框架(包括測試框架110本身)來執(zhí)行。測試模塊120可以接收測試用例(例如測試用例140)作為輸入。可經(jīng)由任何類型的界面(包括命令行或圖形用戶界面)接收測試用例140。例如,可經(jīng)由輸入到測試模塊 120的web界面中來接收測試用例140。測試用例可以定義一組條件,該組條件針對特定的 測試作業(yè)指示出測試計劃將如何被執(zhí)行。例如,當(dāng)調(diào)用包含測試計劃130的執(zhí)行腳本以啟 動測試作業(yè)150時,來自測試用例140的值可用作輸入。測試計劃130可包括根據(jù)輸入的 值改變測試計劃130的步驟的邏輯。從而,每個測試用例140可導(dǎo)致遵循不同步驟并且產(chǎn) 生不同結(jié)果的一個不同的測試作業(yè)150。作為另一示例,測試框架110或測試模塊120可以 包括依據(jù)測試用例140中指定的條件改變測試作業(yè)150的部署的邏輯。測試用例140還可 以指定來自測試作業(yè)150的結(jié)果將如何被收集和分析。測試用例140中指定的條件可以以多種方式來表示,包括名稱_值對。例如,測試 用例140可以包括諸如“execjwst = 10. 1. 1. 15”之類的名稱-值對,其將系統(tǒng)170標(biāo)識 為在其上執(zhí)行測試計劃130的執(zhí)行腳本的計算機(jī)。測試管理組件測試框架110還可包括測試管理組件,例如測試管理器112。測試模塊120可向測 試管理器112發(fā)送描述測試作業(yè)150的測試細(xì)節(jié)191。基于測試細(xì)節(jié)191,測試管理器112 可以調(diào)用并監(jiān)督系統(tǒng)170上測試作150的執(zhí)行。測試管理器112可以利用測試指令192來 進(jìn)行這些操作。測試作業(yè)150還可以利用測試反饋193來與測試管理器112交互。測試管理器112可利用作為測試框架110的另一組件的測試調(diào)度器113來確定何 時執(zhí)行測試作業(yè)150以避免與其他測試作業(yè)同時在系統(tǒng)170上重疊執(zhí)行測試作業(yè)150。雖 然被示為測試框架110的獨立組件,但測試調(diào)度器113也可被嵌入到測試管理器112中。測試作業(yè)150是在系統(tǒng)170上執(zhí)行測試計劃130的步驟的過程。測試作業(yè)150在 測試用例140中規(guī)定的條件下執(zhí)行測試計劃130。例如,測試作業(yè)150可以在具有從測試用 例140得出的輸入?yún)?shù)值的執(zhí)行腳本中執(zhí)行測試計劃130的步驟。在系統(tǒng)170負(fù)責(zé)執(zhí)行測 試作業(yè)150這個意義上,系統(tǒng)170也可被稱為執(zhí)行主機(jī)。測試作業(yè)150可以調(diào)用軟件應(yīng)用180并在所述條件下測試其性能。雖然軟件應(yīng)用 180被示為存在于系統(tǒng)170上,但軟件應(yīng)用180實際上可以在測試集群172中的任何系統(tǒng) 上。測試作業(yè)150還可以調(diào)用其他軟件應(yīng)用和組件。統(tǒng)計信息和結(jié)果組件測試框架110還可包括統(tǒng)計信息收集組件,例如統(tǒng)計信息收集器114。統(tǒng)計信息收 集器114搜集在測試作業(yè)150的執(zhí)行期間生成的日志160。雖然被示為測試框架110的獨 立組件,但統(tǒng)計信息收集器114也可被嵌入到測試管理器112中。在系統(tǒng)170生成或存儲日志160這個意義上,系統(tǒng)170也可被稱為統(tǒng)計信息主機(jī)。 日志160是系統(tǒng)事件、軟件事件或隨著時間的流逝性能度量的值的記錄。日志160可包括 多種模式的數(shù)據(jù),包括CSV、XML、循環(huán)式數(shù)據(jù)文件和基于文本的日志。一般來說,日志160可 包括數(shù)據(jù)行,每行包括時間戳和一個或多個度量值。日志160可能是由很多種組件來生成的,所述組件包括軟件應(yīng)用180、概要剖析器 (Profiler) 175或資源監(jiān)視器176。概要剖析器175可以是任何已知的概要剖析器,例如 gprof.VTune或JProfiler。資源監(jiān)視器176可以是系統(tǒng)提供的,因為其被嵌入在系統(tǒng)170 的硬件中或者是作為在系統(tǒng)170上運(yùn)行的操作系統(tǒng)的一部分提供的。資源監(jiān)視器176也可 是由另一工具(例如測試框架本身)管理的進(jìn)程。來自測試管理器112或測試計劃130的統(tǒng)計信息指令194可以提示和協(xié)調(diào)這些日志生成組件對日志160的生成。日志160也可以是由測試作業(yè)150利用來自測試計劃130內(nèi)的步驟生成的,這些 步驟可以打印調(diào)試消息和其他注釋以及訪問和操縱由上述日志生成組件產(chǎn)生的數(shù)據(jù)。測試框架110還可包括統(tǒng)計信息匯總和分析組件,例如測試結(jié)果生成器115。測試 結(jié)果生成器115可以基于日志160執(zhí)行多種計算以產(chǎn)生與測試作業(yè)150相關(guān)聯(lián)的測試結(jié)果 155。所執(zhí)行的具體計算可以根據(jù)測試框架110、測試模塊120或測試用例140中的設(shè)置來 確定。例如,測試結(jié)果生成器115可以去除與測試作業(yè)150指定記入日志的時間段之前的 時間段相關(guān)的任何記入日志的數(shù)據(jù)。它還可以例如隨著時間的流逝或者跨多個系統(tǒng)匯總和 平均數(shù)據(jù)。它還可以突出日志中的某些關(guān)鍵統(tǒng)計信息或趨勢。雖然被示為測試框架110的 獨立組件,但測試結(jié)果生成器115也可被嵌入到統(tǒng)計信息收集器114、測試模塊120或測試 報告器116中。測試模塊120利用測試報告器116來報告關(guān)于測試結(jié)果155的信息。測試報告器 116可以生成能夠顯示測試結(jié)果155中的數(shù)據(jù)的日志和示圖的圖形或文本界面。例如,測試 報告器116可以包含一種web界面作為一特色,該web界面允許用戶從測試結(jié)果155中選擇 各個度量的數(shù)據(jù)報告來繪出示圖。根據(jù)一個實施例,這種web界面可以是測試模塊120的 包括用于輸入測試用例140的控件的更擴(kuò)展的web界面的一部分。雖然被示為獨立組件, 但測試報告器116也可以是測試模塊120的組件,或者它可以是測試框架110的組件,測試 模塊120與之相接口。被測軟件根據(jù)一個實施例,除了系統(tǒng)170上的軟件應(yīng)用180之外,測試作業(yè)150還可調(diào)用測 試集群172中的任何數(shù)目的其他系統(tǒng)上的軟件套件的任何數(shù)目的組件。實際上,根據(jù)一個 實施例,測試作業(yè)150可以只執(zhí)行測試集群172中的除系統(tǒng)170外的系統(tǒng)上的軟件應(yīng)用和 組件,以消除測試計劃140中的開銷資源消耗被反映在收集到的統(tǒng)計信息中的可能性。在 兩種情況下,統(tǒng)計信息收集器114都也可以從這些系統(tǒng)收集日志,或者這些系統(tǒng)可以將其 日志轉(zhuǎn)發(fā)到測試作業(yè)150在其上執(zhí)行的系統(tǒng)(即,系統(tǒng)170)以供收集。3. 0.功能概述圖2示出了根據(jù)本發(fā)明實施例用于利用測試框架(例如測試框架110)來執(zhí)行對 軟件應(yīng)用的性能進(jìn)行測試的測試作業(yè)的流程圖200。輸入測試模塊和測試用例信息在步驟210中,用戶創(chuàng)建測試計劃(例如測試計劃130),用于測試一個或多個軟件 組件(例如軟件應(yīng)用180)的性能。因為測試計劃將被用在測試框架內(nèi),所以用戶不需要包 括用于使基于測試計劃執(zhí)行測試作業(yè)期間的統(tǒng)計信息的收集、分析和報告自動化的大量步 驟。示例性的測試計劃在第4. 1節(jié)中描述。在步驟220中,用戶生成測試模塊,例如測試模塊120。用于利用測試框架生成測 試模塊的示例性步驟在第4. 1節(jié)中論述。在步驟230中,用戶為測試模塊的各種參數(shù)輸入值,這些值形成測試用例,例如測 試用例140。用于輸入這些值的一些示例性步驟在第4. 3節(jié)中論述。在步驟240中,測試模塊向測試框架內(nèi)的測試管理器或測試調(diào)度器發(fā)送指示出測 試作業(yè)的數(shù)據(jù),例如測試細(xì)節(jié)191。此數(shù)據(jù)可以指示出執(zhí)行測試作業(yè)所必要的某些細(xì)節(jié),例
10如包括測試計劃、要在其上執(zhí)行測試計劃的一個或多個系統(tǒng)、要在其上執(zhí)行被測軟件的一 個或多個系統(tǒng)、從其收集統(tǒng)計信息的一個或多個系統(tǒng)、測試計劃中的各種參數(shù)的值、以及要 搜集的統(tǒng)計信息的類型。測試模塊可以為這些細(xì)節(jié)提供默認(rèn)值,或者它可根據(jù)為測試用例 指定的值來確定這些細(xì)節(jié)。執(zhí)行測試作業(yè)在步驟250中,測試管理器確定執(zhí)行測試作業(yè)所必要的資源是空閑的。它例如可 利用對在測試系統(tǒng)的集群(例如測試集群172)中的每個系統(tǒng)上執(zhí)行的測試作業(yè)進(jìn)行監(jiān)視 的測試調(diào)度器來進(jìn)行此操作。用于調(diào)度測試作業(yè)的示例性技術(shù)在第4. 5節(jié)中論述。在步驟260中,測試管理器調(diào)用測試作業(yè)的執(zhí)行。用于調(diào)用測試作業(yè)的示例性技 術(shù)在第4. 4節(jié)中論述。在步驟262中,測試作業(yè)與在一個或多個系統(tǒng)上被測試的一個或多個軟件組件 (例如軟件應(yīng)用180)交互。例如,測試作業(yè)可以調(diào)用一個系統(tǒng)上的服務(wù)器軟件組件的實例 以及另一系統(tǒng)上的客戶端軟件組件的實例。作為另一示例,測試作業(yè)可以向已經(jīng)運(yùn)行的客 戶端軟件組件發(fā)送命令或數(shù)據(jù),以指令其發(fā)出已經(jīng)運(yùn)行的服務(wù)器軟件組件的某些請求。測試作業(yè)可以根據(jù)測試計劃中的預(yù)定邏輯來進(jìn)行此交互。例如,測試作業(yè)可以利 用由測試計劃中的邏輯標(biāo)識的命令行設(shè)置來調(diào)用軟件組件的實例。測試作業(yè)還可以根據(jù)測 試計劃中的根據(jù)從測試管理器接收的指令(例如測試指令192)而變化的邏輯來進(jìn)行此交 互。這些指令可能是在步驟260中接收的,或者作為與測試管理器的繼續(xù)交互的一部分,如 下所述。例如,測試作業(yè)可以將數(shù)據(jù)文件輸入到軟件組件中以便評估。它可以基于測試計 劃中的將測試計劃的執(zhí)行腳本的調(diào)用期間輸入的某個名稱-值對轉(zhuǎn)化為一文本文件的位 置的標(biāo)識的邏輯來確定該數(shù)據(jù)文件。作為此步驟的一部分,測試作業(yè)可能還要求與測試管理器交互。例如,測試作業(yè)可 能需要請求關(guān)于在系統(tǒng)故障情況下在其上調(diào)用軟件組件的備用系統(tǒng)的指令?;蛘?,測試作 業(yè)可能需要通知測試管理器告知它它已經(jīng)進(jìn)入了測試計劃的某些階段。它例如可以利用 測試反饋193來進(jìn)行此操作。測試作業(yè)和測試管理器之間的示例性交互在第4. 6節(jié)中論述。在可與步驟262同時發(fā)生的步驟264中,測試作業(yè)中調(diào)用的系統(tǒng)上的若干各種組 件中的任何一個生成日志,例如日志160。這些日志例如可由測試作業(yè)本身、被測的軟件組 件、系統(tǒng)概要剖析器、系統(tǒng)資源監(jiān)視器或者能夠生成性能度量的日志的任何其他系統(tǒng)或組 件生成。在步驟266中,測試作業(yè)完成。作為測試作業(yè)的最終步驟,測試作業(yè)可以告知測試 管理器其已完成執(zhí)行?;蛘?,測試管理器可以通過定期監(jiān)視測試作業(yè)過程來發(fā)現(xiàn)測試作業(yè) 已完成。報告測試結(jié)果 在步驟270中,統(tǒng)計信息收集器收集在步驟264中生成的日志。此步驟可以響應(yīng)于 測試管理器確定測試作業(yè)已完成而執(zhí)行?;蛘?,該步驟可以在整個測試作業(yè)期間執(zhí)行(即 與步驟262-264并發(fā)執(zhí)行)。收集這些日志的示例性方法在第4. 7節(jié)中論述。
在步驟280中,測試結(jié)果生成器基于所收集的日志而生成測試結(jié)果。它可將測試 結(jié)果發(fā)送回測試模塊,其中這些測試結(jié)果與原始測試用例相關(guān)聯(lián)。它可以例如通過匯總和 分析所收集的日志以識別關(guān)鍵統(tǒng)計信息、重要結(jié)果、平均資源使用情況或者偏離的性能指標(biāo),來生成測試結(jié)果。測試結(jié)果生成器例如可以去除無關(guān)統(tǒng)計信息,例如與測試作業(yè)所調(diào)用 的各種軟件組件處于穩(wěn)定狀態(tài)的時刻(即,軟件成功“啟動”并且準(zhǔn)備好測試的時刻)之前 的時間段相關(guān)的統(tǒng)計信息。用于測試結(jié)果生成的示例性技術(shù)在第4. 8節(jié)中論述。根據(jù)一個實施例,記入日志的數(shù)據(jù)也可被直接發(fā)送到測試模塊,測試模塊可以自 己匯總和分析該數(shù)據(jù)以產(chǎn)生測試結(jié)果中的一些或全部。在步驟290中,測試模塊向用戶顯示測試結(jié)果。例如,測試模塊可以呈現(xiàn)測試結(jié)果 中的數(shù)據(jù)的示圖、表格或純文本視圖。它可以利用文本或圖形界面來進(jìn)行此操作,例如提供 用于過濾或選擇測試結(jié)果中的各種數(shù)據(jù)元素的控件的交互性web界面。呈現(xiàn)測試結(jié)果的示 例性技術(shù)在第4. 9節(jié)中論述。流程圖200的步驟只是示例性的-本發(fā)明的實施例可以以這些步驟的順序上的和 實現(xiàn)上的多種變化作為一特色。例如,測試模塊可以直接調(diào)用測試作業(yè)的執(zhí)行,而不要求步 驟240和250?;蛘?,測試管理器可以不使用調(diào)度器,從而消除了對步驟250的需要。4. 0.實現(xiàn)示例4. 1.生成測試模塊用戶可以利用測試框架(例如測試框架110)來為測試計劃(例如測試計劃130) 生成測試模塊(例如測試模塊120)。為此,用戶可以向測試框架中的測試模塊生成器(例 如測試模塊生成器111)發(fā)送指示出期望的測試模塊的特性的數(shù)據(jù)。示例性測試計劃如前所述,用戶可以以多種形式來表示測試計劃。存儲在名為simple_script.pl 的執(zhí)行腳本中的以下PERL代碼是一個這種示例性表示。具體而言,以下代碼是涉及測試文 件拷貝命令的性能的簡單測試計劃。# ! /usr/bin/perluse strict ;use warnings ;use Fatal ;use File: :Copy ;MAIN: {my($file, $number_of_times) = iARGV ;#Say when the actual testing startedsend_feedback(' START_EXECUTION');#Run our command multiple timesfor (0. . $number_of_times) {copy($file, “ file_copied〃 )or die" Couldn' t copy ' $file' to' file_copied' $ !'〃;}#Say when the actual testing endedsend_feedback(' END_EXECUTI0N');}
sub send_feedback{my($file) = ;open (my $fh, ’>'," log/$file〃 );print $fh time (), “ \n〃 ;close ($fh);}測試模塊生成數(shù)據(jù)用戶可以利用包括文本或圖形界面在內(nèi)的多種手段來發(fā)送指示出測試模塊的特 性的數(shù)據(jù)。圖3是一個這種界面。圖3示出了根據(jù)本發(fā)明實施例用于輸入數(shù)據(jù)以生成測試 模塊的示例性web界面300。web界面300可以由測試模塊生成器或測試框架的另一組件 生成。發(fā)送到測試模塊生成器的數(shù)據(jù)可包括標(biāo)識由測試模塊執(zhí)行的所有測試作業(yè)都應(yīng) 基于的測試計劃的數(shù)據(jù)。例如,如文本框316所示,用戶可以通過指定執(zhí)行腳本或包含測試 計劃的步驟的其他資源的位置來標(biāo)識測試計劃?;蛘?,發(fā)送到測試模塊生成器的n數(shù)據(jù)可 包括指定測試計劃的實際步驟的數(shù)據(jù)。測試模塊參數(shù)的屬性發(fā)送到測試模塊生成器的數(shù)據(jù)還可包括測試模塊的參數(shù)的一個或多個屬性??丶?321和322圖示了用于指定這種屬性的一種方法?;谶@些屬性,測試模塊生成器可以將可 定制的參數(shù)結(jié)合到測試模塊中。例如,用戶可以利用控件322來指定一屬性。用戶可以指 定屬性名稱“count” (計數(shù)),如字段322a中所示。測試模塊生成器可以將此屬性結(jié)合到 測試模塊中,作為用于設(shè)置測試作業(yè)反復(fù)經(jīng)過測試計劃所測試的功能的次數(shù)的類似命名的 參數(shù)。根據(jù)一個實施例,屬性可以包括指定參數(shù)的默認(rèn)值的信息。例如,用戶可以指定諸 如“ % NUM_STATS_HOSTS%= 100”之類的屬性,測試模塊生成器可將其結(jié)合到測試模塊作 為NUM_STATS_HOSTS參數(shù),其默認(rèn)值為100。作為另一示例,web界面300的字段322d是用 于指定經(jīng)由控件322輸入的“count”屬性的默認(rèn)值的控件。此外,屬性可包括指定測試用 例是否可改變此參數(shù)的值的信息,例如指示出值被“鎖定”的標(biāo)簽。根據(jù)一個實施例,每個屬性可以包括指定要被用于選擇將為該屬性生成的參數(shù)的 值的控件類型的信息。示例性的控件類型可包括標(biāo)準(zhǔn)HTML形式控件,例如文本框、復(fù)選框 或者下拉列表。此控件信息可被測試模塊用于為參數(shù)生成界面,如以下第4. 2節(jié)所述。例 如,web界面300的控件322包括允許選擇可用于“count”屬性的各種控件類型的字段 322b。每個屬性還可包括枚舉該屬性的可能值的列表的信息。例如,定義名為“Sample Input File”的參數(shù)的屬性可包括可在測試作業(yè)期間被選擇來使用的若干個文件的枚舉列 表。作為另一示例,web界面300的字段322c允許了用戶輸入“count”屬性的可能值的逗 號分隔列表。另外,除了內(nèi)部名稱(利用該內(nèi)部名稱,它將被測試框架所知)之外,每個屬性還 可包括指定可用來在界面中呈現(xiàn)它的標(biāo)題的信息。另外,每個屬性可包含指定該屬性應(yīng)當(dāng) 如何被使用的后勤信息,例如它是否應(yīng)當(dāng)被發(fā)送作為執(zhí)行腳本的參數(shù)值,它是否是應(yīng)當(dāng)在
13測試作業(yè)之前運(yùn)行的命令,它是否是應(yīng)當(dāng)在測試作業(yè)之后運(yùn)行的命令等等。按鈕350是在被點擊時允許用戶添加額外屬性的按鈕。雖然這些屬性的可能用途是無窮的,但是這些屬性的共同目的可包括為測試作業(yè) 的以下操作條件中的任何一個定義參數(shù)或設(shè)置默認(rèn)值要仿真的用戶的數(shù)目、要在其上執(zhí) 行測試作業(yè)的一個或多個系統(tǒng)、要在其上調(diào)用測試作業(yè)中涉及的各種軟件組件的一個或多 個系統(tǒng)的位置、在測試作業(yè)的執(zhí)行之前和之后要運(yùn)行的命令、服務(wù)器負(fù)載水平、要測試的查 詢的數(shù)目、要收集的數(shù)據(jù)的類型、被測的數(shù)據(jù)文件中的數(shù)據(jù)行的數(shù)目、測試數(shù)據(jù)文件的位 置、一個或多個統(tǒng)計信息搜集系統(tǒng)、在何種條件下應(yīng)當(dāng)使能概要剖析、以及呈現(xiàn)所收集的數(shù) 據(jù)的方式。額外測試模塊生成信息web界面300包括用于指定測試模塊生成的額外信息的多個控件??丶?11是用 于輸入被測試的軟件的產(chǎn)品名稱的文本框圖??丶?12是用于輸入測試框架所知的測試模 塊的內(nèi)部名稱的文本框??丶?13是用于輸入用戶所知的測試模塊的模塊標(biāo)題的文本框。 控件314是用于輸入測試模塊的描述以便用戶可容易確定模塊的目的的文本框??丶?15 是用于輸入標(biāo)識模塊的所有者的用戶名的文本框。此所有者可能能夠向其他用戶賦予訪問 測試模塊的許可。控件317是復(fù)選框,該復(fù)選框在被選中時指示出該測試模塊可與其他測 試作業(yè)同時共享執(zhí)行主機(jī)??丶?31是使得測試模塊能夠在執(zhí)行測試作業(yè)之前調(diào)用某些命令的復(fù)選框??丶?332是使得測試模塊能夠在執(zhí)行測試作業(yè)之后調(diào)用某些命令的復(fù)選框。控件333是使得測 試模塊能夠在測試作業(yè)期間發(fā)生差錯的情況下調(diào)用某些命令的復(fù)選框??丶?34是使得測 試模塊能夠在測試作業(yè)報告其已成功執(zhí)行的情況下調(diào)用某些命令的復(fù)選框??丶?35使能 在基于測試模塊執(zhí)行測試作業(yè)期間進(jìn)行概要剖析。提交數(shù)據(jù)和生成測試模塊按鈕340允許在框316中指定了測試計劃并且在控件321和322中指定了屬性的 用戶發(fā)送指定的數(shù)據(jù)到測試模塊生成器以便處理。在接收到指定的數(shù)據(jù)后,測試模塊生成 器可以基于指定的數(shù)據(jù)來生成測試模塊。根據(jù)一個實施例,測試模塊生成器可以以代碼或已編譯的可執(zhí)行文件的形式來生 成測試模塊。代碼或已編譯的可執(zhí)行文件可以是單獨的,或者可以依賴于測試框架所暴露 出的庫。用戶一旦希望訪問測試模塊功能或界面,就可以執(zhí)行該代碼或可執(zhí)行文件。根據(jù)一個實施例,測試模塊生成器可以改為將測試模塊表示為測試框架可訪問的 數(shù)據(jù)庫或文件系統(tǒng)中的數(shù)據(jù)。為了訪問測試模塊,用戶可以向測試框架發(fā)出命令,以實例化 測試模塊。測試框架可以基于數(shù)據(jù)庫或文件系統(tǒng)中的表示數(shù)據(jù)來實例化測試模塊。默認(rèn)參數(shù)根據(jù)一個實施例,測試模塊生成器還可為測試模塊生成不基于任何接收到的屬性 的額外參數(shù)。例如,在不存在標(biāo)識在其上執(zhí)行測試作業(yè)的系統(tǒng)的屬性的情況下,測試模塊生 成器可以在測試模塊中結(jié)合用于選擇在其上執(zhí)行測試作業(yè)的任何數(shù)目的默認(rèn)系統(tǒng)之一的參數(shù)。測試模塊模板根據(jù)一個實施例,用戶可以定義一測試模塊為測試模塊模板。當(dāng)創(chuàng)建后續(xù)測試模塊時,用戶可以指示出其希望利用測試模塊模板來構(gòu)建測試模塊。在同一測試模塊模板上 構(gòu)建的測試模塊可以共享與測試模塊模板的繼承關(guān)系。為測試模塊模板定義的任何屬性都 將在后續(xù)測試模塊中自動預(yù)設(shè)。用戶隨后可以在生成測試模塊之前根據(jù)其希望來改變屬 性?;蛘撸罄m(xù)測試模塊中的基于模板的屬性可被鎖定,使得用戶不可改變它們。根據(jù)一個實施例,測試模塊和測試模塊模板之間的繼承關(guān)系可能在測試模塊的整 個生存期期間持續(xù)。從而,如果以任何方式為測試模塊模板修改了一屬性,則也將為測試模 塊修改該屬性。這可能要求測試模塊被重新生成。4.2.管理多個測試模塊用戶可以為任何數(shù)目的軟件應(yīng)用或軟件套件生成任何數(shù)目的測試模塊。實際上, 因為用戶可能具有用于測試關(guān)于軟件應(yīng)用的不同方面的性能的多個測試計劃,所以用戶可 以為任何給定的軟件產(chǎn)品生成任何數(shù)目的測試模塊。為了幫助用戶跟蹤所生成的測試模 塊,測試框架可以提供用于訪問、更新和刪除測試模塊的測試模塊管理界面。此界面可以 列出測試框架所生成的所有測試模塊,并且可例如按照它們測試的軟件的產(chǎn)品名稱(例如 web界面300的控件311中指定的產(chǎn)品名稱)來排列它們。4.3.定義測試用例一旦測試模塊已被生成,用戶就可利用測試模塊來啟動測試作業(yè)。為此,用戶可以 首先向測試模塊發(fā)送一組一個或多個名稱_值對。每個名稱_值對中的名稱可對應(yīng)于測試 模塊的相同名稱的參數(shù)。這組一個或多個名稱_值對可被認(rèn)為是測試用例,例如測試用例 140。用戶可以利用圖形的和文本的多種界面來將此測試用例發(fā)送到測試模塊。例如,用戶 可以在數(shù)據(jù)庫或結(jié)構(gòu)化數(shù)據(jù)文件中定義多個測試用例,這些測試用例隨后可被測試模塊全 都同時讀取,或者根據(jù)自動化調(diào)度來逐一讀取。作為另一示例,圖4示出了根據(jù)本發(fā)明實施例用于指定與測試模塊參數(shù)相對應(yīng)的 一組名稱_值對的web界面400。web界面400包括控件410,其中每個控件與一參數(shù)相關(guān) 聯(lián)。對于任何控件410,用戶可以指定值。測試模塊隨后可使用此值以及相關(guān)聯(lián)的參數(shù)的名 稱作為測試用例的名稱_值對。在web界面400中請求其值的參數(shù)中的一些可對應(yīng)于被測試模塊生成器利用第 4. 1節(jié)中說明的技術(shù)結(jié)合到測試模塊中的參數(shù)。例如,圖3中的控件322被示為接受名為 “count”的屬性作為輸入。如第4. 1節(jié)中說明的,此屬性可用于將名為“count”的參數(shù)結(jié) 合到測試模塊中。如字段322b中所指定的,在文本框控件中請求web界面400中的計數(shù)參 數(shù)的輸入。具體而言,web界面400包括用于接收與這個結(jié)合的參數(shù)相對應(yīng)的輸入的控件 422。類似地,web界面400包含對應(yīng)于為web界面300的控件321輸入的值的控件421。在web界面400請求其值的其他參數(shù)可能是從在測試模塊生成期間在web界面 300中指定的其他屬性得出的。例如,控件431、432和433分別請求用于使能概要剖析、概 要開始延遲和概要長度的值。這些控件可能是響應(yīng)于用戶選中了 web界面300中的框335、 從而為測試模塊生成發(fā)送一指示出應(yīng)當(dāng)為測試模塊使能概要剖析的屬性,而生成的。類似 地,為在測試作業(yè)之前和之后要啟動的命令請求值的控件434和435可能分別是響應(yīng)于用 戶選中了 web界面300中的框331和332而得出的。在web界面400請求其值的其他參數(shù)可以為任何測試模塊普遍提供。web界面 400中的以下控件是這種普遍參數(shù)的示例控件411,指定測試用例的用戶可讀標(biāo)題;控件412,指定測試用例的用戶可讀描述,以便幫助用戶迅速識別測試用例的目的;控件413,指 定一個或多個執(zhí)行主機(jī)的名稱或地址,每一個由逗號分隔;控件414,指定一個或多個統(tǒng)計 信息主機(jī)的名稱或地址,每一個由逗號分隔;控件415,指定一個或多個預(yù)留主機(jī)的名稱或 地址,每一個由逗號分隔,并且每一個不得被任何其他測試作業(yè)使用以便此測試用例所標(biāo) 識的測試作業(yè)運(yùn)行;以及控件418,指定可作為參數(shù)被傳遞到用于執(zhí)行與測試模塊相關(guān)聯(lián) 的測試計劃的執(zhí)行腳本的額外配置選項??丶?01是普遍提供的參數(shù)的另一示例。控件401允許用戶指定此測試用例的測 試用例標(biāo)識符,該標(biāo)識符可用于在測試模塊中和測試框架中內(nèi)部表示測試用例。如果此值 為空,則測試模塊將賦予默認(rèn)值。web界面400還可包括一按鈕,該按鈕在被點擊時將把在控件410中指定的所有值 以及每個值的相應(yīng)字段名稱發(fā)送到測試模塊作為測試用例。測試用例模板根據(jù)一個實施例,用戶可以定義一測試用例為測試用例模板。當(dāng)創(chuàng)建后續(xù)測試用 例時,用戶可以指示出其希望利用測試用例模板來構(gòu)建測試用例。在同一測試用例模板上 構(gòu)建的測試用例可以共享與測試用例模板的繼承關(guān)系。為測試用例模板定義的任何值都將 為后續(xù)測試用例中的相同參數(shù)自動預(yù)設(shè)。用戶隨后可以根據(jù)其希望來改變這些值?;蛘撸?后續(xù)測試用例中的基于模板的值可被鎖定,使得用戶不可改變它們。4.4.調(diào)用測試作業(yè)根據(jù)一個實施例,在接收到測試用例(例如測試用例140)后,測試模塊(例如測 試模塊120)可以間接調(diào)用測試作業(yè)(例如測試作業(yè)150)的執(zhí)行。為此,測試模塊可以向 測試管理組件(例如測試管理器112)發(fā)送關(guān)于測試作業(yè)的細(xì)節(jié)(例如測試細(xì)節(jié)191)。測 試模塊可以通過多種方式來發(fā)送這些測試細(xì)節(jié),例如通過由測試管理器打開的專用端口或 者作為插入到測試管理器能夠訪問的數(shù)據(jù)庫中的行。測試管理器隨后可以確定如何以及何 時調(diào)用測試作業(yè)的執(zhí)行。測試細(xì)節(jié)測試模塊可在接收到測試用例后立即將這些測試細(xì)節(jié)發(fā)送到測試管理器?;蛘?, 它可以在發(fā)送測試細(xì)節(jié)之前等待額外的輸入。例如,測試模塊可以包括用于存儲若干個接 收到的測試用例的裝置,這些測試用例中的每一個可與一標(biāo)識符相關(guān)聯(lián)。此標(biāo)識符可能是 在測試用例被接收到時由測試模塊指派的,或者是通過作為測試用例本身的一部分輸入的 值指派的。當(dāng)用戶希望根據(jù)這些存儲的測試用例之一調(diào)用測試作業(yè)的執(zhí)行時,用戶可發(fā)送 指示出期望的測試用例的標(biāo)識符的輸入。測試細(xì)節(jié)可以向測試管理器指示出關(guān)于如何執(zhí)行測試作業(yè)或者如何為測試作業(yè) 生成和收集結(jié)果的信息。此信息例如可包括測試模塊的測試計劃以及反映在測試用例中指 定或者被硬編碼到測試模塊中的名稱-值對的一個或多個屬性。測試細(xì)節(jié)中的信息還可包 括測試模塊可能已從測試用例得出的或者可能已被硬編碼到測試模塊中的其他指令。在接收到關(guān)于測試作業(yè)的測試細(xì)節(jié)后,測試管理器可確定如何利用這些測試細(xì)節(jié) 來調(diào)用、管理測試作業(yè)以及從測試作業(yè)收集結(jié)果。例如,測試管理器可以在測試細(xì)節(jié)中查找 具有某個預(yù)定的名稱的屬性或者標(biāo)識在調(diào)用測試作業(yè)之前在系統(tǒng)上要加載的先決條件的 某個預(yù)定的指令。作為另一示例,測試管理器可以搜索在調(diào)用測試作業(yè)時要使用的命令行參數(shù)的屬性或指令。如果測試細(xì)節(jié)不包括與測試作業(yè)的所需細(xì)節(jié)相對應(yīng)的指令或?qū)傩?,則 測試管理器可以根據(jù)由測試框架提供的默認(rèn)指令來確定所需細(xì)節(jié)。在執(zhí)行主機(jī)上調(diào)用執(zhí)行腳本根據(jù)一個實施例,測試管理器可確定的一個細(xì)節(jié)是在其上調(diào)用測試作業(yè)的執(zhí)行的 一個或多個(例如系統(tǒng)170)的位置。這種系統(tǒng)可被稱為“執(zhí)行主機(jī)”。例如,測試管理器可 以尋找測試細(xì)節(jié)中的包括諸如“execjiost = 10. 1. 1. 15”之類的名稱-值對的屬性。根據(jù) 此名稱-值對,測試管理器可以確定IP地址為10. 1. 1. 15的系統(tǒng)應(yīng)當(dāng)被用作執(zhí)行主機(jī)。作為另一示例,測試管理器可以在測試細(xì)節(jié)中尋找使用具有某些必要特征(例如 一定量的安裝的存儲器、某種安裝的軟件或者一定數(shù)目的處理器)的任何兩個可用系統(tǒng)作 為執(zhí)行主機(jī)的指令。測試管理器可以通過參考測試管理器已獲取的關(guān)于測試框架能夠訪問 的一個或多個指定的測試系統(tǒng)的特征的信息來根據(jù)這些指令確定兩個執(zhí)行主機(jī)。它還可監(jiān) 視這些指定的測試系統(tǒng)上的資源使用情況,以確定哪些系統(tǒng)當(dāng)前可用。指定的測試系統(tǒng)可 能是通過測試框架的配置接口來指定的,或者可能是由于其連接到測試集群而被指定的。為了調(diào)用執(zhí)行主機(jī)上測試作業(yè)的執(zhí)行,測試管理器可以向執(zhí)行主機(jī)發(fā)送測試指令 (例如測試指令192)。這些測試指令可以被執(zhí)行主機(jī)以使得執(zhí)行主機(jī)開始執(zhí)行測試作業(yè)的 方式來解釋。例如,測試指令可包括命令行語句,該語句按名稱來引用包含測試計劃的步驟 的腳本或可執(zhí)行文件。這種腳本或可執(zhí)行文件也可以被稱為“執(zhí)行腳本”。測試管理器可以 利用多種機(jī)制向執(zhí)行腳本發(fā)送測試指令,所述機(jī)制包括遠(yuǎn)程過程調(diào)用、安全外殼或telnet 會話中的命令、或者經(jīng)由由測試框架管理的進(jìn)程操作的專用端口的命令。如果執(zhí)行主機(jī)對于測試指令沒有響應(yīng),或者如果執(zhí)行主機(jī)發(fā)送指示出它無法執(zhí)行 測試作業(yè)的測試反饋,則測試管理器可以采取若干動作之一。測試管理器可以采取的一個 動作是向測試模塊返回指示出測試作業(yè)失敗的測試結(jié)果。測試管理器可以采取的另一動作 是在測試細(xì)節(jié)中查找指示出其可改為在其上調(diào)用測試作業(yè)的一個或多個備用執(zhí)行主機(jī)的 信息。或者,測試管理器可以從為測試框架定義的執(zhí)行主機(jī)的默認(rèn)列表中選擇備用執(zhí)行主 機(jī)。測試管理器可以采取的另一動作是查找測試框架可訪問的、擁有與執(zhí)行主機(jī)的質(zhì)量類 似的質(zhì)量的替換系統(tǒng),并且嘗試使用該替換系統(tǒng)作為執(zhí)行主機(jī)。一旦執(zhí)行主機(jī)已接收到具有調(diào)用測試作業(yè)的指令的消息,它即可以利用對于包含 測試作業(yè)的測試計劃的執(zhí)行腳本來說適當(dāng)?shù)娜魏问侄蝸碚{(diào)用測試作業(yè)。例如,如果測試計 劃是用Java或C++來編寫的,則執(zhí)行主機(jī)可以編譯執(zhí)行腳本,然后運(yùn)行它。如果測試計劃 是以經(jīng)解釋的語言來編寫的,例如用外殼腳本或PERL腳本來編寫的,則執(zhí)行主機(jī)將立即開 始解釋執(zhí)行腳本。測試指令中的額外信息測試指令可包括其他信息。例如,測試管理器可包括與用于改變測試計劃的參數(shù) 相對應(yīng)的名稱_值對作為啟動執(zhí)行腳本的命令行語句的一部分。例如,如果執(zhí)行腳本被命 名為“testscript. pl”,則調(diào)用執(zhí)行腳本的命令將為“testscript. pl-load 1000”,其中 "-load 1000”將測試計劃中名稱為“l(fā)oad”的參數(shù)的值設(shè)置為1000。測試管理器可以利用 其從測試模塊接收到的測試細(xì)節(jié)來確定要輸入到測試計劃中的名稱-值對。根據(jù)一個實施 例,測試管理器可以將其在測試細(xì)節(jié)中接收到的所有名稱_值對包括作為調(diào)用命令行語句 的一部分?;蛘?,它可以只發(fā)送未以其他方式用于預(yù)定的測試框架功能的屬性的名稱-值
17對。對于只接受經(jīng)由命令行的參數(shù)值而不接受名稱-值對的執(zhí)行腳本,測試管理器可 以在命令行語句中僅包括值。例如,考慮與圖4的web界面400的控件421和422相對應(yīng) 的參數(shù)。測試模塊可能向測試管理器發(fā)送了包括這兩個參數(shù)的名稱和為這兩個參數(shù)指定的 值的屬性。然而,測試管理器可能不具有與計數(shù)或文件屬性相關(guān)聯(lián)的任何功能。因此,測試 管理器可以在用于執(zhí)行該執(zhí)行主機(jī)的命令行中傳遞計數(shù)和文件屬性的值。這些值可以按它 們被列出的順序被傳遞。從而,由于web界面400中指定的執(zhí)行腳本是Simple_SCript. pi, 因此調(diào)用命令可以是“simple_script.pl sample_file 50”。simple_script. pi 包含被配 置為分別將這些值自動識別為$file和$number_0f_times變量的值的測試計劃。測試指令還可包括其他命令。例如,測試指令可包括為特定測試作業(yè)準(zhǔn)備系統(tǒng)的 環(huán)境的命令。這種命令可以設(shè)置環(huán)境變量、預(yù)留執(zhí)行主機(jī)上的資源、啟動所需的進(jìn)程、或者 確保資源依賴性已得到滿足。實際上,測試管理器可包括在執(zhí)行主機(jī)上沒有必要資源的情 況下拷貝或安裝必要資源的命令。例如,如果執(zhí)行主機(jī)不能訪問執(zhí)行腳本,則測試管理器可 以將執(zhí)行腳本拷貝到執(zhí)行主機(jī)。如果必要,測試管理器還可以發(fā)出編譯執(zhí)行腳本的命令。作 為另一示例,測試管理器可以發(fā)出在執(zhí)行主機(jī)上安裝測試作業(yè)所要求的某些包的命令,如 第4. 6節(jié)中所述。測試管理器可以利用它在測試細(xì)節(jié)中接收的屬性得出其他命令用于包括在初始 化測試指令中。例如,測試管理器可以確定某個預(yù)定的名稱包括要在執(zhí)行主機(jī)上在執(zhí)行腳 本前執(zhí)行的一個或多個命令??丶?34的參數(shù)是一個這種屬性的示例。此策略可被擴(kuò)展到 可在除啟動執(zhí)行腳本之前以外的其他時間在測試指令中發(fā)出的命令。例如,測試管理器可 以查找與一屬性相關(guān)聯(lián)的后勤信息,該后勤信息(1)指示出該屬性的值是要在執(zhí)行主機(jī)運(yùn) 行的命令;并且(2)標(biāo)識用于運(yùn)行該命令的一個或多個條件,例如在測試作業(yè)之前或之后, 或者在測試作業(yè)成功或失敗時。變化根據(jù)一個實施例,測試管理器不是將某些名稱-值對作為輸入提供到執(zhí)行腳本的 參數(shù),而是可以將某些名稱-值對保存到執(zhí)行主機(jī)的可由執(zhí)行腳本訪問的配置文件中?;?者,執(zhí)行腳本可以包括用于向測試管理器發(fā)送測試反饋(例如測試反饋193)的邏輯。此測 試反饋可包括對測試管理器發(fā)送指示出某些參數(shù)的值的后續(xù)測試指令的請求。根據(jù)一個實施例,測試模塊可以改為利用與測試管理器用來調(diào)用測試作業(yè)的過程 很大程度上相同的過程來直接調(diào)用測試作業(yè)的執(zhí)行。在接收到測試用例后,測試模塊可以 立即基于其測試計劃和測試用例來調(diào)用測試作業(yè)的執(zhí)行?;蛘撸瑴y試模塊可以等待為接收 到的測試用例調(diào)用測試作業(yè),直到其接收到這么做的命令為止。根據(jù)一個實施例,測試管理器可以自己運(yùn)行測試計劃的步驟,而不是在執(zhí)行主機(jī) 上調(diào)用執(zhí)行腳本。4. 5.調(diào)度測試作業(yè)根據(jù)一個實施例,測試管理器不是在接收到測試細(xì)節(jié)后立即調(diào)用測試作業(yè),而是 可以利用調(diào)度組件(例如測試調(diào)度器113)來調(diào)度測試作業(yè)以便以后執(zhí)行。為此,測試管理 器可以向測試調(diào)度器傳遞某些調(diào)度細(xì)節(jié)。測試管理器可以從測試細(xì)節(jié)得出這些調(diào)度細(xì)節(jié), 或者在測試細(xì)節(jié)中不存在足以得出調(diào)度細(xì)節(jié)的信息的情況下,它可以傳遞默認(rèn)調(diào)度細(xì)節(jié)。
調(diào)度細(xì)節(jié)例如可包括開始時間和測試用例標(biāo)識符。測試管理器可以根據(jù)測試細(xì)節(jié) 中的start_time屬性和test_id屬性來得出開始時間和測試用例標(biāo)識符,而start_time 屬性和test_id屬性進(jìn)而又可反映來自原始測試用例的名稱_值對。調(diào)度細(xì)節(jié)還可包括資 源使用信息,其標(biāo)識了測試作業(yè)所必需的資源。例如,調(diào)度細(xì)節(jié)可定義在測試作業(yè)中將涉及 的特定系統(tǒng),包括執(zhí)行主機(jī)、統(tǒng)計信息主機(jī)和預(yù)留主機(jī)。然而,如果例如測試模塊是在共享 執(zhí)行主機(jī)設(shè)置被使能的情況下生成的,則一些實施例可能不要求執(zhí)行主機(jī)完全空閑。在接收到調(diào)度細(xì)節(jié)后,測試調(diào)度器可以將調(diào)度細(xì)節(jié)與先前接收到的其他測試作業(yè) 的調(diào)度細(xì)節(jié)一起存儲在作業(yè)隊列中。此作業(yè)隊列例如可存在于測試框架可訪問的數(shù)據(jù)庫 中。測試調(diào)度器可以例行地監(jiān)視該隊列,以判定是否應(yīng)當(dāng)通知測試管理器到啟動某個測試 作業(yè)的時間了。例如,如果一測試作業(yè)的調(diào)度細(xì)節(jié)指示出特定的開始時間,并且當(dāng)前系統(tǒng)時 間等于或者過了該特定開始時間,則測試調(diào)度器可以通知測試管理器到啟動測試作業(yè)的時 間了。作為另一示例,測試作業(yè)的調(diào)度細(xì)節(jié)可以包括資源使用信息,例如指示出測試作 業(yè)需要系統(tǒng)X、Y和Z的信息。測試調(diào)度器可以將該資源使用信息與資源可用性信息相比 較,以判定測試作業(yè)是否有必要資源可用。例如,測試調(diào)度器可以存儲指示出哪些系統(tǒng)當(dāng)前 在運(yùn)行測試作業(yè)的信息?;蛘撸瑴y試調(diào)度器可以監(jiān)視測試框架可訪問的每個系統(tǒng)上的進(jìn)程 和處理器使用情況。如果資源可用性信息指示出系統(tǒng)X、Y和Z都可用,則測試調(diào)度器可以 確定到啟動測試作業(yè)的時間了。測試調(diào)度器還可以使用開始時間信息結(jié)合資源使用信息來確定何時運(yùn)行測試作 業(yè)。從而,測試調(diào)度器可以僅在測試作業(yè)需要的資源在測試作業(yè)的指定開始時間之后可用 時才確定到啟動測試作業(yè)的時間了。當(dāng)測試調(diào)度器確定到時間啟動測試作業(yè)時,它可以通知測試管理器到調(diào)用測試作 業(yè)的時間了。在接收到這種通知后,測試管理器隨后可調(diào)用測試作業(yè),如第4. 4節(jié)中所述。 這種通知可以采取測試用例標(biāo)識符的形式,在此情況下測試管理器使用測試用例標(biāo)識符來 從包含先前接收到的測試作業(yè)的存儲中檢索測試的測試細(xì)節(jié)?;蛘?,調(diào)度細(xì)節(jié)可包括了測 試作業(yè)的所有測試細(xì)節(jié)。調(diào)度器可以將這些測試細(xì)節(jié)重發(fā)送到測試管理器以便立即處理。變化根據(jù)一個實施例,調(diào)度細(xì)節(jié)可以定義測試作業(yè)所必需的系統(tǒng)的質(zhì)量和數(shù)量。當(dāng)調(diào) 度器確定具有必要質(zhì)量和資源的必要數(shù)量的系統(tǒng)可用時,調(diào)度器可確定到啟動測試作業(yè)的 時間了。作為其對測試管理器的指令的一部分,調(diào)度器隨后可確切限定哪些系統(tǒng)可用。測 試管理器隨后可在管理測試作業(yè)時使用此信息_例如,它可以使用此信息來識別一個或多 個執(zhí)行主機(jī)和一個或多個統(tǒng)計信息主機(jī)。測試管理器還可以將此信息作為初始測試指令的 一部分發(fā)送到執(zhí)行主機(jī),以使得測試作業(yè)可以確定在其上執(zhí)行被測試的軟件的各種組件的 一個或多個可用系統(tǒng)。根據(jù)一個實施例,測試調(diào)度器可以使用沖突解決和資源使用優(yōu)化例程來確保測試 作業(yè)隊列中的多個測試作業(yè)以及時、高效的方式被執(zhí)行。測試調(diào)度器還可以利用調(diào)度細(xì)節(jié) 中的優(yōu)先級區(qū)分信息。因此,例如,測試調(diào)度器可能能夠比其通常遍歷隊列時更迅速地在隊 列中推進(jìn)優(yōu)先的測試作業(yè)。根據(jù)一個實施例,測試調(diào)度器可以預(yù)留資源使用信息所指示出的資源以供將來使
19用,以便確保測試作業(yè)將具有充分的資源。例如,測試調(diào)度器可以預(yù)留一組系統(tǒng)以便在測試 作業(yè)的開始時間使用,從而確保屆時沒有其他進(jìn)程在使用系統(tǒng)的資源。作為另一示例,測試 調(diào)度器可以向一系統(tǒng)發(fā)送指令,以禁止新測試作業(yè)使用該系統(tǒng),直到特定的測試作業(yè)已結(jié) 束使用該系統(tǒng)為止。根據(jù)一個實施例,測試調(diào)度器能夠例行監(jiān)視測試作業(yè)的隊列,因為它是連續(xù)運(yùn)行 的進(jìn)程?;蛘?,測試調(diào)度器可以被諸如CR0N之類的系統(tǒng)調(diào)度器定期調(diào)用。每當(dāng)測試調(diào)度器 被調(diào)用時,測試調(diào)度器就可以為作業(yè)隊列中的每個測試作業(yè)檢查測試作業(yè)的調(diào)度細(xì)節(jié),以 便判定是否到時間啟動該測試作業(yè)。它還可以使用這些調(diào)度細(xì)節(jié)來確定在何時系統(tǒng)調(diào)度器 應(yīng)當(dāng)接下來調(diào)用測試調(diào)度器。根據(jù)一個實施例,測試模塊可以經(jīng)由測試調(diào)度器向測試管理器發(fā)送測試細(xì)節(jié),而 不是直接向測試管理器發(fā)送測試細(xì)節(jié)。例如,測試模塊可以將測試細(xì)節(jié)直接插入到測試調(diào) 度器所維護(hù)的數(shù)據(jù)庫中的一行或多行中。利用測試細(xì)節(jié),或者在測試細(xì)節(jié)沒有提供對開始 時間或必要資源的指示的情況下利用默認(rèn)信息,調(diào)度組件可以基于測試細(xì)節(jié)確定何時啟動 測試作業(yè)。它隨后可將測試細(xì)節(jié)傳遞到測試管理器或者以其他方式指令測試管理器如何找 到測試細(xì)節(jié)。根據(jù)一個實施例,每個執(zhí)行主機(jī)可以運(yùn)行其自己的測試調(diào)度和測試管理進(jìn)程。這 樣,測試框架可以確保一個系統(tǒng)的故障將不會導(dǎo)致測試框架中的所有測試作業(yè)的丟失。分 開的測試調(diào)度器和測試管理進(jìn)程可以與測試框架的中央調(diào)度器和測試管理器協(xié)同工作,以 獲得冗余性。用于跟蹤測試作業(yè)隊列的界面圖5是根據(jù)本發(fā)明實施例用于跟蹤由測試調(diào)度器(例如測試調(diào)度器113)使用的 測試作業(yè)隊列的示例性web界面500。web界面500可由測試調(diào)度器或測試框架的另一組 件提供。web界面500包括表格510和560,它們分別與名為Indexer和snt_a20的測試模 塊相關(guān)聯(lián)。表格510包括行520和行530,而表格560包括行570。行520和530對應(yīng)于 Indexer測試模塊的測試作業(yè),這些測試作業(yè)具有標(biāo)識符1417和1418。行570對應(yīng)于snt_ a20模塊的具有標(biāo)識符1433的測試作業(yè)。行520的狀態(tài)列指示出測試作業(yè)1417當(dāng)前正在執(zhí)行,而行530的狀態(tài)列指示出測 試作業(yè)1418當(dāng)前在等待執(zhí)行。實際上,測試作業(yè)1418將等待執(zhí)行,直到測試作業(yè)1417結(jié) 束執(zhí)行為止,這是因為如行520和530中每一個的主機(jī)名列所指示出的,測試作業(yè)1418定 義了至少一個與測試作業(yè)1417相同的必要資源。同時,如行570的狀態(tài)列所指示出的,測 試作業(yè)1433正在執(zhí)行,但它是在測試作業(yè)1417之后啟動的,這是因為如主機(jī)名列所指示出 的,測試作業(yè)1433沒有列出與測試作業(yè)1417相同的任何必要資源。根據(jù)一個實施例,web界面500可包含控件,用于強(qiáng)制測試作業(yè)隊列中的一個或多 個測試作業(yè)的狀態(tài)改變。另外,web界面500可包含用于改變行520、530和570中每一個 的優(yōu)先級列中的值的控件。4.6.管理測試作業(yè)一旦測試作業(yè)的執(zhí)行腳本已在執(zhí)行主機(jī)上被啟動,則執(zhí)行主機(jī)將根據(jù)它接收到的 作為執(zhí)行腳本的參數(shù)的輸入的任何值來執(zhí)行測試計劃的各種步驟。如前所述,測試作業(yè)可以執(zhí)行任何數(shù)目的任務(wù)來測試軟件性能,例如調(diào)用或發(fā)送輸入到各種軟件組件。一旦被啟 動,執(zhí)行腳本就可以很大程度上在沒有來自測試管理器的輸入的情況下進(jìn)行。然而,在一些情況下,測試管理器可能需要執(zhí)行某些管理性任務(wù)來輔助測試作業(yè)。 在這些情況下,測試計劃可被設(shè)計為向測試管理器發(fā)送測試反饋(例如測試反饋193),以 指示出測試作業(yè)要求執(zhí)行管理性任務(wù)。提供額外或備用參數(shù)值測試作業(yè)可請求測試管理器執(zhí)行的一個管理性任務(wù)是提供在初始測試指令中可 能沒有提供的額外測試細(xì)節(jié)。例如,測試管理器可能沒有為測試計劃所需要的每個參數(shù)提 交值。測試作業(yè)可以提交為某個參數(shù)請求值的測試反饋。此測試反饋例如可經(jīng)由由測試管 理器使用的專用端口或者由測試框架暴露出的到測試管理器的API來提交。測試管理器可 以經(jīng)由該專用端口通過測試指令來返回相應(yīng)值。作為管理性任務(wù)的另一示例,測試計劃可能要求使用當(dāng)前不可用的系統(tǒng)。測試作 業(yè)可以響應(yīng)于檢測到該系統(tǒng)不可用而提交請求測試管理器識別測試作業(yè)能夠使用的另一 系統(tǒng)的測試反饋。測試管理器可能能夠利用例如在測試細(xì)節(jié)中標(biāo)識的備用系統(tǒng)的列表或者 為測試框架指定的備用系統(tǒng)的默認(rèn)列表來定位適合的系統(tǒng)。或者,測試管理器可以識別測 試框架能夠訪問的、在配置上類似于該不可用的系統(tǒng)的另一系統(tǒng)。另一替換方式可以是測 試管理器認(rèn)為測試作業(yè)失敗了并且返回指示出失敗的測試結(jié)果。作為管理性任務(wù)的另一示例,測試計劃可能知道其需要一定數(shù)目的統(tǒng)計信息主 機(jī),但不知曉可用統(tǒng)計信息主機(jī)可能位于何處。它可向測試管理器發(fā)送反饋,請求分配一定 數(shù)目的統(tǒng)計信息主機(jī)。測試管理器(可能連同調(diào)度器)可以從測試集群中的一組空閑系統(tǒng) 中分配該一定數(shù)目的統(tǒng)計信息主機(jī)。測試管理器可以返回標(biāo)識每個所分配的統(tǒng)計信息主機(jī) 的測試指令。測試管理器也可以為所分配的統(tǒng)計信息主機(jī)執(zhí)行各種初始化任務(wù)。資源依賴性任務(wù)測試管理器可執(zhí)行的管理性任務(wù)的另一示例是對測試作業(yè)中涉及的系統(tǒng)的資源 依賴性管理。測試管理器可以在調(diào)用測試作業(yè)之前主動執(zhí)行此任務(wù),也可以根據(jù)測試模塊 的請求執(zhí)行此任務(wù)。為了執(zhí)行此任務(wù),測試管理器需要知曉測試作業(yè)中將涉及的系統(tǒng)中的 至少一些,以及測試作業(yè)所需的資源中的至少一些。在調(diào)用測試作業(yè)之前,測試管理器可利用它為測試作業(yè)接收的測試細(xì)節(jié)來確定所 述系統(tǒng)或資源。例如,測試細(xì)節(jié)可包含明確指定所述系統(tǒng)和資源的指令或?qū)傩??;蛘?,測試 管理器可能能夠通過分析測試計劃或者被測軟件的代碼來辨別此信息中的至少一些。另 外,測試管理器可以基于測試框架的默認(rèn)資源列表來猜測測試作業(yè)可能需要的一些資源。 此默認(rèn)資源列表可以針對被測軟件具體定義、針對測試作業(yè)使用的代碼編寫語言具體定義 或者為所有測試作業(yè)一般性地定義。在測試管理器調(diào)用測試作業(yè)之后,測試作業(yè)本身可向測試管理器發(fā)送測試反饋, 該測試反饋標(biāo)識出一個或多個系統(tǒng),在這些系統(tǒng)上,測試管理器應(yīng)當(dāng)確保某些資源可用。測 試計劃可包含用于經(jīng)由例如專用端口或API將此測試反饋發(fā)送到測試管理器的邏輯。在確定或接收指示出在其上確保一個或多個資源已被安裝的一個或多個系統(tǒng)的 指令之后,測試管理器可以使用若干種方法來確保在所指示出的一個或多個系統(tǒng)上這一個 或多個資源將是可用的。例如,如果所指示出的資源是軟件應(yīng)用或包,則測試管理器可以聯(lián)絡(luò)所指示出的系統(tǒng)上的包管理組件并且請求該包管理組件識別軟件應(yīng)用或包的哪個版本 (如果有的話)被安裝。這種包管理組件可以由所指示出的系統(tǒng)的操作系統(tǒng)提供,由安裝在 所指示出的系統(tǒng)上的開發(fā)平臺提供,或者以其他方式安裝在所指示出的系統(tǒng)上。如果包管 理組件指示出對于測試作業(yè)來說不充分的版本,或者沒有安裝這種軟件,則測試管理器可 以向包管理組件發(fā)送指令,這些指令將使得它安裝軟件應(yīng)用或包的期望版本。它還可以指 令包管理組件安裝所指示出的軟件應(yīng)用或包的期望版本可依賴于的其他軟件應(yīng)用或包的 任何其他版本。測試管理器可確保在所指示出的系統(tǒng)上可用的資源的其他示例可包括測試文件 和數(shù)據(jù)庫。例如,被測軟件可利用某些文件來執(zhí)行被測功能。這些文件可配置被測軟件、作 為被測軟件的輸入被處理、或者以其他方式控制被測軟件的行為。測試管理器可以將這些 文件的測試版本拷貝到所指示出的系統(tǒng)。作為另一示例,被測軟件可以處理來自數(shù)據(jù)庫的 數(shù)據(jù)。測試管理器可以確保在所指示出的系統(tǒng)上的數(shù)據(jù)庫中存在特定的一組測試數(shù)據(jù)?;蛘?,測試管理器可以采取更直接的步驟來確保資源被安裝在所指示出的系統(tǒng) 上。它例如可以嘗試通過分析所指示出的系統(tǒng)的注冊表或文件系統(tǒng)中的信息來發(fā)現(xiàn)所安裝 的軟件應(yīng)用的版本?;蛘?,它可以嘗試通過將軟件的文件直接拷貝到所指示出的系統(tǒng)來更 直接地安裝軟件應(yīng)用或包的期望版本。它還可以嘗試調(diào)用安裝進(jìn)程來在系統(tǒng)上安裝軟件的 期望版本。根據(jù)一個實施例,測試框架可以在所指示出的系統(tǒng)上執(zhí)行系統(tǒng)管理進(jìn)程,以執(zhí)行 這些步驟中的一些或全部。統(tǒng)計信息相關(guān)任務(wù)測試作業(yè)還可以請求測試管理器執(zhí)行與生成統(tǒng)計信息和性能日志相關(guān)的某些任 務(wù)。測試作業(yè)例如可以向測試管理器發(fā)送測試反饋,請求指示出狀態(tài)事件-即,測試作業(yè)已 進(jìn)入或離開某個狀態(tài)。測試管理器可被配置為為測試作業(yè)維護(hù)指示出其何時進(jìn)入或離開各 種狀態(tài)的狀態(tài)數(shù)據(jù)。它隨后可將此狀態(tài)數(shù)據(jù)發(fā)送到統(tǒng)計信息收集組件或測試結(jié)果生成組 件,以用于生成測試結(jié)果,如4. 8中所述。測試作業(yè)可以定義任何數(shù)目的狀態(tài),例如準(zhǔn)備就緒狀態(tài)、繁忙狀態(tài)、穩(wěn)定狀態(tài)、執(zhí) 行狀態(tài),等等。例如,當(dāng)測試作業(yè)已經(jīng)完成了某些初始化任務(wù)(這些任務(wù)的性能統(tǒng)計信息可 能是無關(guān)的)時,可以認(rèn)為測試作業(yè)已進(jìn)入了執(zhí)行狀態(tài)。當(dāng)處理器使用率超過預(yù)定的百分 比時,可以認(rèn)為測試作業(yè)進(jìn)入了繁忙狀態(tài)。當(dāng)軟件差錯發(fā)生時,可以認(rèn)為測試作業(yè)進(jìn)入了差 錯狀態(tài)。測試作業(yè)可定義與特定軟件功能、軟件交互或軟件執(zhí)行的階段相關(guān)的其他狀態(tài)。測試管理器還可被配置為在接收到指示出某些預(yù)定狀態(tài)的測試反饋時,向被總稱 為統(tǒng)計信息主機(jī)的一組系統(tǒng)上的性能監(jiān)視組件(例如概要剖析器195或資源監(jiān)視器176) 發(fā)送統(tǒng)計信息指令,例如統(tǒng)計信息指令194。根據(jù)一個實施例,在測試作業(yè)期間用于測試軟 件的每個系統(tǒng)可被認(rèn)為是統(tǒng)計信息主機(jī)?;蛘?,只有被測試作業(yè)使用的某些系統(tǒng)可被指定 為統(tǒng)計信息主機(jī)。測試細(xì)節(jié)可以按與測試細(xì)節(jié)指定一個或多個執(zhí)行主機(jī)的方式很大程度上 相同的方式指定這些統(tǒng)計信息主機(jī)。另外,測試作業(yè)本身可以指定或確定一組統(tǒng)計信息主 機(jī),并且測試作業(yè)可以向測試管理器標(biāo)識這些統(tǒng)計信息主機(jī)。統(tǒng)計信息指令可包括使得性能監(jiān)視組件開始或結(jié)束將性能統(tǒng)計信息記入日志的 命令。例如,響應(yīng)于指示出差錯狀態(tài)或繁忙狀態(tài)的測試反饋,測試管理器可被配置為發(fā)送指 令概要剖析器開始將數(shù)據(jù)記入日志的統(tǒng)計信息指令。作為另一示例,響應(yīng)于指示出準(zhǔn)備就
22緒狀態(tài)的測試反饋,測試管理器可以向測試反饋或測試細(xì)節(jié)所指定的某些類別的性能監(jiān)視 組件發(fā)送開始記入日志的統(tǒng)計信息指令。作為另一示例,響應(yīng)于指示出準(zhǔn)備就緒狀態(tài)結(jié)束 的測試反饋,測試管理器可以發(fā)送指令性能監(jiān)視組件將記入日志的數(shù)據(jù)發(fā)送到統(tǒng)計信息收 集器114或中央倉庫以便收集執(zhí)行主機(jī)上的統(tǒng)計信息的統(tǒng)計信息指令。根據(jù)一個實施例,測試作業(yè)可以請求測試管理器在一個或多個特定系統(tǒng)上或者在 測試作業(yè)中使用的所有系統(tǒng)上啟動概要剖析器。作為響應(yīng),測試管理器可以向所指示出的 一個或多個系統(tǒng)發(fā)送統(tǒng)計信息指令。統(tǒng)計信息指令可包括在被接收方系統(tǒng)執(zhí)行時調(diào)用概要 剖析器的命令。根據(jù)一個實施例,可改由統(tǒng)計信息收集器發(fā)送上述統(tǒng)計信息指令。響應(yīng)于接收到 請求執(zhí)行統(tǒng)計信息相關(guān)任務(wù)的測試反饋,測試管理器可以將該請求傳遞到統(tǒng)計信息收集組 件,例如統(tǒng)計信息收集器114。統(tǒng)計信息收集器隨后可執(zhí)行統(tǒng)計信息相關(guān)任務(wù)。根據(jù)一個實施例,統(tǒng)計信息主機(jī)不一定是在其上執(zhí)行被測軟件的系統(tǒng)。更確切地 說,統(tǒng)計信息主機(jī)可以是運(yùn)行一個進(jìn)程的系統(tǒng),該進(jìn)程使得它可以監(jiān)視和監(jiān)督正在執(zhí)行被 測軟件的其他系統(tǒng)上的性能日志的生成。結(jié)束測試作業(yè)測試管理器還可以負(fù)責(zé)在檢測到測試作業(yè)已完成時執(zhí)行某些管理性任務(wù)。它可以 例如通過監(jiān)視執(zhí)行主機(jī)上的執(zhí)行腳本進(jìn)程來檢測測試作業(yè)的完成。它還可監(jiān)視其他測試作 業(yè)進(jìn)程?;蛘撸瑴y試作業(yè)可以發(fā)送測試反饋,以通知測試管理器測試作業(yè)已完成。如果測試管理器原本接收的測試細(xì)節(jié)包含了指示出在測試作業(yè)結(jié)束時要在執(zhí)行 主機(jī)上執(zhí)行的一個或多個命令的指令或?qū)傩?,則測試管理器此時可以向執(zhí)行主機(jī)發(fā)送具有 這些命令的測試指令。這些命令可以對所收集的性能日志執(zhí)行多種操作。這些命令還可以 清除臨時文件或?qū)?zhí)行主機(jī)的環(huán)境恢復(fù)到其在測試管理器調(diào)用測試作業(yè)之前的狀況。測試管理器還可以指令調(diào)度器在此時取消對測試作業(yè)中涉及的系統(tǒng)的預(yù)留,以便 調(diào)度器可以從測試作業(yè)隊列中起動新測試作業(yè)。測試管理器還可以經(jīng)由例如電子郵件消息來通知用戶測試作業(yè)已完成。電子郵件 消息可包括到用于查看測試結(jié)果的界面(例如第4. 9節(jié)中論述的web界面)的鏈接。根據(jù)一個實施例,測試管理器隨后可指令統(tǒng)計信息收集器(例如統(tǒng)計信息收集器 114)開始收集和處理在測試作業(yè)期間生成的性能統(tǒng)計信息。收集性能統(tǒng)計信息在以下第 4. 7節(jié)中論述。經(jīng)由文件系統(tǒng)發(fā)送測試反饋根據(jù)一個實施例,測試作業(yè)可以經(jīng)由文件系統(tǒng)向測試管理器遞送測試反饋,例如 測試反饋193。測試作業(yè)可以在測試作業(yè)和測試管理器均可訪問的文件系統(tǒng)中創(chuàng)建文件。 例如,測試作業(yè)可以將這些文件寫入到系統(tǒng)170上的文件系統(tǒng)中的共享目錄。測試管理器可以定期監(jiān)視其共享目錄以發(fā)現(xiàn)新文件。測試管理器可以將具有某些 預(yù)定名稱的文件解釋為測試反饋。例如,如果它看到名為START_PROFILER的文件,則測試 管理器將把該文件解釋為請求測試管理器在測試作業(yè)所使用的系統(tǒng)上啟動概要剖析器的 測試反饋。類似地,名為BEGIN_EXE⑶TI0N_STATE的文件可被解釋為指示出準(zhǔn)備就緒狀態(tài)。測試作業(yè)還可以在文件內(nèi)容內(nèi)包括測試反饋。例如,它可以使用START_PROFILER 文件的內(nèi)容來指示出在其上啟動概要剖析器的系統(tǒng)。實際上,在一些實施例中,測試作業(yè)可以僅通過文件內(nèi)容來傳達(dá)測試反饋-文件的名稱可能僅因為其向測試管理器指示出該 文件包含測試反饋而相關(guān)。作為另一示例,在第4. 1節(jié)中呈現(xiàn)的示例性執(zhí)行腳本simple_ test.pl的測試計劃包括通過向文件系統(tǒng)寫入具有指定名稱的文件來發(fā)送測試細(xì)節(jié)的 send_feedback例程的步驟。4.7.收集統(tǒng)計信息根據(jù)本發(fā)明的一個實施例,測試框架可以包含統(tǒng)計信息收集組件(例如統(tǒng)計信息 收集器114)作為一特色,以協(xié)助實現(xiàn)反映測試作業(yè)中使用的系統(tǒng)的性能的日志(例如日志 160)的收集。統(tǒng)計信息收集器可在整個測試作業(yè)期間搜集這些日志,或者它可以只是在測 試管理器指示出測試作業(yè)完成時搜集日志。測試管理器可以將某些指令傳遞到統(tǒng)計信息收集器,這些指令使得它能夠確定它 應(yīng)當(dāng)采取哪些行動來獲得這些日志。這些指令可以是根據(jù)測試細(xì)節(jié)、測試反饋、默認(rèn)測試框 架設(shè)置或三者的任何組合得出的。這些指令例如可標(biāo)識統(tǒng)計信息主機(jī)的列表、執(zhí)行主機(jī)、測 試作業(yè)的開始和結(jié)束時間、測試作業(yè)的某些狀態(tài)的開始和結(jié)束時間、是否使能概要剖析、統(tǒng) 計信息主機(jī)或測試作業(yè)向其輸出日志的一個或多個共享倉庫的位置,等等。統(tǒng)計信息收集 器可能能夠自己確定這些細(xì)節(jié)中的一些_例如,它可能能夠根據(jù)共享倉庫內(nèi)用于測試反饋 的文件確定開始和結(jié)束時間。根據(jù)本發(fā)明的一個實施例,在測試作業(yè)結(jié)束時,統(tǒng)計信息收集器向測試作業(yè)暗示 的多種日志生成組件中的每一個請求性能日志。統(tǒng)計信息收集器可能能夠訪問例如統(tǒng)計信 息主機(jī)的列表?;蛘?,統(tǒng)計信息收集器可能能夠自己獲知用于一測試作業(yè)的統(tǒng)計信息收集 器的列表。統(tǒng)計信息收集器還可能能夠訪問或得出在每個統(tǒng)計信息主機(jī)上運(yùn)行的資源監(jiān)視 器和概要剖析器的列表。統(tǒng)計信息收集器可以向這些組件中的每一個請求它們可能已利用 與測試作業(yè)相關(guān)的度量收集的任何日志。為了允許日志生成組件判定日志是否相關(guān),統(tǒng)計 信息收集器可識別開始時間和結(jié)束時間。開始時間和結(jié)束時間可以是整個測試作業(yè)的,或 者只是測試作業(yè)處于特定狀態(tài)的一段時間的。統(tǒng)計信息收集器還可嘗試從網(wǎng)絡(luò)上的共享目 錄收集日志,其中,按照測試細(xì)節(jié)或測試反饋所指示,被測軟件或測試作業(yè)可能已向該共享 目錄輸出了日志。根據(jù)本發(fā)明的一個實施例,收集性能統(tǒng)計信息的負(fù)擔(dān)的大部分可被轉(zhuǎn)移到統(tǒng)計信 息主機(jī)本身。每個統(tǒng)計信息主機(jī)可以運(yùn)行用于在該個體統(tǒng)計信息主機(jī)處收集日志的進(jìn)程。 這種進(jìn)程的代碼可由測試框架提供。在接收到指示出測試作業(yè)的結(jié)束(或者指示出測試作 業(yè)的一狀態(tài)(統(tǒng)計信息主機(jī)被請求收集其數(shù)據(jù))的結(jié)束)的統(tǒng)計信息指令后,統(tǒng)計信息主 機(jī)上的進(jìn)程可以向統(tǒng)計信息收集器發(fā)送所收集的日志?;蛘?,統(tǒng)計信息主機(jī)上的進(jìn)程可以 向執(zhí)行主機(jī)發(fā)送日志,以被存儲在專用于特定測試作業(yè)的集中倉庫中。例如,統(tǒng)計信息主機(jī) 上的進(jìn)程可以向同一共享文件夾發(fā)送日志,在該文件夾中測試作業(yè)的執(zhí)行主機(jī)創(chuàng)建指示出 測試反饋的文件。根據(jù)一個實施例,測試計劃本身可包含用于從每個統(tǒng)計信息主機(jī)上的日志生成組 件搜集日志的指令。例如,測試作業(yè)可能調(diào)用了被測軟件的日志生成能力。它可以定位所 生成的日志并將它們直接轉(zhuǎn)發(fā)到統(tǒng)計信息收集器或者將它們放置在用于該測試作業(yè)的集 中日志倉庫中。默認(rèn)系統(tǒng)性能統(tǒng)計信息
24
根據(jù)一個實施例,測試框架可以針對其調(diào)用的每個測試作業(yè),從每個統(tǒng)計信息主 機(jī)收集默認(rèn)的一組系統(tǒng)性能統(tǒng)計信息,不論這種統(tǒng)計信息是否被明確請求。這些默認(rèn)統(tǒng)計 信息例如可包括處理器使用情況、存儲器使用情況、網(wǎng)絡(luò)利用情況、虛擬存儲器使用情況、 正在執(zhí)行的進(jìn)程的數(shù)目、硬盤使用情況、總線使用情況,等等。統(tǒng)計信息收集器可以直接從統(tǒng)計信息主機(jī)上的資源監(jiān)視器收集這些統(tǒng)計信息。例 如,統(tǒng)計信息收集器可以從嵌入在統(tǒng)計信息主機(jī)的操作系統(tǒng)中的資源監(jiān)視器收集統(tǒng)計信 息?;蛘撸總€測試框架上由測試框架發(fā)起的進(jìn)程可以搜集這些統(tǒng)計信息。根據(jù)一個實施例,測試框架可以從測試集群中的所有系統(tǒng)收集該默認(rèn)的一組系統(tǒng) 性能統(tǒng)計信息,而不論是否存在關(guān)于測試作業(yè)涉及測試集群中的特定系統(tǒng)的指示。測試作 業(yè)中未涉及的系統(tǒng)的統(tǒng)計信息可以在測試結(jié)果生成期間被確定和去除,或者它們可被保留 在測試結(jié)果中。4.8.生成測試結(jié)果在統(tǒng)計信息收集器收集了任何可用的日志_例如日志160-之后,統(tǒng)計信息收集器 可以將這些日志轉(zhuǎn)發(fā)到測試結(jié)果生成組件,例如測試結(jié)果生成器115。或者,統(tǒng)計信息收集 器可以將日志返回到測試管理器或測試模塊,它們中的任一個隨后可將其轉(zhuǎn)發(fā)到測試結(jié)果 生成器。測試結(jié)果生成器隨后可將日志轉(zhuǎn)化成測試結(jié)果。作為測試結(jié)果的一部分,測試結(jié)果生成器可以創(chuàng)建任何數(shù)目的數(shù)據(jù)報告,其中每 個數(shù)據(jù)報告可以包括與在所收集的日志中記錄了其值的一個或多個性能度量或事件相關(guān) 的數(shù)據(jù)。每個數(shù)據(jù)報告可以包括時間序列數(shù)據(jù)、基于文本的日志條目或表格式數(shù)據(jù),以及標(biāo) 識相關(guān)性能度量等的元數(shù)據(jù)。測試結(jié)果可以以多種形式來生成。用于存儲測試結(jié)果的一種形式可以是文件系統(tǒng) 上的數(shù)據(jù)文件的集合。例如,每個數(shù)據(jù)報告可被存儲為一個文件,該文件是按照數(shù)據(jù)報告的 元數(shù)據(jù)或者發(fā)源數(shù)據(jù)報告的數(shù)據(jù)的日志來命名的。為了協(xié)助實現(xiàn)容易的瀏覽,這些數(shù)據(jù)文 件可以在與測試作業(yè)相關(guān)聯(lián)的目錄下以樹狀結(jié)構(gòu)組織。這種目錄可以在測試框架或測試模 塊可訪問的文件系統(tǒng)上。這種目錄例如可以按照測試用例或測試細(xì)節(jié)中包括的測試作業(yè)標(biāo) 識符來命名。樹狀結(jié)構(gòu)可包括每個統(tǒng)計信息主機(jī)和每個日志生成組件的分支。它還可包括 根據(jù)匯總或分析生成的數(shù)據(jù)報告的分支?;跍y試框架定義的方案,測試結(jié)果生成器也可改為將測試結(jié)果存儲為數(shù)據(jù)庫中 的行和表格或者XML文件中的元素。根據(jù)一個實施例,只要通過將每個收集的日志轉(zhuǎn)化成單個數(shù)據(jù)報告,就可以生成 簡單的測試結(jié)果。單個日志的內(nèi)容可成為單個數(shù)據(jù)報告的數(shù)據(jù)。測試結(jié)果生成器可以基于 例如日志的文件名、日志內(nèi)的頭部或者與包含日志的文件相關(guān)聯(lián)的屬性來為數(shù)據(jù)報告生成 元數(shù)據(jù)。根據(jù)一個實施例,測試結(jié)果生成器可以通過對日志執(zhí)行包括過濾、匯總和分析在 內(nèi)的多種操作來創(chuàng)建更增強(qiáng)的測試結(jié)果。測試結(jié)果生成器可以默認(rèn)執(zhí)行這些和其他操作, 或者測試結(jié)果生成器可以在接受日志的同時接受輸入,根據(jù)這些輸入,測試結(jié)果生成器可 以確定執(zhí)行哪些操作以及如何執(zhí)行它們。所述輸入例如可根據(jù)測試用例或測試細(xì)節(jié)來得
出o去除無關(guān)數(shù)據(jù)作是過濾無關(guān)數(shù)據(jù)。日志的每一行可包含指示出何 時發(fā)生了事件或者取得了度量值的時間戳。當(dāng)它接收到日志時,測試結(jié)果生成器可能也從 發(fā)送方實體接收了指示出測試作業(yè)的開始時間和結(jié)束時間的數(shù)據(jù)。測試結(jié)果生成器可以去 除日志的所有未落在開始和結(jié)束時間之間的行。在一些情況下,所使用的開始或結(jié)束時間可以基于測試作業(yè)何時進(jìn)入某個狀態(tài)而 不是測試作業(yè)何時實際開始。測試結(jié)果生成器可能接收到了指示出測試作業(yè)的多個狀態(tài)的 開始和結(jié)束時間的數(shù)據(jù)。測試結(jié)果生成器可被配置為去除不與特定狀態(tài)(例如“執(zhí)行”狀 態(tài))相對應(yīng)的數(shù)據(jù)。此特定狀態(tài)可以是為測試框架默認(rèn)定義的,或者它可能是在測試細(xì)節(jié) 中被傳達(dá)給測試管理器、然后被傳遞到測試結(jié)果生成器的。對數(shù)據(jù)重采樣測試結(jié)果生成器可以執(zhí)行的另一操作是數(shù)據(jù)重采樣。日志可包含按某個頻率取得 的度量值。測試結(jié)果生成器可以接收指示出測試結(jié)果應(yīng)當(dāng)以更低的頻率報告度量的輸入。 測試結(jié)果生成器可以對度量值重采樣,以便在為測試結(jié)果生成的數(shù)據(jù)報告中它們是以期望 的頻率被報告的。例如,日志可以每0. 1秒報告度量。測試用例可能請求了每秒報告度量。通過在 日志的每十行上對度量值取平均,并隨后向數(shù)據(jù)報告輸出十行的平均以及十行的中值時間 戳,就可以對度量重采樣。在期望報告度量的頻率高于日志中存儲的頻率的情況下,測試生成器也可能能夠 為該度量內(nèi)插數(shù)據(jù),以便幫助用戶猜測在特定時間該度量可能是什么值。按測試作業(yè)狀態(tài)組織數(shù)據(jù)測試結(jié)果生成器還可以根據(jù)由測試管理器或統(tǒng)計信息收集器收集的狀態(tài)數(shù)據(jù)來 對來自日志的數(shù)據(jù)進(jìn)行組織。測試結(jié)果生成器可以將日志細(xì)分為針對每個狀態(tài)的單獨數(shù)據(jù) 報告。每個數(shù)據(jù)報告可以僅包括在測試作業(yè)處于數(shù)據(jù)報告的特定狀態(tài)中時取得的度量值或 發(fā)生的事件。每個這種數(shù)據(jù)報告的元數(shù)據(jù)可以標(biāo)識數(shù)據(jù)報告所屬的狀態(tài)。關(guān)聯(lián)相關(guān)度量測試結(jié)果生成器可以將某些度量關(guān)聯(lián)到同一數(shù)據(jù)報告中。例如,可能存在具有屬 于相關(guān)度量的時間序列數(shù)據(jù)的單獨日志。測試結(jié)果生成器可以將這些度量輸出到同一數(shù)據(jù) 報告中的表格格式,以便這些度量可以更容易被關(guān)聯(lián)。在度量值是在不同時間或按不同頻 率取得的情況下,合并度量可能需要例如對度量重采樣或者調(diào)節(jié)度量的時間戳。測試結(jié)果生成器還可以基于相關(guān)度量執(zhí)行計算,以便更好地標(biāo)識度量之間的關(guān)聯(lián) 性。例如,存儲器使用情況可以被除以線程計數(shù),以得出反映系統(tǒng)上的每個線程所使用的存 儲器的平均量的數(shù)據(jù)報告。這種關(guān)聯(lián)的數(shù)據(jù)報告的元數(shù)據(jù)可以標(biāo)識諸如“每線程存儲器”的 標(biāo)題。元數(shù)據(jù)還可以標(biāo)識個體度量“存儲器”和“線程”的數(shù)據(jù)報告,以便允許用戶向下鉆 取到更多細(xì)節(jié)??缦到y(tǒng)匯總統(tǒng)計信息測試結(jié)果生成器還可以跨多個系統(tǒng)生成匯總的數(shù)據(jù)報告。測試結(jié)果生成器可以識 別來自測量相同度量的不同系統(tǒng)的日志(或者已經(jīng)生成的數(shù)據(jù)報告)。如果每個日志中的 度量是以相同的頻率在大致相同的時間采樣的,則測試結(jié)果生成器只要通過對每個特定時 間對來自每個系統(tǒng)的度量值取平均,就可以生成匯總數(shù)據(jù)報告。如果度量是在不同的時間
26或按不同的間隔采樣的,則測試結(jié)果生成器可以采用若干操作來匯總它們,例如對度量重 采樣并隨后對其取平均。將日志轉(zhuǎn)化成示圖可查看統(tǒng)計信息測試結(jié)果生成器還可以采用技術(shù)來將某些基于事件的日志轉(zhuǎn)化成可以圖形可視 化的數(shù)據(jù)報告。例如,日志生成組件可能在每次某個事件發(fā)生時向日志輸出了一行。測試 結(jié)果生成器可以根據(jù)這些事件確定每秒發(fā)生事件的次數(shù)。它可以在數(shù)據(jù)報告中輸出一行, 該行帶有測試作業(yè)的每秒的時間戳在該秒中發(fā)生的事件的數(shù)目。從而,數(shù)據(jù)報告隨后可被 可視化為示出每秒的事件數(shù)目的示圖。突出關(guān)鍵統(tǒng)計信息測試結(jié)果生成器可以分析特定數(shù)據(jù)報告中的度量值以確定對于該數(shù)據(jù)報告關(guān)注 的標(biāo)準(zhǔn)統(tǒng)計信息,包括平均值、最小值、最大值、標(biāo)準(zhǔn)偏差等等。這些值可被存儲供以后用作 數(shù)據(jù)報告的元數(shù)據(jù)。突出重要或非預(yù)期結(jié)果測試結(jié)果生成器還可以采用分析技術(shù)來突出數(shù)據(jù)中的重要或非預(yù)期結(jié)果。它可以 在測試結(jié)果中包括包含這種重要或非預(yù)期結(jié)果的數(shù)據(jù)報告的列表。例如,測試結(jié)果生成器可被配置為突出這樣的度量這些度量的值在測試作業(yè)的 過程期間的改變高于某個預(yù)定的百分比。作為另一示例,測試結(jié)果生成器可被配置為突出 具有超過標(biāo)準(zhǔn)偏差的值的度量。作為另一示例,測試結(jié)果生成器可能接收了指示出特定度量的某個閾值的指令。 此閾值可能是在測試細(xì)節(jié)中指定的。例如,用戶可能將此閾值作為測試用例的一部分提交。 或者,測試模塊可能通過分析先前執(zhí)行的測試作業(yè)中的該度量的值而確定了此閾值。如果 對于特定數(shù)據(jù)報告中的度量,該閾值被超過,則測試結(jié)果生成器可以將該數(shù)據(jù)報告添加到 重要或非預(yù)期結(jié)果的列表。4. 9.呈現(xiàn)測試結(jié)果根據(jù)一個實施例,測試結(jié)果(例如測試結(jié)果155)可被返回給測試模塊。用戶可通 過測試模塊的界面來請求查看測試結(jié)果。測試模塊可以利用報告組件(例如測試報告器 116)來生成測試模塊的界面。測試報告器可以是或者使用任何圖形或文本界面。測試報告器可以基于測試結(jié)果 中的數(shù)據(jù)報告來生成示圖、表格和文本視圖。測試報告器可以以多種方式來組織這些視圖, 以允許用戶更迅速地訪問數(shù)據(jù)。測試報告器可以包含用于對測試結(jié)果數(shù)據(jù)執(zhí)行進(jìn)一步操作 以及構(gòu)建額外數(shù)據(jù)報告的多種交互式控件作為一特色。示例性web界面圖6-10圖示出測試報告器116可生成的示例性界面。圖6-9中的測試結(jié)果的組 織和呈現(xiàn)僅是示例性的,并且對于不同的測試作業(yè)和不同的測試模塊可以有很大變化。也 可改為使用用于組織和可視化測試結(jié)果的多種其他技術(shù)。圖6示出了根據(jù)本發(fā)明實施例用于呈現(xiàn)測試結(jié)果的示例性web界面600。web界 面包括控件608,用于輸入測試作業(yè)的標(biāo)識符-例如,web界面400的控件401中指定的標(biāo) 識符。一旦利用控件608選擇了測試作業(yè),web界面600就可以顯示選項卡,例如選項卡 601-604。選項卡601-604中的每一個可以提供與所選擇的測試作業(yè)相關(guān)聯(lián)的信息的視圖。例如,當(dāng)被點擊時,選項卡601可以示出為產(chǎn)生該測試作業(yè)的測試用例輸入的信息。如果已為所選的測試作業(yè)確定了測試結(jié)果,則用戶可以點擊選項卡603和604來 查看測試結(jié)果。選項卡603可用于瀏覽測試結(jié)果603中的數(shù)據(jù)報告的圖形顯示。選項卡 604可用于瀏覽測試結(jié)果604中的數(shù)據(jù)報告的文本顯示。測試結(jié)果的組織樹610是樹狀結(jié)構(gòu),其可用于定位和瀏覽針對特定系統(tǒng)的特定類型的數(shù)據(jù)報告。 例如,樹610可用于瀏覽基于web界面400中指定的測試用例為測試作業(yè)生成的測試結(jié)果。 如控件414中所示,由此測試用例產(chǎn)生的測試作業(yè)只使用了兩個統(tǒng)計信息主機(jī),其中每一 個分別在測試結(jié)果中作為樹610的分支611和612列出。如果測試結(jié)果包括了跨系統(tǒng)匯總 的數(shù)據(jù),則樹也可以包括用于選擇這種數(shù)據(jù)的分支。圖7示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的數(shù)據(jù)報告的圖形表示的示 例性web界面700。web界面700示出了 web界面600對用戶展開樹610的分支611的反 應(yīng)。樹710是分支611的展開視圖。此分支下的所有數(shù)據(jù)報告都是關(guān)于名為perflab40的 系統(tǒng)的。樹710包括兩個子分支應(yīng)用結(jié)果713和系統(tǒng)結(jié)果714。這些子分支按日志生成組 件的類型來組織perflab40的數(shù)據(jù)報告。應(yīng)用結(jié)果713對應(yīng)于由被測軟件生成的日志,而 系統(tǒng)結(jié)果714對應(yīng)于為perflab40收集的默認(rèn)系統(tǒng)統(tǒng)計信息。根據(jù)一個實施例,樹710可 以包括針對利用其他類型的日志生成組件(例如概要剖析器)的其他測試作業(yè)的其他子分支。每個子分支包括更具體地標(biāo)識發(fā)源了測試結(jié)果的數(shù)據(jù)報告的日志生成組件的額 外子分支。例如,子分支715將軟件組件exec_c0mmand. sh標(biāo)識為其統(tǒng)計信息的來源,而子 分支716將ysar資源監(jiān)視器標(biāo)識其系統(tǒng)結(jié)果714的來源。子分支716被進(jìn)一步組織成5 個子分支720-724,其中每一個對應(yīng)于作為日志從ysar資源監(jiān)視器輸出的一個不同的循環(huán) 式數(shù)據(jù)文件。確定如何在視覺上表示數(shù)據(jù)報告根據(jù)一個實施例,測試報告器可以通過分析數(shù)據(jù)報告中的數(shù)據(jù)來確定如何在視覺 上表示數(shù)據(jù)報告。具有包含時間戳的行的數(shù)據(jù)報告可以視為時間序列數(shù)據(jù)并被相應(yīng)地圖 解。表格格式(即,具有行和列)的其他數(shù)據(jù)可被視為表格式數(shù)據(jù)并利用表格、條形圖或餅 狀圖來圖解。非表格格式的數(shù)據(jù)可以被示為純文本日志。或者,測試報告器可以使用與發(fā)源數(shù)據(jù)報告的數(shù)據(jù)的日志相關(guān)聯(lián)的文件擴(kuò)展名來 確定數(shù)據(jù)報告的正確視覺呈現(xiàn)。例如,具有.rrd擴(kuò)展名的數(shù)據(jù)報告可以被視為時間序列數(shù) 據(jù)。具有.csv擴(kuò)展名的數(shù)據(jù)報告可被視為表格式數(shù)據(jù)。具有.log擴(kuò)展名的數(shù)據(jù)報告可被 視為純文本日志。測試結(jié)果中的數(shù)據(jù)報告的圖形視圖可以通過能夠?qū)y試結(jié)果的時間序列或CSV 數(shù)據(jù)報告變換成示圖的任何繪圖工具來生成。例如,可以通過利用gnuplot繪出數(shù)據(jù)報告 來生成示圖。查看基于時間序列的數(shù)據(jù)在web界面700中,子分支720當(dāng)前被選擇。子分支720包括5個不同度量的數(shù) 據(jù)報告,其中每個度量可以通過選中相應(yīng)的度量選擇控件730-734而被示為示圖。示圖740是“用戶”度量的值的時間序列示圖,其繪出了在測試作業(yè)的過程期間在perfab40上的處 理器利用情況。雖然沒有示出,但是web界面還可以包括與其他度量選擇控件731-734相 對應(yīng)的數(shù)據(jù)的圖形視圖。根據(jù)一個實施例,web界面700還可以包含允許用戶將數(shù)據(jù)報告覆蓋在同一示圖 中的控件作為一特色。例如,web界面700可以包含示圖740旁邊的下拉或復(fù)選框選擇器作 為一特色。這些選擇器可以允許用戶選擇一個或多個其他數(shù)據(jù)報告來在示圖740上繪出。 這樣,用戶可以更容易地發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)聯(lián)性。查看表格式數(shù)據(jù)根據(jù)一個實施例,web界面700還可以用于查看諸如CSV之類的表格格式的數(shù)據(jù) 報告。測試報告器可以將這種數(shù)據(jù)報告表現(xiàn)為表格?;蛘?,web界面700可以嘗試將數(shù)據(jù) 報告表現(xiàn)為條形圖、餅狀圖或者任何其他類型的示圖。如果數(shù)據(jù)報告包含時間戳列,則測試報告器可以將數(shù)據(jù)報告的每列表現(xiàn)為同一示 圖中的單獨度量?;蛘?,測試報告器可以將數(shù)據(jù)報告中的每列視為可以單獨查看和使能的 單獨時間序列示圖?;蛘?,用于查看測試結(jié)果的web界面可以包含這樣一個控件作為一特色該控件 允許用戶在表格、時間序列示圖或者其他類型的用于查看數(shù)據(jù)報告的示圖之間進(jìn)行選擇。查看純文本日志某些數(shù)據(jù)報告可能不能很好地在視覺上轉(zhuǎn)化。例如,事件的日志或調(diào)試輸出可能 包含多個不相關(guān)的語句。這些語句對于測試結(jié)果可能仍是重要的。從而,測試報告器可以 允許用戶直接查看這些日志的內(nèi)容。圖8示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的基于文本的數(shù)據(jù)的示例性 web界面800。用戶可能例如通過點擊web界面600的選項卡604而到達(dá)了 web界面800。 與web界面700 —樣,web界面800包含用于按系統(tǒng)和日志生成組件組織數(shù)據(jù)報告的樹狀 結(jié)構(gòu)作為一特色。此樹狀結(jié)構(gòu)是樹800。樹810僅包括不能被圖形可視化的基于文本的數(shù) 據(jù)報告;然而,測試報告器也可為能夠以圖形方式查看的數(shù)據(jù)報告提供純文本視圖。如樹810所示,web界面800被示為對從名為simple, log的軟件生成日志得出的 數(shù)據(jù)報告進(jìn)行可視化???20是將此數(shù)據(jù)報告顯示為純文本的可滾動文本框。為數(shù)據(jù)報告識別關(guān)鍵統(tǒng)計信息示圖740下面是示出可能被結(jié)合到了示圖740的數(shù)據(jù)報告的元數(shù)據(jù)中的統(tǒng)計信息 的關(guān)鍵統(tǒng)計信息指示符745的列表,例如平均值、最大值和最小值。根據(jù)一個實施例,這些 值在示圖740本身上可以利用顏色或符號來指示出。過濾數(shù)據(jù)用于呈現(xiàn)測試結(jié)果的界面還可以包括過濾數(shù)據(jù)報告中的數(shù)據(jù)的呈現(xiàn)的控件。例 如,控件751和752允許用戶限制所繪出的數(shù)據(jù)的時間范圍。web界面700還可以包含其他控件作為一特色,這些其他控件在被點擊時使得測 試報告器執(zhí)行與第4. 8節(jié)中說明的那些類似的分析和匯總操作。測試報告器可以在web界 面700的另一窗口中顯示這些分析和匯總操作的結(jié)果。比較來自其他測試作業(yè)的結(jié)果根據(jù)一個實施例,來自測試作業(yè)的測試結(jié)果可以被保存,以便將來對照來自將來
29的測試作業(yè)的測試結(jié)果查看和分析。對于新測試結(jié)果中的任何數(shù)據(jù)報告,測試報告器可以 自動在先前存儲的測試結(jié)果中查找類似度量的數(shù)據(jù)報告。它可以將先前測試結(jié)果中的類似 度量的示圖覆蓋在新測試結(jié)果中的類似度量的示圖上,以便比較。這樣,web界面可以幫助 用戶識別基于類似測試用例的測試作業(yè)的測試結(jié)果之間的趨勢。web界面甚至可包括總結(jié) 頁,該總結(jié)頁示出在一個或多個先前測試結(jié)果中值有很大不同的度量的示圖和其他信息。根據(jù)一個實施例,測試報告器可能能夠基于測試結(jié)果的組織來識別具有類似度量 的數(shù)據(jù)報告的測試結(jié)果?;蛘?,測試報告器可以自動假定基于同一模板測試用例的測試作 業(yè)的測試結(jié)果具有類似的數(shù)據(jù)報告。用戶還可以選擇先前的測試結(jié)果來進(jìn)行比較,如web界面700中所示??丶?60 允許用戶識別其他測試作業(yè)的逗號分隔列表。如果這些其他測試作業(yè)中任何一個的測 試結(jié)果包括基于與當(dāng)前查看的那些類似的度量的數(shù)據(jù)報告(例如,如果測試結(jié)果也具有 perflab40的用戶處理器利用情況數(shù)據(jù)),則測試報告器可以將這些數(shù)據(jù)報告覆蓋在web界 面700中的相應(yīng)示圖上。額外示例性界面圖9示出了根據(jù)本發(fā)明實施例用于查看測試結(jié)果中的數(shù)據(jù)報告的圖形表示的示 例性web界面900。圖9與圖7類似,只不過它示出了可如何為一不同的子分支721圖解 數(shù)據(jù)報告。從而,圖9包括了不同的一組度量選擇控件930,它們對應(yīng)于可利用不同的示圖 (例如示圖940)來可視化的數(shù)據(jù)報告的度量。識別非預(yù)期趨勢根據(jù)一個實施例,當(dāng)像圖6中那樣沒有選擇樹的分支時,主視圖窗格620可以包括 去往示出具有重要或非預(yù)期數(shù)據(jù)的數(shù)據(jù)報告的示圖的鏈接。主視圖窗格620還可包括用于 直接示出這些數(shù)據(jù)報告的示圖。主視圖窗格620還可包括已針對該測試作業(yè)或者針對先前 測試作業(yè)識別為重要的度量的示圖。報告插件根據(jù)一個實施例,測試框架或測試模塊可提供用于創(chuàng)建生成各個數(shù)據(jù)報告的額外 視圖的插件的可擴(kuò)展API。例如,安裝的插件可在測試結(jié)果中的每個數(shù)據(jù)報告的默認(rèn)視圖旁 邊暴露出一控件。該控件可以是一按鈕,該按鈕在被點擊時彈出具有數(shù)據(jù)報告的替換視圖 的窗口。這種替換視圖例如可以是不同的示圖類型或者特殊的文本顯示。這種替換視圖還 可以過濾數(shù)據(jù)報告或顯示從對數(shù)據(jù)報告執(zhí)行的分析性操作得出的數(shù)據(jù)。統(tǒng)計信息購物車圖10是根據(jù)本發(fā)明實施例用于利用購物車模型構(gòu)建測試結(jié)果中的數(shù)據(jù)的定制視 圖的示例性web界面1000。這種定制視圖可以例如經(jīng)由與web界面600的選項卡601、602、 603和604類似的定制視圖選項卡1005來訪問。如圖7和8所示,每個表現(xiàn)出的數(shù)據(jù)報告,無論它是示圖、表格還是文本框,都可包 括復(fù)選框控件。web界面700、800或900可被配置為包括按鈕,該按鈕將其復(fù)選框已被選中 的數(shù)據(jù)報告添加到定制視圖,如圖10所示。例如,來自web界面900的示圖940可能已通 過按鈕950被添加到web界面1000中示出的定制視圖。web界面1000可包括通過這種手 段添加的許多額外示圖。定制視圖可被保存,以便在下次用戶查看測試結(jié)果時參考。web界面1000包括控于刪除、取消選擇和保存web界面1000的定制視圖。web界 面1000還可包括用于打印定制視圖的控件。web界面1000還包括允許用戶輸入注釋以供 將來參考的注釋框1050。用戶可以創(chuàng)建和保存任何數(shù)目的這種定制視圖,每一個具有不同 的標(biāo)題。根據(jù)一個實施例,定制視圖與測試模塊而不是單個測試結(jié)果相關(guān)聯(lián)。一旦被保存, 定制視圖就可以為針對該測試模塊生成的所有測試結(jié)果示出。當(dāng)用戶保存定制視圖時,測 試模塊可以保存指示出由定制視圖中的每個數(shù)據(jù)報告記錄的一個或多個度量的元數(shù)據(jù)。對 于任何后續(xù)的測試結(jié)果,測試報告器可以使用此元數(shù)據(jù)來確定在該后續(xù)測試結(jié)果的定制視 圖中要示出的數(shù)據(jù)報告。例如,用戶可以創(chuàng)建一定制視圖,該定制視圖包括示出第一測試結(jié)果的處理器利 用情況的示圖。當(dāng)用戶保存此定制視圖時,測試模塊可以存儲指示出該定制視圖包括了處 理器利用情況度量的示圖的信息。當(dāng)用戶查看后續(xù)測試結(jié)果時,測試報告器可以為后續(xù)測 試結(jié)果自動生成相應(yīng)定制視圖。相應(yīng)定制視圖可以包括示出第二測試結(jié)果的處理器利用情 況的示圖。如果后續(xù)測試結(jié)果不包含處理器利用情況度量的數(shù)據(jù)報告,則后續(xù)測試結(jié)果的 定制視圖可以簡單地不包括處理器利用情況度量的示圖。根據(jù)一個實施例,保存的定制視圖可以與測試用例模板相關(guān)聯(lián)而不是與測試模塊 總地相關(guān)聯(lián),意味著針對基于相同測試用例模板的測試作業(yè)生成的任何測試結(jié)果都可自動 包括為針對基于同一測試用例模板的另一測試作業(yè)生成的另一測試結(jié)果保存的定制視圖。 測試用例模板在4. 3中論述。4. 10.操作系統(tǒng)獨立性根據(jù)本發(fā)明的一個實施例,測試框架的各個方面是獨立于平臺的,意味著測試框 架可被部署在具有運(yùn)行多種操作系統(tǒng)的系統(tǒng)的測試集群上。根據(jù)一個實施例,測試框架可包括能夠自動檢測執(zhí)行主機(jī)和統(tǒng)計信息主機(jī)的操作 系統(tǒng)的代碼。當(dāng)_經(jīng)由例如安全外殼或telnet會話-向操作系統(tǒng)本身發(fā)送測試指令或統(tǒng) 計信息指令時,測試框架可以以可在檢測到的操作系統(tǒng)上執(zhí)行的格式發(fā)出命令或重新編排 命令格式。根據(jù)一個實施例,測試框架可被配置為自動搜索測試集群中的每個系統(tǒng)上的資源 監(jiān)視或概要剖析組件。測試框架可包括可用在特定系統(tǒng)的操作系統(tǒng)上的多個概要剖析器或 資源監(jiān)視組件的列表。測試框架可以搜索列表中的每個組件,或者在其找到第一個可接受 的組件時停止搜索。它例如可以搜索文件系統(tǒng)中的一個或多個默認(rèn)位置以定位特定概要剖 析器或資源監(jiān)視組件的可執(zhí)行文件。它隨后可調(diào)用此可執(zhí)行文件。它還可以使用例如系統(tǒng) 注冊表來定位特定的概要剖析器或資源監(jiān)視應(yīng)用。根據(jù)一個實施例,測試框架可被配置為在測試集群中的每個系統(tǒng)上安裝其自己的 概要剖析或資源監(jiān)視組件,從而確保它將能夠訪問每個系統(tǒng)上的概要剖析或資源監(jiān)視組 件。根據(jù)一個實施例,每當(dāng)在測試細(xì)節(jié)中標(biāo)識一統(tǒng)計信息主機(jī)時,如果測試框架無法定位到 適當(dāng)?shù)母乓饰銎骰蛸Y源監(jiān)視組件,則測試框架可以在該統(tǒng)計信息主機(jī)上安裝其自己的概 要剖析或資源監(jiān)視組件。對于在測試集群中的系統(tǒng)上運(yùn)行的每個操作系統(tǒng),測試框架可以 存儲在該操作系統(tǒng)上運(yùn)行的概要剖析和資源監(jiān)視組件的安裝程序。根據(jù)一個實施例,測試框架可被配置為與測試集群中的每個操作系統(tǒng)上的至少一
31個概要剖析器和資源監(jiān)視組件生成的日志通信并理解這些日志。它例如可以知道控制每個 概要剖析或資源監(jiān)視組件所必需的配置參數(shù)?;蛘撸梢灾廊绾螢槊總€概要剖析或資 源監(jiān)視組件向?qū)S枚丝诎l(fā)送命令。它還可以知道概要剖析或資源監(jiān)視組件存儲其日志的默 認(rèn)位置。根據(jù)一個實施例,測試框架中的每個系統(tǒng)可以運(yùn)行測試框架所管理的管理進(jìn)程。 測試框架不需要知道如何與系統(tǒng)的操作系統(tǒng)和日志生成組件遠(yuǎn)程通信,而是可以改為與此 進(jìn)程通信。此進(jìn)程隨后可被配置為代表測試框架與操作系統(tǒng)和日志生成組件本地通信。根據(jù)一個實施例,測試框架和測試模塊的界面可以是獨立于平臺的。例如,界面可 以是可在任何操作系統(tǒng)上的web瀏覽器中查看的web界面,例如圖3_8中所示的那些?;?者,界面可以是某種其他的普遍可讀的形式,例如基于Java的客戶端。根據(jù)一個實施例,測試框架的每個組件也可以是獨立于平臺的,因為它是利用諸 如Java之類的可以不加改變地在任何操作系統(tǒng)上編譯和執(zhí)行的語言來編寫為代碼的?;?者,用于測試框架的代碼可以針對每個操作系統(tǒng)被移植成可在該操作系統(tǒng)上編譯和執(zhí)行的
^五4. 11.實時監(jiān)視根據(jù)一個實施例,統(tǒng)計信息收集器可以實時收集日志。測試結(jié)果生成器可以實時 創(chuàng)建測試結(jié)果,這些測試結(jié)果隨后可被測試報告器實時報告。這種實時報告可允許用戶更 容易地確定被測軟件中的錯誤和效率低下的原因,因為當(dāng)它們的影響發(fā)生時,用戶可以被 提示以這些影響。此外,測試報告器可以生成用于實時報告測試結(jié)果的交互式界面,該界面允許了 用戶動態(tài)改變測試用例的某些條件。例如,該實時交互式界面可以包含“使能概要剖析”按 鈕作為一特色。用戶可以響應(yīng)于觀看到實時結(jié)果而點擊此按鈕。測試模塊隨后可向測試管 理器發(fā)送新的測試細(xì)節(jié)。當(dāng)認(rèn)識到新的測試細(xì)節(jié)具有與已經(jīng)執(zhí)行的測試作業(yè)相等的測試作 業(yè)標(biāo)識符時,測試管理器可以向測試作業(yè)中涉及的執(zhí)行主機(jī)或統(tǒng)計信息主機(jī)發(fā)送補(bǔ)充測試 指令或統(tǒng)計信息指令,這些指令使得它們開始對已經(jīng)執(zhí)行的測試作業(yè)進(jìn)行概要剖析。5.0.實現(xiàn)機(jī)制-硬件概述圖11是圖示出本發(fā)明的實施例可在其上實現(xiàn)的計算機(jī)系統(tǒng)1100的框圖。計算機(jī) 系統(tǒng)1100包括用于傳輸信息的總線1102或其他通信機(jī)構(gòu)以及與總線1102相耦合用于處 理信息的處理器1104。計算機(jī)系統(tǒng)1100還包括諸如隨機(jī)訪問存儲器(RAM)或其他動態(tài)存 儲設(shè)備之類的主存儲器1106,其耦合到總線1102,用于存儲信息和處理器1104要執(zhí)行的指 令。主存儲器1106還可用于存儲在處理器1104執(zhí)行指令期間的臨時變量或其他中間信息。 計算機(jī)系統(tǒng)1100還包括只讀存儲器(ROM) 1108或其他靜態(tài)存儲設(shè)備,其耦合到總線1102, 用于存儲靜態(tài)信息和處理器1104的指令。提供了諸如磁盤或光盤之類的存儲設(shè)備1110,其 耦合到總線1102,用于存儲信息和指令。計算機(jī)系統(tǒng)1100可以經(jīng)由總線1102耦合到顯示器1112,例如陰極射線管(CRT), 用于向計算機(jī)用戶顯示信息。包括字母數(shù)字和其他鍵的輸入設(shè)備1114被耦合到總線1102, 用于向處理器1104傳輸信息和命令選擇。另一類用戶輸入設(shè)備是光標(biāo)控制裝置1116,例如 鼠標(biāo)、軌跡球或光標(biāo)方向鍵,用于向處理器1104傳輸方向信息和命令選擇,并用于控制顯 示器1112上的光標(biāo)移動。該輸入設(shè)備通常具有兩個軸(第一軸(例如x)和第二軸(例如y))上的兩個自由度,其允許設(shè)備指定平面中的位置。本發(fā)明涉及使用計算機(jī)系統(tǒng)1100來實現(xiàn)這里描述的技術(shù)。根據(jù)本發(fā)明的一個實 施例,這些技術(shù)由計算機(jī)系統(tǒng)1100響應(yīng)于處理器1104執(zhí)行包含在主存儲器1106中的一條 或多條指令的一個或多個序列而執(zhí)行。這種指令可以被從另一計算機(jī)可讀介質(zhì)(如存儲設(shè) 備1110)讀取到主存儲器1106中。對包含在主存儲器1106中的指令序列的執(zhí)行使得處理 器1104執(zhí)行這里描述的過程步驟。在替換實施例中,可以使用硬線電路來替代軟件指令或 與軟件指令相組合以實現(xiàn)本發(fā)明。因此,本發(fā)明的實施例并不限于硬件電路和軟件的任何 特定組合。這里所用的術(shù)語“機(jī)器可讀介質(zhì)”指參與提供使得機(jī)器以特定方式工作的數(shù)據(jù)的 任何介質(zhì)。在利用計算機(jī)系統(tǒng)1100實現(xiàn)的實施例中,例如,在向處理器1104提供指令以供 執(zhí)行時,涉及了各種機(jī)器可讀介質(zhì)。這種介質(zhì)可以采取許多形式,包括但不限于存儲介質(zhì)和 傳輸介質(zhì)。存儲介質(zhì)包括非易失性介質(zhì)和易失性介質(zhì)。非易失性介質(zhì)例如包括光盤或磁 盤,如存儲設(shè)備1110。易失性介質(zhì)包括動態(tài)存儲器,如主存儲器1106。傳輸介質(zhì)包括同軸 電纜、銅線和光纖,包括構(gòu)成總線1102的線路。傳輸介質(zhì)也可以采取聲波或光波的形式,例 如在無線電波和紅外數(shù)據(jù)通信期間生成的聲波或光波。所有這種介質(zhì)都必須是有形的,以 使得介質(zhì)所承載的指令能夠被物理機(jī)構(gòu)檢測到,該物理機(jī)構(gòu)將指令讀取到機(jī)器中。機(jī)器可讀介質(zhì)的常見形式例如包括軟盤、柔性盤、硬盤、磁帶或任何其他磁介質(zhì), CD-ROM、任何其他光介質(zhì),穿孔卡、紙帶、任何其他具有孔圖案的物理介質(zhì),RAM、PROM和 EPROM、FLASH-EPR0M、任何其他存儲器芯片或卡盤,下文中描述的載波,或者計算機(jī)可以讀 取的任何其他介質(zhì)。各種形式的機(jī)器可讀介質(zhì)可用于將一條或多條指令的一個或多個序列傳送到處 理器1104以供執(zhí)行。例如,指令可以首先承載在遠(yuǎn)程計算機(jī)的磁盤上。遠(yuǎn)程計算機(jī)可以將 指令加載到其動態(tài)存儲器中,并利用調(diào)制解調(diào)器經(jīng)由電話線發(fā)送指令。計算機(jī)系統(tǒng)1100本 地的調(diào)制解調(diào)器可以接收電話線上的數(shù)據(jù),并使用紅外發(fā)送器來將數(shù)據(jù)轉(zhuǎn)換為紅外信號。 紅外檢測器可以接收在紅外信號中攜帶的數(shù)據(jù),并且適當(dāng)?shù)碾娐房梢詫?shù)據(jù)置于總線1102 上??偩€1102將數(shù)據(jù)傳送到主存儲器1106,處理器1104從主存儲器1106取得指令并執(zhí)行 指令。主存儲器1106接收的指令可以可選地在處理器1104執(zhí)行之前或之后存儲在存儲設(shè) 備1110上。計算機(jī)系統(tǒng)1100還包括耦合到總線1102的通信接口 1118。通信接口 1118提供到 與本地網(wǎng)絡(luò)1122相連接的網(wǎng)絡(luò)鏈路1120的雙向數(shù)據(jù)通信耦合。例如,通信接口 1118可以 是綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器,以提供與相應(yīng)類型電話線的數(shù)字通信連接。 又例如,通信接口 1118可以是局域網(wǎng)(LAN)卡,以提供與兼容LAN的數(shù)據(jù)通信連接。也可 以實現(xiàn)無線鏈路。在任何這種實現(xiàn)方式中,通信接口 1118發(fā)送并接收電的、電磁的或光信 號,這些信號攜帶了表示各種類型信息的數(shù)字?jǐn)?shù)據(jù)流。網(wǎng)絡(luò)鏈路1120通常通過一個或多個網(wǎng)絡(luò)提供到其他數(shù)據(jù)設(shè)備的數(shù)據(jù)通信。例如, 網(wǎng)絡(luò)鏈路1120可以通過本地網(wǎng)絡(luò)1122提供與主機(jī)計算機(jī)1124或由因特網(wǎng)服務(wù)供應(yīng)商 (ISP) 1126操作的數(shù)據(jù)設(shè)備的連接。ISP1126進(jìn)而通過全球分組數(shù)據(jù)通信網(wǎng)絡(luò)(現(xiàn)在通常 稱為“因特網(wǎng)” 1128)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)1122和因特網(wǎng)1128都使用攜帶數(shù)字?jǐn)?shù) 據(jù)流的電的、電磁的或光信號。經(jīng)過各種網(wǎng)絡(luò)的信號和在網(wǎng)絡(luò)鏈路1120上并經(jīng)過通信接口1118的信號(這些信號攜帶去往和來自計算機(jī)系統(tǒng)1100的數(shù)字?jǐn)?shù)據(jù))是傳輸信息的載波 的示例性形式。計算機(jī)系統(tǒng)1100可以通過(一個或多個)網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路1120和通信接口 1118 發(fā)送消息并接收數(shù)據(jù),其中包括程序代碼。在因特網(wǎng)示例中,服務(wù)器1130可以通過因特網(wǎng) 1128、ISP 1126、本地網(wǎng)絡(luò)1122和通信接口 1118發(fā)送針對應(yīng)用程序的請求代碼。接收到的代碼可以在接收時被處理器1104執(zhí)行,和/或被存儲在存儲設(shè)備1110 或其他非易失性存儲介質(zhì)中以供以后執(zhí)行。以這種方式,計算機(jī)系統(tǒng)1100可以獲得載波形 式的應(yīng)用代碼。6. 0.擴(kuò)展和替換在以上說明書中,已參考對于每種實現(xiàn)方式可能不同的許多具體細(xì)節(jié)描述了本發(fā) 明的實施例。因此,關(guān)于本發(fā)明是什么以及申請人希望本發(fā)明是什么的唯一和排他指示是 根據(jù)本申請授權(quán)的那套采取其授權(quán)時的特定形式的權(quán)利要求,包括任何后續(xù)的更正。這里 針對這種權(quán)利要求中包含的術(shù)語明確闡述的任何限定都應(yīng)當(dāng)決定這種術(shù)語在權(quán)利要求中 使用時的含義。因此,在權(quán)利要求中沒有明確記載的限定、要素、性質(zhì)、特征、優(yōu)點或?qū)傩远?不應(yīng)當(dāng)以任何方式限制這種權(quán)利要求的范圍。因此,說明書和附圖應(yīng)被認(rèn)為是說明性的而 不是限制性的。
3權(quán)利要求
一種用于為在多主機(jī)系統(tǒng)上運(yùn)行的應(yīng)用收集性能統(tǒng)計信息的由計算機(jī)實現(xiàn)的方法,包括以下步驟在測試框架處接收指定測試細(xì)節(jié)的輸入,其中所述測試細(xì)節(jié)包括測試計劃;基于所述輸入,所述測試框架在執(zhí)行主機(jī)上執(zhí)行所述測試計劃,其中執(zhí)行所述測試計劃包括在多個主機(jī)中的每一個上發(fā)起應(yīng)用的至少一部分的執(zhí)行;從所述多個主機(jī)中的每個主機(jī)接收指示出特定時間段的性能統(tǒng)計信息的性能數(shù)據(jù);基于所述性能數(shù)據(jù),所述測試框架生成測試結(jié)果,該測試結(jié)果包括針對多個性能度量的多個數(shù)據(jù)報告;以及所述測試框架向用戶呈現(xiàn)所述測試結(jié)果。
2.如權(quán)利要求1所述的方法,其中,所述多個主機(jī)中的第一主機(jī)在執(zhí)行第一操作系統(tǒng), 并且所述多個主機(jī)中的第二主機(jī)在執(zhí)行與所述第一操作系統(tǒng)不同的第二操作系統(tǒng)。
3.如權(quán)利要求1所述的方法,其中,所述測試細(xì)節(jié)還包括一個或多個屬性,并且其中執(zhí) 行所述測試計劃還包括利用所述一個或多個屬性中的至少一些屬性作為包括所述測試計 劃的執(zhí)行腳本的參數(shù)的值,來調(diào)用所述執(zhí)行腳本。
4.如權(quán)利要求1所述的方法,還包括以下步驟所述測試框架基于所述測試細(xì)節(jié)中定 義的執(zhí)行主機(jī)特性來確定所述執(zhí)行主機(jī)的身份。
5.如權(quán)利要求1所述的方法,還包括以下步驟所述測試框架基于所述測試細(xì)節(jié)中定 義的特性來確定所述多個主機(jī)的身份。
6.如權(quán)利要求1所述的方法,其中從所述多個主機(jī)中的每個主機(jī)接收指示出特定時間 段的性能統(tǒng)計信息的性能數(shù)據(jù)的步驟還包括所述多個主機(jī)中的至少一些主機(jī)將性能度量和事件的日志拷貝到共享的存儲位置; 所述測試框架從所述共享的存儲位置讀取所述日志。
7.如權(quán)利要求1所述的方法,其中接收性能數(shù)據(jù)、生成測試結(jié)果和呈現(xiàn)所述測試結(jié)果 的步驟是與執(zhí)行所述測試計劃的步驟并發(fā)執(zhí)行的。
8.如權(quán)利要求1所述的方法,還包括以下步驟在所述多個主機(jī)中的一主機(jī)處接收利用特定的性能監(jiān)視工具跟蹤一個或多個性能度 量的指令;在執(zhí)行所述測試計劃的同時,利用所述性能監(jiān)視工具跟蹤所述一個或多個性能度量;并且其中,所述指示出特定時間段的性能統(tǒng)計信息的性能數(shù)據(jù)包括所述一個或多個性能度量的值。
9.如權(quán)利要求1所述的方法,其中,接收性能數(shù)據(jù)的步驟包括以下步驟所述測試框架 向所述多個主機(jī)中的每個主機(jī)上的系統(tǒng)嵌入資源監(jiān)視器請求默認(rèn)的一組性能數(shù)據(jù)。
10.如權(quán)利要求1所述的方法,其中,所述特定時間段由開始時間和結(jié)束時間來定義, 其中所述開始時間對應(yīng)于所述執(zhí)行主機(jī)開始執(zhí)行所述測試計劃的時間,并且所述結(jié)束時間 對應(yīng)于所述執(zhí)行主機(jī)完成執(zhí)行所述測試計劃的時間。
11.如權(quán)利要求1所述的方法,其中,所述特定時間段由開始時間和結(jié)束時間來定義, 其中在所述執(zhí)行主機(jī)處執(zhí)行所述測試計劃包括執(zhí)行所述測試計劃中的一組初始化步驟;在執(zhí)行所述一組初始化步驟之后,執(zhí)行所述測試計劃的使得所述執(zhí)行主機(jī)創(chuàng)建指示出 所述開始時間的第一測試反饋的第一步驟;以及執(zhí)行所述測試計劃的使得所述執(zhí)行主機(jī)創(chuàng)建指示出所述結(jié)束時間的第二測試反饋的第二步驟。
12.如權(quán)利要求1所述的方法,其中,生成測試結(jié)果的步驟包括過濾所述性能數(shù)據(jù)以僅 包括來自第二時間段的性能數(shù)據(jù),其中所述第二時間段至少是基于在所述執(zhí)行主機(jī)處執(zhí)行 所述測試來確定的。
13.如權(quán)利要求1所述的方法,其中,生成測試結(jié)果的步驟包括對來自所述多個主機(jī)中 的每個主機(jī)的性能數(shù)據(jù)取平均以創(chuàng)建單個數(shù)據(jù)報告。
14.如權(quán)利要求1所述的方法,其中,生成測試結(jié)果的步驟包括將所述性能數(shù)據(jù)與第二 性能數(shù)據(jù)相比較,其中所述第二性能數(shù)據(jù)是(a)在在所述執(zhí)行主機(jī)上執(zhí)行所述測試計劃的 步驟之前生成的和(b)在所述執(zhí)行主機(jī)上執(zhí)行所述測試計劃的同時由所述多個主機(jī)生成 的。
15.如權(quán)利要求1所述的方法,其中,向用戶呈現(xiàn)所述測試結(jié)果的步驟包括對于所述測 試結(jié)果中的每個數(shù)據(jù)報告生成一個或多個視圖,所述一個或多個視圖至少包括示圖和文本日志ο
16.如權(quán)利要求1所述的方法,其中 所述性能數(shù)據(jù)包括循環(huán)式數(shù)據(jù)文件;所述測試結(jié)果包括基于所述循環(huán)式數(shù)據(jù)文件的數(shù)據(jù)報告;呈現(xiàn)所述測試結(jié)果的步驟包括確定為所述數(shù)據(jù)報告生成時間曲線圖,其中所述確定是 響應(yīng)于確定所述數(shù)據(jù)報告基于循環(huán)式數(shù)據(jù)而執(zhí)行的。
17.—種在包括多個系統(tǒng)的測試集群中執(zhí)行測試作業(yè)的由計算機(jī)實現(xiàn)的方法,包括在 測試框架處進(jìn)行的以下步驟(1)接收指定測試作業(yè)的測試細(xì)節(jié)的輸入,其中所述測試細(xì)節(jié)包括所述測試作業(yè)的測 試計戈丨J ;(2)確定所述測試集群中的能用于實現(xiàn)所述測試作業(yè)的所述測試計劃的一個或多個步 驟的一個或多個系統(tǒng);(3)判定所述一個或多個系統(tǒng)中的任何一個是否被預(yù)留用于任何其他測試作業(yè);(4)如果所述一個或多個系統(tǒng)都沒有被預(yù)留用于任何其他測試作業(yè),則根據(jù)所述測試 計劃執(zhí)行所述測試作業(yè);以及(5)如果所述一個或多個系統(tǒng)中的任一個被預(yù)留用于另一測試作業(yè),則等待一段時間, 然后重復(fù)步驟3-5。
18.如權(quán)利要求17所述的方法,其中,確定所述一個或多個系統(tǒng)包括參考所述測試細(xì) 節(jié)中包括的一組期望系統(tǒng)特性,該組期望系統(tǒng)特性包括以下特性中的至少一種處理器類 型、操作系統(tǒng)、盤存儲設(shè)備、系統(tǒng)存儲器和安裝的軟件。
19.如權(quán)利要求17所述的方法,其中,判定所述一個或多個系統(tǒng)中的任一個是否被預(yù) 留用于任何其他測試作業(yè)包括監(jiān)視在一個或多個系統(tǒng)中的每一個上執(zhí)行的一個或多個進(jìn) 禾呈。
20.如權(quán)利要求19所述的方法,還包括以下步驟 為所述測試集群中的每個系統(tǒng)維護(hù)預(yù)留信息;在根據(jù)所述測試計劃執(zhí)行所述測試作業(yè)后,更新所述預(yù)留信息以指示出所述一個或多 個系統(tǒng)被預(yù)留;以及在檢測到所述測試作業(yè)已完成所述測試計劃后,更新所述預(yù)留信息以指示出所述一個 或多個系統(tǒng)未被預(yù)留;其中,判定所述一個或多個系統(tǒng)中的任一個是否被預(yù)留用于任何其他測試作業(yè)的步驟 包括對于所述一個或多個系統(tǒng)中的每個特定系統(tǒng)判定所述預(yù)留信息是否指示出所述特定 系統(tǒng)被預(yù)留。
21.—種在包括多個系統(tǒng)的測試集群中執(zhí)行用于測試軟件性能的測試作業(yè)的由計算機(jī) 實現(xiàn)的方法,包括以下步驟在所述測試框架處,執(zhí)行以下步驟接收指定所述測試作業(yè)的測試細(xì)節(jié)的輸入,其中所述測試細(xì)節(jié)包括所述測試作業(yè)的測 試計戈丨J ;確定實現(xiàn)所述測試計劃所需的一個或多個資源;確定所述測試集群中的能作為實現(xiàn)所述測試作業(yè)的所述測試計劃的步驟的所述一個 或多個資源的一個或多個系統(tǒng);確定所述一個或多個系統(tǒng)中的特定系統(tǒng)不包括所述一個或多個資源中的至少一個; 使得所述一個或多個資源被安裝在所述特定系統(tǒng)上; 根據(jù)所述測試計劃執(zhí)行所述測試作業(yè)。
22.如權(quán)利要求21所述的方法,其中,所述一個或多個資源包括執(zhí)行腳本,該執(zhí)行腳本 包括表示所述測試計劃的代碼。
23.如權(quán)利要求21所述的方法,其中,所述一個或多個資源包括要被所述軟件處理的 測試數(shù)據(jù)。
24.如權(quán)利要求21所述的方法,其中,所述一個或多個資源包括配置信息。
25.如權(quán)利要求21所述的方法,其中,所述一個或多個資源包括所述軟件的組件。
26.如權(quán)利要求21所述的方法,其中,所述一個或多個資源包括運(yùn)行所述軟件的組件 所需的包。
27.一種計算機(jī)可讀存儲介質(zhì),存儲著一個或多個指令序列,這些指令序列在被一個或 多個處理器執(zhí)行時,使得這一個或多個處理器執(zhí)行如權(quán)利要求1-26中任何一個所述的方法。
全文摘要
利用測試框架,開發(fā)者可以創(chuàng)建測試模塊來在多個系統(tǒng)之間為軟件測試計劃集中資源和結(jié)果。利用來自測試框架的輔助,測試模塊可以協(xié)助實現(xiàn)測試用例的創(chuàng)建、針對每個測試用例的測試作業(yè)的執(zhí)行、每個測試作業(yè)期間性能統(tǒng)計信息的收集以及將收集的統(tǒng)計信息匯總成有組織的報告以便更容易分析。測試模塊可以跟蹤測試結(jié)果以便能夠容易地比較響應(yīng)于開發(fā)過程的歷史期間的各種條件和環(huán)境的性能度量。測試框架還可以調(diào)度測試作業(yè)以便在測試作業(yè)所需的各種系統(tǒng)和資源空閑時執(zhí)行。測試框架可以是獨立于操作系統(tǒng)的,從而單個測試作業(yè)可以同時在多種系統(tǒng)上測試軟件。
文檔編號G06F15/00GK101933001SQ200980103883
公開日2010年12月29日 申請日期2009年1月27日 優(yōu)先權(quán)日2008年1月31日
發(fā)明者丹尼爾·布里多, 喬治·吳, 塞潘·帕尼格拉, 斯蒂芬·納爾遜, 格里史·威澤斯萬 申請人:雅虎公司