簡(jiǎn)介:在一個(gè)自動(dòng)化測(cè)試系統(tǒng)中按日程安排一項(xiàng)測(cè)試是實(shí)現(xiàn)在特定的日期和時(shí)間內(nèi)執(zhí)行任務(wù)的重要組成部分。它不但能夠幫助您更有效地使用測(cè)試資源,而且能夠幫助您監(jiān)視測(cè)試結(jié)果。本文介紹了關(guān)于這方面一些應(yīng)當(dāng)考慮的事項(xiàng),日程安排子系統(tǒng)的構(gòu)件的基本情況,它所包含的功能,以及怎樣使用 Java 語(yǔ)言開(kāi)發(fā)一個(gè)日程安排等等。
向自動(dòng)化測(cè)試添加日程安排的優(yōu)勢(shì)與挑戰(zhàn)
測(cè)試軟件、系統(tǒng)硬件,以及不同軟件平臺(tái)之間的防火墻都可以使用測(cè)試自動(dòng)化系統(tǒng)。您可以使用為執(zhí)行回歸測(cè)試設(shè)計(jì)的自動(dòng)化框架,以創(chuàng)建任務(wù),執(zhí)行它們,并根據(jù)不同的實(shí)驗(yàn)資源分析測(cè)試結(jié)果。這些框架適用于命令行界面以及圖形用戶界面。自動(dòng)化系統(tǒng)的一個(gè)重要組成部分是安排一項(xiàng)任務(wù)的過(guò)程。
本文可以讓您對(duì)自動(dòng)化系統(tǒng)的結(jié)構(gòu)有一個(gè)基本的了解,該系統(tǒng)與日程安排機(jī)理集成在一起,以支持您使用日程安排功能來(lái)設(shè)計(jì)和開(kāi)發(fā)一個(gè)自動(dòng)化框架。文中還向您提供了使用 Java 語(yǔ)言開(kāi)發(fā)一個(gè)自動(dòng)化框架的概述。
日程安排中測(cè)試自動(dòng)化的優(yōu)勢(shì)
您可以將日程安排看做自動(dòng)化系統(tǒng)的子系統(tǒng)。在自動(dòng)化框架中加入日程安排功能,使得您可以安排每日的,每周的,每月的任務(wù),如有需要可以重復(fù)安排。您還可以使用日程安排者來(lái)選擇實(shí)驗(yàn)資源來(lái)執(zhí)行測(cè)試回歸。這減少了人為干預(yù)的概率,并在未來(lái)指定的時(shí)間自動(dòng)執(zhí)行。日程安排者可以幫助您管理回歸測(cè)試的時(shí)間與資源,并有助于提高測(cè)試的性能,因此提高了成功率。
挑戰(zhàn)
● 收集關(guān)于執(zhí)行環(huán)境的信息
當(dāng)您需要資源來(lái)執(zhí)行任務(wù)時(shí),得到適當(dāng)狀態(tài)的實(shí)驗(yàn)室資源通常來(lái)說(shuō)是非常困難的。檢入是非常重要的。
● 團(tuán)隊(duì)的地理分布
使用自動(dòng)化系統(tǒng)的團(tuán)隊(duì)可能來(lái)自于不同的國(guó)家。他們的時(shí)區(qū)與系統(tǒng)的時(shí)區(qū)可能不同,自動(dòng)化服務(wù)器就是在系統(tǒng)上運(yùn)行的。每個(gè)日程的時(shí)間與日期必須與自動(dòng)化系統(tǒng)的時(shí)間保持同步化。
● 飛行時(shí)提供需要的信息
有時(shí),需要提供一些額外的信息,例如在執(zhí)行時(shí),構(gòu)建和沙箱層次。日程安排者應(yīng)該能夠處理執(zhí)行期間用戶執(zhí)行的更改。
● 與自動(dòng)化系統(tǒng)的其他構(gòu)件聯(lián)合工作
日程安排是自動(dòng)化系統(tǒng)的子系統(tǒng),這樣它就可以與自動(dòng)化系統(tǒng)的其余構(gòu)件集成了,以產(chǎn)生需要的結(jié)果。構(gòu)件之間交流或者協(xié)調(diào)不足在測(cè)試實(shí)驗(yàn)資源中產(chǎn)生嚴(yán)重的硬件問(wèn)題。
● 滿足每一個(gè)和所有團(tuán)隊(duì)的日程安排需求
每一個(gè)團(tuán)隊(duì)都有其自己的自動(dòng)化需求。有些團(tuán)隊(duì)可能需要執(zhí)行日常的任務(wù)。挑戰(zhàn)在于理解來(lái)自所有團(tuán)隊(duì)的需求,并開(kāi)發(fā)一種日程安排機(jī)理,來(lái)處理所有不同的需求。
自動(dòng)化系統(tǒng)的結(jié)構(gòu)
測(cè)試自動(dòng)化系統(tǒng)有兩個(gè)主要的構(gòu)件:
● 用戶界面
→ 圖形化用戶界面
→ 命令行界面
● 測(cè)試引擎
圖形用戶界面(GUI)提供了一種管理測(cè)試的簡(jiǎn)單方法。它有助于創(chuàng)建運(yùn)行不同實(shí)驗(yàn)資源的測(cè)試回歸,以測(cè)試安裝在其上的圖片。
命令行界面是執(zhí)行測(cè)試的另外一種方法。在這里,用戶必須要執(zhí)行一點(diǎn)更多的操作,以創(chuàng)建和管理其測(cè)試和測(cè)試回歸,因?yàn)闇y(cè)試與測(cè)試回歸的創(chuàng)建與管理需要頻繁的用戶交流。
測(cè)試引擎會(huì)接受來(lái)自 GUI 或者命令行界面,或者兩者的測(cè)試與測(cè)試回歸,并在實(shí)驗(yàn)資源上
自動(dòng)化系統(tǒng)的構(gòu)件如圖1 所示。它包含了用戶界面,測(cè)試引擎以及測(cè)試系統(tǒng)。接下來(lái)的章節(jié)描述了這些構(gòu)件的功能
圖 1. 一個(gè)自動(dòng)化系統(tǒng)的功能

