專利名稱:并行測試執行的制作方法
技術領域:
本發明涉及進行并行測試執行的方法和系統。
背景技術:
軟件工具可允許開發者對所開發的代碼運行測試。該工具可允許開發者指定要運行的多個測試,并可順序地運行這些測試直到已運行了所有這些測試為止。不幸的是,順序地運行測試可花費很長的時間。在此要求保護的主題不限于解決任何缺點或僅在諸如上述環境中操作的各個實施例。相反,提供該背景僅用以示出在其中可實踐在此描述的部分實施例的一個示例性技術領域。
發明內容
簡言之,此處所描述的主題的各方面涉及測試執行。在各方面中,獲取被配置為要在主測試環境中執行的測試的集合。然后,與在主測試環境中執行這些測試中的一個或多個相并行地在輔助測試環境中執行這些測試中的一個或多個。在主測試環境中執行一測試之前,執行檢查以確定該測試是否已在輔助測試環境中被執行。如果該測試已經在輔助測試環境中被執行,則不在主測試環境中執行該測試,并且獲取各個結果,并將這些結果都結合到主測試環境中,從而使得該測試看上去好像是在主測試環境中執行的一樣。提供本發明內容是為了簡要地標識在以下詳細描述中進一步描述的主題的一些方面。本發明內容并不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在用于限制所要求保護的主題的范圍。除非上下文清楚地指出,否則短語“此處所描述的主題”指的是具體實施方式
中描述的主題。術語“方面”被當作“至少一個方面”。標識具體實施方式
中所描述的主題的各方面不旨在標識所要求保護的主題的關鍵特征或必要特征。上述各方面和此處所描述的主題的其它方面是借助于示例說明的,并且不受附圖限制,附圖中相同的標號指示相似的元素。
圖1是表示其中可結合此處所描述主題的各方面的示例性通用計算環境的框圖;圖2是根據此處所描述的主題的各方面的包括主測試環境和輔助測試環境的框圖;圖3是根據此處所描述的主題的各方面的可用來顯示輔助測試環境中的各測試的狀態的示例性用戶界面;圖4-5是根據此處所描述的主題的各方面的概括地表示可發生的示例性動作的流程圖。
具體實施例方式定義如此處所使用的,術語“包括”及其變體被當作開放式術語,表示“包括但不限于”。 除非上下文以其他方式清楚地指示出,否則術語“或”被當作“和/或”。術語“基于”被當作“至少部分地基于”。術語“一個實施例”和“一實施例”被當作“至少一個實施例”。術語 “另一實施例”被當作“至少一個其他實施例”。如此處所使用地,諸如“一”和“該”等術語包括了所指示的項或動作中的一個或多個。具體而言,在權利要求書中,對某一項的引用一般表示存在至少一個這樣的項,并且對一動作的引用表示執行該動作的至少一個實例。標題是僅出于方便起見的;關于給定話題的信息可在其標題指示該話題的節之外找到。其他顯式或隱式定義可包括在下文中。示例性操作環境圖1示出可在其上實現此處所描述的主題的各方面的合適的計算系統環境100的示例。計算系統環境100僅為合適的計算環境的一個示例,并非旨在對此處所描述的主題的各方面的使用范圍或功能提出任何限制。也不應該將計算環境100解釋為對示例性操作環境100中示出的任一組件或其組合有任何依賴性或要求。此處所描述的主題的各方面可與眾多其他通用或專用計算系統環境或配置一起操作。可適用于此處所述的主題的各方面的已知計算系統、環境或配置的示例包括個人計算機、服務器計算機、手持或膝上型設備、多處理器系統、基于微控制器的系統、機頂盒、可編程消費電子設備、網絡PC、微型計算機、大型計算機、個人數字助理(PDA)、游戲設備、打印機、包括機頂盒,媒體中心或其他家電的家電設備、嵌入汽車或附加到汽車的計算設備、 其他移動設備、包括任何上述系統或設備的分布式計算環境等等。此處所描述的主題的各方面可在由計算機執行的諸如程序模塊等計算機可執行指令的一般上下文中描述。一般而言,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、對象、組件、數據結構等等。此處所描述的主題的各方面也可以在其中任務由通過通信網絡鏈接的遠程處理設備執行的分布式計算環境中實現。在分布式計算環境中,程序模塊可以位于包括存儲器存儲設備在內的本地和遠程計算機存儲介質中。參考圖1,用于實現此處所描述的主題的各方面的示例性系統包括計算機110形式的通用計算設備。計算機可包括能夠執行指令的任何電子設備。計算機110的組件可包括處理單元120、系統存儲器130以及將包括系統存儲器的各種系統組件耦合至處理單元120的系統總線121。系統總線121可以是若干類型的總線結構中的任一種,包括使用各種總線體系結構中的任一種的存儲器總線或存儲器控制器、外圍總線、以及局部總線。作為示例,而非限制,這樣的體系結構包括工業標準體系結構(ISA)總線、微通道體系結構 (MCA)總線、增強型ISA(EISA)總線、視頻電子技術標準協會(VESA)局部總線、也稱為夾層 (Mezzanine)總線的外圍部件互連(PCI)總線、擴展外圍部件互連(PCI-X)總線、高級圖形端 口(AGP)、以及快速 PCI (PCIe)。計算機110通常包括各種計算機可讀介質。計算機可讀介質可以是能由計算機 110訪問的任何可用介質,并包含易失性和非易失性介質以及可移動、不可移動介質。作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質包括以用于存儲諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息的任何方法或技術來實現的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括RAM、ROM、EEPR0M、閃存或其它存儲器技術CD-ROM、數字多功能盤(DVD) 或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設備、或可以用來儲存所期望的信息并可由計算機110訪問的任一其它介質。通信介質通常以諸如載波或其他傳輸機制等已調制數據信號來體現計算機可讀指令、數據結構、程序模塊或其他數據,并包括任何信息傳送介質。術語“已調制數據信號” 是指具有以在信號中編碼信息的方式被設定或改變其一個或多個特征的信號。作為示例而非限制,通信介質包括諸如有線網絡或直接線連接之類的有線介質,以及諸如聲學、RF、紅外及其他無線介質之類的無線介質。上述的任意組合也應包含在計算機可讀介質的范圍內。系統存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132。基本輸入/輸出系統133 ¢10 包含諸如在啟動期間幫助在計算機110內的元件之間傳輸信息的基本例程,基本輸入/輸出系統 131 (BIOS)通常儲存儲在ROM 223中。RAM132通常包含處理單元120可立即訪問和/或目前正在操作的數據和/或程序模塊。作為示例而非限制,圖1示出了操作系統134、應用程序135、其它程序模塊136和程序數據137。計算機110也可以包括其他可移動/不可移動、易失性/非易失性計算機存儲介質。僅作為示例,圖1示出了從不可移動、非易失性磁介質中讀取或向其寫入的硬盤驅動器 141,從可移動、非易失性磁盤152中讀取或向其寫入的磁盤驅動器151,以及從諸如⑶ROM 或其它光學介質等可移動、非易失性光盤156中讀取或向其寫入的光盤驅動器155。可以在該示例性操作環境中使用的其他可移動/不可移動、易失性/非易失性計算機存儲介質包括磁帶盒、閃存卡、數字多功能盤、其他光盤、數字錄像帶、固態RAM、固態ROM等等。硬盤驅動器141通過接口 140可連接至系統總線121,且磁盤驅動器151和光盤驅動器155通過諸如接口 150之類的用于可移除非易失性存儲器的接口連接至系統總線121。以上描述并在圖1中示出的驅動器及其相關聯的計算機存儲介質為計算機110提供了對計算機可讀指令、數據結構、程序模塊和其它數據的存儲。例如,在圖1中,硬盤驅動器141被示為存儲操作系統144、應用程序145、其它程序模塊146和程序數據147。注意, 這些組件可以與操作系統134、應用程序135、其他程序模塊136和程序數據137相同,也可以與它們不同。操作系統144、應用程序145、其他程序模塊146和程序數據147在這里被標注了不同的附圖標記是為了說明至少它們是不同的副本。用戶可以通過輸入設備,如鍵盤162和定點設備161(通常被稱為鼠標、跟蹤球或觸摸板)向計算機110輸入命令和信息。其它輸入設備(未示出)可包括話筒、操縱桿、游戲手柄、圓盤式衛星天線、掃描儀、觸敏屏、或寫字板等。這些和其他輸入設備通常通過耦合至系統總線的用戶輸入接口 160連接至處理單元120,但也可以由其他接口和總線結構,例如并行端口、游戲端口或通用串行總線(USB)來連接。監視器191或其他類型的顯示設備也通過諸如視頻接口 190之類的接口連接至系統總線121。除監視器之外,計算機也可包括諸如揚聲器197和打印機196之類的其他外圍輸出設備,它們可以通過輸出外圍接口 195來連接。計算機110可以使用到一個或多個遠程計算機(如遠程計算機180)的邏輯連接, 以在聯網環境中操作。遠程計算機180可以是個人計算機、服務器、路由器、網絡PC、對等設備或其它常見網絡節點,且通常包括上文相對于計算機110描述的許多或所有元件,盡管在圖1中只示出存儲器存儲設備181。圖1中所示的邏輯連接包括局域網(LAN) 171和廣域網(WAN) 173,但也可以包括其它網絡。這樣的聯網環境常見于辦公室、企業范圍計算機網絡、內聯網和因特網中。當用于LAN網絡環境中時,計算機110通過網絡接口或適配器170連接到LAN 171。當在WAN聯網環境中使用時,計算機110可包括調制解調器172或用于通過諸如因特網等的WAN 173來建立通信的其它裝置。可為內置或可為外置的調制解調器172可以經由用戶輸入接口 160或其他合適的機制連接至系統總線121。在聯網環境中,相對于計算機 110所描述的程序模塊或其部分可被存儲在遠程存儲器存儲設備中。作為示例而非限制, 圖1示出了遠程應用程序185駐留在存儲器設備181上。應當理解,所示的網絡連接是示例性的,并且可使用在計算機之間建立通信鏈路的其他手段。測試軟件如之前所提到地,順序地運行各測試的軟件工具可花費較長的時間來執行。甚至并行地運行各測試的軟件工具也會受到約束。圖2是根據此處所描述的主題的各方面的包括主測試環境和輔助測試環境的框圖。圖2中示出的實體是示例性的,而并不意味著包括一切的可能需要或包括在實現中的組件。在其他實施例中,結合圖2來描述的各實體中的一個或多個可被包括在(示出或未示出)其他實體中或者被分割成其他實體,而不背離此處所描述的主題的各方面的精神或范圍。在一些實施例中,結合圖2來描述的各實體可分布在多個設備上。可使用一個或多個計算機(例如,圖1中的計算機110)以及與之相關聯的存儲器設備來實現這些實體中的一個或多個。可經由包括以下各項的各種網絡來到達(例如,通信地耦合至)各個實體辦公室內和辦公室間網絡、一個或多個局域網、廣域網、直接連接、 虛擬連接、專用網絡、虛擬專用網絡、以上網絡的某一組合等等。主測試環境205可包括有助于測試軟件代碼的一個或多個組件。這些組件可包括,例如,測試管理器210、測試結果檢測器211、測試提供者212、代碼提供者213、結果管理器214、輔助監視器215、其他組件(未示出)等等。在一個實施例中,主測試環境205可以是開發工具的一部分。可使用開發工具來開發和/或部署軟件。在一個示例性實施例中,開發工具可包括集成開發環境(IDE),該集成開發化境允許軟件開發者輸入和更新代碼、調試代碼、創建和更新數據庫、將代碼與一個或多個數據庫相關聯、編譯代碼、創建包、測試代碼、進行其他動作等等。輔助測試環境206可包括測試管理器220、測試節流器(throttler) 221、結果管理器222、通知管理器223、其他組件(未示出)等等。主測試環境205和輔助測試環境206可被實現在同一計算機上、兩個分開的計算機上、相同的計算機中的一個或多個上、兩個或多個不同的計算機上等等。在各種配置中, 主測試環境205可被實現在第一組的一個或多個計算機上,且輔助測試環境可被實現在第二組的一個或多個計算機上。該第一和第二組可以具有或不具有共有的一個或多個成員。
主測試環境205和輔助測試環境206中的一個或多個可以被實現在虛擬環境中。 虛擬環境是由計算機來模仿或模擬的環境。虛擬環境可模仿或模擬物理機器、操作系統、一個或多個接口的組、以上各項的部分、或以上各項的組合等等。在機器被模仿或被模擬時, 該機器有時被稱為虛擬機。對于在虛擬機上執行的軟件來說,虛擬機是一種看上去是物理機器的機器。該軟件可將文件保存在諸如虛擬硬盤驅動器、虛擬軟盤等之類的虛擬存儲設備中,可從虛擬⑶處讀取文件,可經由虛擬網絡適配器來進行通信等等。一個以上虛擬環境可被主存在單個計算機上。也就是說,兩個或更多虛擬環境可在單個物理計算機上執行。對于在每一虛擬環境中執行的軟件來說,該虛擬環境看上去具有其自己的資源(例如,硬件),即使主存在單個計算機上的各虛擬環境也可能在物理上彼此以及與主控操作系統一起共享一個或多個物理設備。在執行時,主測試環境205的代碼可實例化輔助測試環境206的一個或多個組件。 例如,主測試環境205的初始化代碼可實例化測試管理器220。組件210-215和220-223中的一個或多個可被實現成進程。在此使用的術語“進程”及其變體可包括一個或多個傳統的進程、線程、組件、庫、執行任務的對象等等。可以硬件、軟件、或硬件和軟件的組合來實現進程。在一實施例中,無論如何命名,進程是能夠執行或者用于執行動作的任何機制。進程可分布在多個設備上或可位于單個設備上。數據結構225-2 包括可在主測試環境205和輔助測試環境206之間傳遞的數據。可在消息中、經由存儲器中的數據、或經由文件系統中的文件等來傳遞數據結構 225-229。可將這些數據結構中的兩個或更多組合成單個數據結構。可將所示的單個數據結構劃分成多個數據結構。測試列表數據結構225可包括被配置為要在主測試環境205中執行的各測試的集合。測試代碼數據結構2 可包括與這些測試相對應的代碼。其他數據結構227-2 在以下更詳細地描述。測試管理器210可用于在主測試環境205中執行軟件測試。具體而言,測試管理器210可訪問要執行的各測試的列表。對于該列表中的每一測試,測試管理器210可執行該測試的代碼、存儲通過執行該代碼而生成的返回代碼、存儲通過執行該代碼而生成的日
志數據等等ο測試可包括或調用(由測試結果檢測器211來表示的)代碼,該代碼檢查以確定該測試正在還是已經在輔助測試環境206中執行。該代碼可檢查標志(例如,布爾值或其他值)以確定該測試是否已經執行。如果該測試已經執行,則在主測試環境205中對該測試進行任何更多的執行可被忽略。另外,可將來自該測試的結果結合到主測試環境205中, 就好像該測試實際上已經在主測試環境205中運行一樣。換言之,如果在輔助測試環境中執行測試時發生了異常,則這些異常可能會被拋出到主測試環境205中。如果該測試在輔助測試環境206中執行時提供了返回代碼,則這些返回代碼可被返回給測試管理器210。如果該測試將各條目寫入了日志文件,則這些條目也會被寫入主測試環境205的日志文件中。換言之,從測試管理器210的角度來說,測試管理器210可能不知道這些結果是從輔助測試環境206處獲取的。如果測試正在輔助測試環境206中執行,則測試結果檢測器211可采取以下各種動作,包括例如,等待該測試在輔助測試環境206中完成、或者允許該測試在主測試環境
8205中繼續執行并忽略通過在輔助測試環境206中執行該測試而生成的結果等等。如果測試尚未在輔助測試環境206中執行,則結果檢測器211可等待該測試在輔助測試環境206中執行并從中獲取結果、或者允許該測試在主測試環境205中執行并從中
獲取結果等等。測試提供者212可提供對計劃要在主測試環境205中執行的各測試的指示。該指示可例如采用測試的標識符的集合的形式。各標識符可包括例如各測試的名稱、或者指向各測試的代碼的指針等等。可經由輔助測試環境206可訪問的文件、或者存儲器中的數據結構等來傳遞該集合。一旦測試管理器220接收了該集合,該測試管理器220就可以開始彼此并行地以及與在主測試環境205中發生的任何測試或其他動作相并行地執行這些測試中的一個或多個。在此所使用的術語“并行”指在另一測試或動作的第一個指令之后以及最后一個指令之前執行的至少一個測試中的至少一個指令。在一些環境中,測試提供者212可具有允許訪問測試的集合的API。然而,在其他環境中,要獲取計劃被執行的各測試則更難。例如,一些測試環境并不展示允許訪問這些測試的集合的API。在一個這類環境中,可通過以下方式來獲取各測試注冊新的自定義測試類型、添加該新的自定義測試類型的單個測試、以及(例如,通過操控該測試的測試列表標識符來)使得該測試首先運行。在該測試運行時,可能具有對被配置為要被執行的各測試的列表的訪問。該測試可將這個列表寫入文件、或存儲器中的數據結構等中。稍后,可將該列表傳遞給輔助測試環境206中的測試管理器220。代碼提供者213可用于將各測試的代碼提供給輔助測試環境206。這可通過以下方式來實現在一消息中將該代碼發送給測試管理器220、或者將該代碼寫入可經由測試管理器220來訪問的文件中等。在一些實現中,可以從使用反映(reflection)或某一類似機制的組合件處提取該代碼。結果管理器214可用于從數據結構處獲取已被執行的測試的各結果。這個數據結構可以從主測試環境205和輔助測試環境206兩者處訪問。可將該數據結構包括在存儲器中、在諸如盤等非易失性存儲上、或易失性和非易失性存儲器的某一組合中。這些結果可包括返回代碼數據結構227所表示的數據結構、日志數據結構228、和通知數據結構229。結果管理器214可被測試結果檢測器211調用來獲取這些結果。結合(例如,從數據結構227-2 處)獲取各結果,結果管理器214還可使用之前描述的技術將這些結果結合到主測試環境205中。輔助監視器215可顯示諸如窗口等用戶界面,該用戶界面允許用戶在輔助測試環境中查看各測試的進程。輔助監視器可從通知數據結構2 處獲取通知。輔助監視器215 不是在每一事件發生時就將其布置在該窗口中,而是周期性地(例如,以可配置的間隔)將來自通知229的各事件批量張貼在該窗口中,從而避免淹沒該窗口的描繪機制。該窗口可提供以下狀態諸如,多少測試已經開始、多少測試已經完成、多少測試正在運行、多少測試已經傳遞、多少測試已經失敗等等,并且該窗口還能提供每一測試的狀態,諸如測試名稱、 最后請求的持續時間、當前請求、該測試已被傳遞還是已失敗等等。圖3是根據此處所描述的主題的各方面可用來顯示輔助測試環境中的各測試的狀態的示例性用戶界面。如所示出地,窗口 300包括總體狀態部分305以及測試狀態部分310。圖3的格式、間隔、狀態項和圖形旨在只是示例性的。基于此處的示教,本領域的技術人員將意識到可使用其他格式、間隔、狀態項和圖形來顯示輔助測試環境中的各測試的狀態,而不會偏離在此描述的主題的各方面的精神和范圍。返回至圖2,作為輔助測試環境206的一部分,測試管理器220可負責在輔助測試環境206中執行各測試。測試管理器220可從測試提供者212處獲取各測試的集合、從代碼提供者213處獲取各測試的代碼、以及在輔助測試環境206中開始執行各測試。測試管理器220可以在不同的進程中執行各測試,以增加并行性。測試管理器220可在執行測試之前咨詢測試節流器221。測試節流器221可基于一閾值來限制在任何給定時刻允許多少測試在輔助測試環境206中并行執行。該閾值可包括,例如,線程閾值、網絡閾值、處理器閾值、正在一個或多個線程中執行的測試的數目、某一其他閾值、以上各項中的一個或多個的組合等等。如果執行另一測試會超過閾值,則測試節流器221可以不允許該測試被執行,直到執行該測試不會超過該閾值為止。結果管理器222可用于填充包括在輔助測試環境206中執行各測試的結果的數據結構。數據結構可包括返回代碼數據結構227和日志數據結構228。結果管理器222可通過以下方式來填充該數據結構從已完成的各測試處獲取返回代碼以及從這些測試處獲取日志條目;以及,將返回代碼和日志條目分別放置在返回代碼數據結構227和日志數據結構228中。返回代碼可包括由測試拋出的各個異常以及由測試返回的各個值。通知管理器223可生成正在或將在輔助測試環境206中執行的各測試的狀態。具體來說,通知管理器223可生成以下事件諸如,測試已排隊等待、測試正執行、測試已完成、測試已成功、測試已失敗、其他事件等等。可將與這些事件相對應的數據放置在通知數據結構229中,以供輔助監視器215使用。圖4-5是根據此處所描述的主題的各方面的概括地表示可發生的示例性動作的流程圖。為解釋簡明起見,結合圖4-5來描述的方法被描繪和描述為一系列動作。可以理解和明白,此處所描述的主題的各方面不受所示出的各動作和/或各動作次序的限制。在一個實施例中,各動作以如下描述的次序發生。然而,在其它實施例中,各動作可以并行地發生、以另一次序發生、和/或與此處未呈現和描述的其它動作一起發生。此外,并非所有示出的動作都是實現根據此處所描述的主題的各方面的方法所必需的。另外,本領域的技術人員將了解和明白,該方法也可以替代地經由狀態圖而被表示為一系列相互相關聯的狀態或者被表示為事件。轉向圖4,在框405處,動作開始。在框410處,獲取被配置為要在測試環境中執行的各測試的測試標識符。例如,參考圖2,測試管理器220可從測試提供者212處獲取測試列表數據結構225。被配置為要在測試環境中執行意味著測試管理器210被配置為要執行各測試。這種配置可涉及(例如,經由用戶接口來)向測試管理器210指示各測試。在框415處,獲取各測試中的一個或多個測試的測試代碼。例如,參考圖2,測試管理器220可使用之前獲取的標識符來從代碼提供者213處獲取測試代碼數據結構226。測試代碼數據結構2 可包括與各測試相對應的代碼。在一個實施例中,測試管理器220可在執行測試的代碼的前一刻獲取該測試的代碼。在另一實施例中,測試管理器220可一次或者在獲取各標識符以后的某一時刻獲取所有測試的代碼。在又一實施例中,測試管理器220可獲取代碼以及標識符。換言之,代碼和標識符可一起從主測試環境205處得來。在又一實施例中,可獲取測試但不獲取標識符,并且可忽略框410的動作。獲取測試的測試代碼可涉及獲取該測試代碼的副本、或者使用指針來訪問該測試代碼等。在框420處,執行測試,并按需進行節流。例如,參考圖2,測試管理器220可選擇一測試,并與測試節流器221協商該測試是否可被執行。在另一實施例中,測試管理器220 可選擇一測試,并使該測試排隊等待執行。然后,測試控制器221可在執行該測試不會超過閾值時,允許該測試執行(例如,配置一線程來執行該測試)。在該意義上,可認為測試節流器221限制測試中的多少被允許在輔助測試環境206中并行執行。在一個實施例中,測試節流器221可限制被分配來(例如,可用于)執行測試的線程的數目。如果所分配的線程都正在執行測試,則可以不分配另一線程,直到在這些線程中的一個已完成執行測試為止。在另一實施例中,測試節流器221可限制正并行執行的測試的計數。如果測試的數目等于或超過閾值,則在正執行的測試的數目降到該閾值以下之前,可等待開始另一測
試ο在框425處,從一個或多個測試處獲取結果。測試的結果可在該測試執行時以及在該測試完成(成功、失敗、和/或拋出異常)時獲取。例如,參考圖2,結果管理器222可從在輔助測試環境206中執行的測試處獲取結果。在一個實施例中,可通過執行以下動作來獲取測試的結果,包括1.調用測試的初始化代碼(如果有的話);2.在嘗試/捕獲框中調用(例如,執行)測試,并獲取從嘗試/捕獲框處返回的任何代碼;以及3.調用測試的清除代碼(如果有的話)。還可通過捕捉由測試生成的日志數據來獲取這些結果。在框430處,可將這些結果放置在主測試環境的進程可訪問的數據結構中。該進程可使用這些結果來確定被指示的測試是否已經在輔助測試環境中被執行,并且如果是, 則還確定從中獲取了什么結果。可重復進行(以及并行地執行)與框415-430相關聯的動作,直到所有測試已經被執行為止。在一個實施例中,輔助測試環境中的測試管理器可檢查以查看測試當前是否正在主測試環境中執行。如果情況是這樣的,則輔助測試環境中的測試管理器可跳過在輔助測試環境中執行測試。在框435處,可以執行其他動作(如果有的話)。在框440處,可生成狀態事件。如之前所描述地,可生成狀態事件,使得輔助監視器能夠確定在輔助測試環境中將執行的、正在執行的、或者已經執行的測試的狀態。狀態事件可例如在測試排隊等待執行時、在測試開始執行時、在測試完成執行時等生成。框435中的各動作可結合在框410-435中指示出的各動作在各種時刻發生。轉向圖5,在框505處,動作開始。在框510處,將被配置為要在主測試環境中執行的各測試的集合發送至輔助測試環境。例如,參考圖2,測試提供者212可經由測試列表數據結構225來將測試的集合發送至測試管理器220。在框515處,可將測試代碼提供給輔助測試環境。例如,參考圖2,代碼提供者213
11可將這些測試中的一個或多個測試的測試代碼提供給測試管理器220。可響應于來自測試管理器220的請求而提供測試代碼,或者可將測試代碼放置在測試代碼數據結構226中以由測試管理器220按需使用,或者可以其他方式來遞送測試代碼而不偏離在此描述的主題的精神或范圍。在框520處,確定要在主測試環境中執行的測試。例如,參考圖2,測試管理器210 可選擇被配置為要在主測試環境205中執行的各測試的集合中的一測試。在框525處,確定該測試是否已經在輔助測試環境中執行。例如,參考圖2,測試結果檢測器211可以(例如,通過檢查標志來)確定該測試是否已經在輔助測試環境206中執行。在框530處,如果該測試已在輔助測試環境中執行,則動作在框540處繼續;否則, 動作在框535處繼續。在框535處,由于該測試尚未在輔助測試環境中執行,則可發生各種動作。例如, 如果該測試尚未在輔助測試環境中執行,則可發生等待該測試在輔助測試環境中執行。在該測試完成以后,可隨后獲取結果。例如,參考圖2,主測試環境205中的組件(例如,測試結果檢測器211、結果管理器215、或其他組件)可等待該測試在輔助測試環境206中被執行。作為另一示例,如果該測試尚未在輔助測試環境中執行,則在主測試環境中執行該測試。例如,參考圖2,在主測試環境205中執行該測試。在該示例中,可忽略通過在輔助測試環境中執行該測試而獲取的該測試的結果(如果存在任何這種結果的話)。在框540處,可從由輔助測試環境中的進程來填充的數據結構處獲取這些測試結果。例如,參考圖2,結果管理器215可從返回代碼數據結構227和日志數據結構2 處獲取這些結果,并可使用之前描述的技術來將這些結果結合到主測試環境205中。可多次重復進行與框520-540相關聯的動作,直到所有測試的結果已被獲取為止。在框545處,可以執行其他動作(如果有的話)。視器215可周期性地從通知數據結構2 處檢索事件,并將這些事件作為批量消息而張貼在窗口 300中。如從上述詳細描述中可以看到,已經描述了關于測試執行的各方面。盡管此處所描述的主題的各方面易于作出各種修改和替換構造,但其某些說明性實施例在附圖中示出并在上面被詳細地描述。然而,應當理解,并不旨在將所要求保護主題的各方面限制于所公開的具體形式,而是相反地,目的是要覆蓋落入此處所描述的主題的各方面的精神和范圍之內的所有修改、替換構造和等效方案。
權利要求
1.一種至少部分地由計算機實現的方法,所述方法包括獲取(410,41 被配置為要在測試環境中執行的測試,所述測試涉及軟件代碼; 與在所述測試環境中執行所述測試中的一個或多個測試相并行地執行(420)所述測試中的一個或多個測試;將執行所述一個或多個測試的結果放置(430)在所述測試環境的進程能訪問的數據結構中,以用來至少確定被指示的測試是否已經被執行。
2.如權利要求1所述的方法,其特征在于,還包括基于一閾值來限制在任何給定時刻允許所述一個或多個測試中的多少測試并行地執行。
3.如權利要求1所述的方法,其特征在于,還包括通過執行以下動作來獲取執行測試的結果,包括在存在所述測試的初始化代碼時,調用所述測試的初始化代碼;在嘗試/捕獲框中調用所述測試,并獲取從嘗試/捕獲框處返回的任何代碼;以及在存在所述測試的清除代碼時,調用所述測試的清除代碼。
4.如權利要求1所述的方法,其特征在于,還包括生成指示并行地執行所述一個或多個測試的狀態的事件,以及將所述事件放置在所述測試環境的進程能訪問的數據結構中。
5.如權利要求1所述的方法,其特征在于,還包括確定測試是否正在或已經在所述測試環境中執行,以及如果是,則制止在所述測試環境的外部執行所述測試。
6.一種具有計算機可執行指令的計算機存儲介質,所述計算機可執行指令在被執行時執行以下動作,包括向輔助測試環境發送(510,51 被配置為要在主測試環境中執行的測試的集合; 確定(520)要在所述主測試環境中執行的測試; 確定(52 所述測試是否已經在所述輔助測試環境中執行;以及在所述測試已經在所述輔助測試環境中執行時,從由所述輔助測試環境的進程來填充的數據結構處獲取640)所述測試的結果,所述進程用于基于通過在所述輔助測試環境中執行所述測試而返回的數據來填充所述數據結構。
7.如權利要求6所述的計算機存儲介質,其特征在于,還包括在所述測試尚未在所述輔助測試環境中執行時,等待所述測試在所述輔助測試環境中執行,以及隨后從所述數據結構處獲取所述結果。
8.如權利要求6所述的計算機存儲介質,其特征在于,還包括在所述測試尚未在所述輔助測試環境中執行時,在所述主測試環境中執行所述測試,并且在存在通過在所述輔助測試環境中執行所述測試而獲取的任何測試結果時,忽略所述結果。
9.如權利要求6所述的計算機存儲介質,其特征在于,還包括在所述測試已經在所述輔助測試環境中執行時,經由所述主測試環境的進程通過執行包括以下各項中的一個或多個的動作來返回所述結果在所述進程內拋出異常,所述異常與所述數據結構所指示的異常相對應; 向所述主測試環境的所述進程返回返回代碼,所述返回代碼與所述數據結構所指示的返回代碼相對應;以及經由所述進程將條目寫入所述主測試環境的日志文件中,所述條目與所述數據結構所指示的條目相對應。
10. 一種在計算環境中的系統,包括 主測試環境和輔助測試環境, 所述主測試環境包括第一測試管理器,它用于執行所述主測試環境中的測試,所述測試涉及軟件代碼;測試提供者,它用于向所述輔助測試環境提供所述測試的指示;代碼提供者,它用于向所述輔助測試環境提供對所述測試的代碼;測試結果檢測器,它用于確定被指示的測試是否已經在所述輔助測試環境中執行;以及結果管理器,它用于在所述被指示的測試已經在所述輔助測試環境中執行的情況下從數據結構處獲取所述被指示的測試的結果,所述數據結構能從所述主測試環境和所述輔助測試環境兩者處訪問;所述輔助測試環境包括第二測試管理器,它用于在所述輔助測試環境中,與在所述主測試環境中執行所述測試中的一個或多個測試相并行地執行所述測試中的一個或多個測試;以及結果管理器,它用于用通過在所述輔助測試環境中執行所述測試中的一個或多個測試而獲取的結果來填充所述數據結構。
全文摘要
本發明涉及并行測試執行。此處所描述的主題的各方面涉及測試執行。在各方面中,獲取被配置為要在主測試環境中執行的測試的集合。然后,在輔助測試環境中,與在主測試環境中執行這些測試中的一個或多個測試相并行地執行這些測試中的一個或多個測試。在主測試環境中執行一測試以前,執行檢查以確定該測試是否已經在輔助測試環境中執行。如果該測試已經在輔助測試環境中執行,則不在主測試環境中執行該測試,并且獲取結果并將這些結果合并到主測試環境中,從而使得看上去好像該測試是在主測試環境中執行的一樣。
文檔編號G06F11/36GK102419729SQ20111035466
公開日2012年4月18日 申請日期2011年10月25日 優先權日2010年10月26日
發明者C·J·W·庫什涅克, P·D·巴尼特 申請人:微軟公司