用戶界面
這種界面可以是一種基于網(wǎng)絡(luò)的 GUI 或者命令行。您可以使用網(wǎng)絡(luò)技術(shù)來(lái)開(kāi)發(fā)一個(gè)基于網(wǎng)絡(luò)的界面。對(duì)于一個(gè)不使用瀏覽器的程序來(lái)說(shuō),一個(gè)命令行界面起的作用十分有限。作為測(cè)試自動(dòng)化系統(tǒng)的一部分,用戶界面發(fā)揮著重要的作用。這就是測(cè)試自動(dòng)化開(kāi)始的地方。不同的用戶界面伴隨著不同的特性。其中有些界面包含了以團(tuán)隊(duì)的格式維護(hù)用戶工作區(qū)域。下面就是用戶界面的主要任務(wù):
1、提供一個(gè)用戶友好性的界面
2、提供一種輕松的方式來(lái)創(chuàng)建測(cè)試和測(cè)試回歸
3、為測(cè)試提供測(cè)試執(zhí)行環(huán)境
4、顯示測(cè)試結(jié)果
5、分配管理的資源
測(cè)試引擎
測(cè)試引擎就是測(cè)試自動(dòng)化系統(tǒng)的核心,因?yàn)樗褂貌煌膶?shí)驗(yàn)資源來(lái)運(yùn)行測(cè)試。這種類型的軟件用于測(cè)試軟件,硬件,或者一個(gè)完整的系統(tǒng)。選擇一個(gè)合適的測(cè)試引擎非常重要。它取決于您想要實(shí)現(xiàn)自動(dòng)化的測(cè)試的類型。不同的測(cè)試引擎提供了不同的功能。例如,IBM? Rational? Build Forge? 以及開(kāi)放源 STAX 引擎提供了并發(fā)特性以及測(cè)試的序列性執(zhí)行。有時(shí),測(cè)試自動(dòng)化框架包含了測(cè)試引擎,它支持框架處理的自動(dòng)化。測(cè)試引擎主要有以下任務(wù):
1、對(duì)程序或者圖片執(zhí)行(運(yùn)行)測(cè)試或者測(cè)試回歸
2、重復(fù)測(cè)試
3、收集測(cè)試結(jié)果
4、分析測(cè)試結(jié)果
5、監(jiān)視執(zhí)行結(jié)果
6、向測(cè)試員發(fā)送關(guān)于失敗信息的電子郵件通知
自動(dòng)化進(jìn)程
多個(gè)平臺(tái)的微觀開(kāi)發(fā)需要收集來(lái)自開(kāi)發(fā)員的源代碼,并將代碼整合成一個(gè)單元。當(dāng)實(shí)驗(yàn)資源安裝該單元之后,它需要多種測(cè)試來(lái)確認(rèn)它的正確性。這種測(cè)試的自動(dòng)化降低了測(cè)試員執(zhí)行測(cè)試所需要的時(shí)間,這樣他們就可以將更多的注意力放在微觀開(kāi)發(fā)上了。
很明顯,自動(dòng)化需要減少手動(dòng)與測(cè)試相交流所需要的時(shí)間與工作量。通過(guò)運(yùn)行腳本或者運(yùn)行命令都可以執(zhí)行測(cè)試。您可以以任何語(yǔ)言來(lái)編寫腳本。測(cè)試引擎應(yīng)該能夠分析這些腳本訪問(wèn)并執(zhí)行測(cè)試。
框架的選擇,與測(cè)試引擎一起,都是自動(dòng)化進(jìn)程的重要部分。測(cè)試自動(dòng)化系統(tǒng)中可以使用多種框架,例如開(kāi)放源軟件測(cè)試自動(dòng)化框架(STAF),或者您可以創(chuàng)建自己的框架。
許多公司通過(guò)創(chuàng)建自己的自動(dòng)化框架和測(cè)試引擎,來(lái)處理自動(dòng)化。在您擁有自動(dòng)化系統(tǒng)的兩個(gè)構(gòu)件之后,您可以在自動(dòng)化進(jìn)程之中使用它們來(lái)執(zhí)行以下的任務(wù):
1、使用用戶界面來(lái)創(chuàng)建和管理測(cè)試以及測(cè)試回歸
2、提交測(cè)試以在程序或者圖片上運(yùn)行
3、對(duì)程序或者圖片(測(cè)試引擎)執(zhí)行測(cè)試
4、通知測(cè)試員需要注意的事項(xiàng)
5、生成和分析測(cè)試結(jié)果(測(cè)試引擎)
6、如果測(cè)試失敗的話向測(cè)試員發(fā)送電子郵件
日程安排的自動(dòng)化系統(tǒng)
帶有日程安排功能的自動(dòng)化系統(tǒng)如圖2 所示。
圖 2. 日程安排者的自動(dòng)化系統(tǒng)

它包含了一個(gè)或者多個(gè)名為安排者的構(gòu)件。安排者的作用在于識(shí)別您想要執(zhí)行任務(wù)的類型。如果它的類型是安排類型的,那么安排者將會(huì)指導(dǎo)引擎安排任務(wù);或者,他會(huì)讓測(cè)試引擎直接執(zhí)行測(cè)試。您可以通過(guò)用戶界面來(lái)安排執(zhí)行。
構(gòu)建在日程安排功能之上的自動(dòng)化框架
自動(dòng)化框架,它包含了日程安排特性,可能需要在一個(gè)系統(tǒng)上運(yùn)行自動(dòng)化服務(wù)器。來(lái)自不同團(tuán)隊(duì)的用戶可能位于不同的地理區(qū)域,這使得日程安排的時(shí)間也有差異。日程安排者應(yīng)該能夠識(shí)別時(shí)區(qū)差異,并根據(jù)用戶的請(qǐng)求來(lái)安排任務(wù)。
自動(dòng)化框架可以幫助您基于 圖3中給出的選項(xiàng)來(lái)創(chuàng)建日程安排。如果有需要,您還可以指定安排的日期和時(shí)間,并重復(fù)日程安排。圖3 中描述的安排表安排了日常的任務(wù),并計(jì)劃到三天之后。它還顯示了運(yùn)行測(cè)試的日期。用戶界面還提供了安排準(zhǔn)備期間選擇測(cè)試系統(tǒng)和任務(wù)的選項(xiàng)(屏幕截圖中沒(méi)有顯示出來(lái))。
圖 3. 帶有日程安排者 UI 的自動(dòng)化框架

使用 Java 技術(shù)實(shí)施日程安排特性
Java 提供了計(jì)時(shí)器框架,使得程序員能夠更輕松地執(zhí)行日程安排。它包含了一個(gè) java.util.Timer 以及 java.util.TimerTask 類。Timer 與 TimerTask 協(xié)同工作以提供日程安排功能。您可以使用計(jì)時(shí)器來(lái)安排一項(xiàng)任務(wù)。任務(wù)可以是 TimerTask 的一個(gè)實(shí)例。在創(chuàng)建一個(gè)任務(wù)之后,您可以使用 Timer 實(shí)例來(lái)安排它。計(jì)時(shí)器使用以下的方法來(lái)幫助日程安排:
● 空白日程(TimerTask TTask,等待較長(zhǎng)的時(shí)間)
● 空白日程(TimerTask TTask,等待較長(zhǎng)的時(shí)間,長(zhǎng)時(shí)間的重復(fù))
● 空白日程(TimerTask TTask,Date targetTime)
● 空白日程(TimerTask TTask,Date targetTime,長(zhǎng)時(shí)間重復(fù))
● 測(cè)試引擎生成了測(cè)試結(jié)果并分析它
● 空白的 scheduleAtFixedRate(TimerTask TTask,長(zhǎng)時(shí)間的重復(fù),長(zhǎng)時(shí)間的重復(fù))
● 空白 scheduleAtFixedRate(TimerTask TTask,Date targetTime,長(zhǎng)時(shí)間的重復(fù))
這種方法清晰地告訴了您怎樣去計(jì)劃一項(xiàng)任務(wù)。為了提供更大的靈活性,您可以使用觀察者模式來(lái)提供一系列的日程安排機(jī)理。使用這種方法,可以提供一種內(nèi)線程的交流方式,通過(guò)通知您新安排的產(chǎn)生來(lái)通知日程安排者。這種方法基于 Java 技術(shù)。您可以實(shí)施日程安排機(jī)理,它最適合于自動(dòng)化的框架。
圖 4 描述了日程安排構(gòu)件之間的交流。一旦有人添加了一條安排,那么安排者會(huì)自動(dòng)通知執(zhí)行者或者測(cè)試啟動(dòng)者構(gòu)件以執(zhí)行測(cè)試。一旦給出了日程安排,它就必須從安排列表中刪除,并讓下一個(gè)安排的測(cè)試在指定的時(shí)間運(yùn)行。
圖 4. 日程安排構(gòu)件之間的交流

創(chuàng)建和刪除一條任務(wù)
注意:
您可以使用 Java 中的 Timer 類,用以下的方法取消或者甚至刪除安排的任務(wù):
● void cancel() // cancel the timer thread
● int purge () // delete the cancelled task from timers queue
擁有日程安排功能的自動(dòng)化系統(tǒng)的框架
接下來(lái)的框架描述就是一種解決方案,您可以使用它來(lái)理解自動(dòng)化框架的操作。正如前面所描述的那樣,自動(dòng)化系統(tǒng)包括用戶界面,測(cè)試引擎,測(cè)試的系統(tǒng)。自動(dòng)化框架包含了以下的基本構(gòu)件:
● 用戶界面,它可以是基于網(wǎng)絡(luò)的
● 存儲(chǔ)您想要執(zhí)行任務(wù)的數(shù)據(jù)庫(kù)
● 一個(gè)持續(xù)性檢查執(zhí)行任務(wù)數(shù)據(jù)庫(kù)的進(jìn)程
● 從以上進(jìn)程中獲取任務(wù)的安排者
● 執(zhí)行日程安排者提供任務(wù)的測(cè)試引擎
圖 5 描述了自動(dòng)化系統(tǒng)構(gòu)件之間的完整交流:
用戶添加執(zhí)行的任務(wù),以及安排的日期與時(shí)間,和測(cè)試的系統(tǒng)。
該信息存儲(chǔ)在數(shù)據(jù)庫(kù)之中。
daemon 會(huì)不斷運(yùn)行進(jìn)程,以從數(shù)據(jù)庫(kù)中獲得任務(wù),將其交給日程安排者,然后添加包含系統(tǒng)健康狀況測(cè)試的信息。
然后日程安排者會(huì)將任務(wù)交給測(cè)試執(zhí)行引擎,與測(cè)試系統(tǒng)相交流。
圖 5. 自動(dòng)化系統(tǒng)構(gòu)件之間的完整交流

網(wǎng)絡(luò)框架的其他責(zé)任在于得到測(cè)試的結(jié)果并分析它。日程安排者幫助您管理自動(dòng)化系統(tǒng)的以下方面:
● 測(cè)試回歸,它包含了您對(duì)測(cè)試系統(tǒng)想要執(zhí)行的任務(wù)
● 測(cè)試系統(tǒng)
● 如有需要的話,執(zhí)行測(cè)試回歸和重復(fù)的日期與時(shí)間
性能評(píng)價(jià)
自動(dòng)化不但能夠幫助您更有效地管理花在重復(fù)性測(cè)試上的時(shí)間,而且能夠幫助您分析測(cè)試的結(jié)果。它能讓您將更多的注意力放在微觀開(kāi)發(fā)上,而不是把大把的時(shí)間花在測(cè)試上。一旦開(kāi)發(fā)員進(jìn)行微觀開(kāi)發(fā),那么通過(guò)管理和安排回歸測(cè)試,執(zhí)行構(gòu)建的全部測(cè)試操作,只不過(guò)是一次點(diǎn)擊的操作而已。因此,它降低了手動(dòng)測(cè)試期間人為交流和干預(yù)的頻率。
日程安排功能,在另一方面上,降低了重復(fù)測(cè)試期間的出錯(cuò)率。圖 6 中的圖顯示了測(cè)試系統(tǒng)最新構(gòu)建全部測(cè)試的性能改進(jìn)。條形圖顯示了每日,每周,每月進(jìn)行的測(cè)試,測(cè)試自動(dòng)化框架的日程安排功能能夠幫助您實(shí)現(xiàn)全部這些功能。
圖 6. 性能評(píng)價(jià)條形圖

為了進(jìn)一步深入研究 Rational 軟件為測(cè)試和自動(dòng)化提供的功能,您可以查看其他相關(guān)資料。