本發(fā)明涉及計算機自動化測試技術(shù)領(lǐng)域,具體地說是一種分布式調(diào)度自動化測試平臺及方法。
背景技術(shù):
隨著自動化測試應(yīng)用的推廣,自動化測試用例數(shù)越來越多,運行頻率越來越頻繁。加之軟件交付的進程逐漸加快,敏捷開發(fā)模式、持續(xù)集成被更多應(yīng)用,這就要求自動化測試能夠達到每日構(gòu)建的要求:測試覆蓋度高、無人值守、每日執(zhí)行、第二天上班前出具測試報告。
以運行一次包含6000個場景的自動化測試任務(wù)為例,1個場景約用時3分鐘。以傳統(tǒng)的自動化技術(shù),1臺機器約用時18000分鐘(約12.5天);若使用多臺機器,采取提前分配場景的方式,沒有異常下可能按時完成,但若出現(xiàn)網(wǎng)絡(luò)、機器性能等各方面的影響,就無法保證第2天上班前完成任務(wù)的要求,那么就需要通過人工二次分配來加快進度,這無疑增加了人工工作量,也無法保證敏捷測試的效率。
分布式調(diào)度來實現(xiàn)自動化是解決該問題的辦法,當(dāng)前業(yè)界也有該技術(shù)的實現(xiàn),有使用Socket通信來實現(xiàn)任務(wù)分發(fā)機器和測試機器間的通信,主要存在以下幾個問題:
(1)使用C/S架構(gòu),只能在本機提交測試任務(wù),無法作為一個Web產(chǎn)品對外提供服務(wù);
(2)Socket可能會出現(xiàn)丟消息的情況,運行的穩(wěn)定性受到影響,在快速交付的要求下,按時完成任務(wù)存在風(fēng)險;
(3)測試機器無法集中管理,機器資源不能充分利用;
(4)運行進度無法實時獲取、調(diào)控。
基于此,現(xiàn)提供一種分布式調(diào)度自動化測試平臺及方法,對上述問題進行了解決和改進。
技術(shù)實現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是針對以上不足之處,提供一種分布式調(diào)度自動化測試平臺及方法。
一種分布式調(diào)度自動化測試平臺,該測試平臺基于B/S架構(gòu)或CS架構(gòu),使用消息隊列實現(xiàn)分布式調(diào)度,其結(jié)構(gòu)包括,
分布式調(diào)度服務(wù)器,進行任務(wù)分發(fā);
分布式調(diào)度客戶端,通過分布式調(diào)度服務(wù)器調(diào)度,自動進行測試過程;
Web客戶端,用于實現(xiàn)人機交互,提供用戶提交任務(wù)、管理任務(wù)的界面。
所述分布式調(diào)度服務(wù)器使用消息隊列進行任務(wù)分發(fā),當(dāng)接收方出現(xiàn)異常,收不到消息時,消息會一直暫存在發(fā)送方,當(dāng)接收方再次啟動時,再進行分發(fā),同時該分布式調(diào)度服務(wù)器還用于:
1)任務(wù)發(fā)布,首先發(fā)送任務(wù)ID給運行機器,運行機器獲取分配給自己的場景并運行;
2)形成運行機器資源池,獲取機器的狀態(tài)和待運行的任務(wù),將指定數(shù)量的任務(wù)分發(fā)到空閑的運行機器上,同時更新測試場景和運行機器的狀態(tài);
3)實現(xiàn)運行機器與分布式調(diào)度服務(wù)器的批量連接,通過IPC技術(shù)實現(xiàn)跨機器連接,給運行機器創(chuàng)建計劃任務(wù),定時啟動分布式調(diào)度客戶端,實現(xiàn)與分布式調(diào)度服務(wù)器的連接。
在步驟1)中,運行機器通過數(shù)據(jù)庫獲取分配給自己的場景,該數(shù)據(jù)庫包括主表和從表,主表中記錄測試任務(wù)的主要信息,包含以下字段:任務(wù)ID,機器的唯一標(biāo)識;任務(wù)名稱,機器名;測試地址,基于CS架構(gòu)時該地址是被測服務(wù)器的IP,若是BS架構(gòu)地址是被測URL;任務(wù)狀態(tài),包括制單、提交任務(wù)、運行中、結(jié)束、暫停、停止;申請人;申請時間;計劃機器數(shù)量;計劃啟動時間;預(yù)計結(jié)束時間;實際使用機器;實際機器數(shù)量;實際開始時間和實際結(jié)束時間;
從表中包含運行場景ID,運行場景的唯一標(biāo)識;任務(wù)ID,場景所屬的任務(wù);場景ID,存儲的場景ID;運行機器;運行結(jié)果;開始時間和結(jié)束時間;
在步驟2)中,分別通過機器管理數(shù)據(jù)表和測試任務(wù)數(shù)據(jù)表獲取機器的狀態(tài)和待運行的任務(wù),其中機器管理數(shù)據(jù)表包括以下字段:機器ID,機器的唯一標(biāo)識;機器名;狀態(tài),機器的運行狀態(tài),包括運行中、空閑、不可用;運行任務(wù),當(dāng)前運行的任務(wù),當(dāng)空閑時,則沒有任務(wù);任務(wù)安排,記錄在運行、待運行的任務(wù)數(shù)組,即計劃開始、結(jié)束時間、任務(wù)ID;
測試任務(wù)數(shù)據(jù)表即為數(shù)據(jù)庫的主表部分。
所述從表中的場景ID存儲在自動化場景數(shù)據(jù)表中,該自動化場景數(shù)據(jù)表中還存儲以下字段:用例ID,測試用例的唯一標(biāo)識;關(guān)鍵應(yīng)用,用例所述的關(guān)鍵應(yīng)用;模塊名稱,用例所述的模塊名稱;自動化場景名稱;自動化步驟名稱;腳本相對路徑;依賴項,用例依賴的用例的ID;預(yù)計用時。
所述分布式調(diào)度客戶端包括運行機器和Web服務(wù)器,其中運行機器受分布式服務(wù)器調(diào)度,負責(zé)測試運行;Web服務(wù)器作為應(yīng)用服務(wù)器,接收分布式調(diào)度服務(wù)器分發(fā)任務(wù),進行任務(wù)的過程監(jiān)控,同時作為分布式調(diào)度客戶端與分布式調(diào)度服務(wù)器連接。
一種分布式調(diào)度自動化測試方法,基于上述分布式調(diào)度自動化測試平臺,其實現(xiàn)過程為:
用戶提交測試任務(wù),確定測試使用哪些用例,使用幾臺機器,指定啟動時間;
分布式調(diào)度自動化測試平臺定時啟動測試任務(wù),自動生成該任務(wù)的運行場景,自動選擇空閑機器,分布式調(diào)度機器,完成測試;
最后自動給用戶發(fā)送測試啟動通知、測試報告郵件。
在分布式調(diào)度自動化測試平臺定時啟動測試任務(wù)時,根據(jù)自動化場景數(shù)據(jù)表生成該任務(wù)的運行場景;并查看前一個任務(wù)的計劃啟動時間至預(yù)計結(jié)束時間這個時間段內(nèi),通過機器管理數(shù)據(jù)表的任務(wù)安排,查看哪些機器是沒有任務(wù)安排的,則安排該任務(wù)到該機器上。
當(dāng)用戶指定計劃啟動時間后,分布式調(diào)度自動化測試平臺采用輪詢的方式,每隔一段時間檢查是否有到計劃啟動時間的任務(wù),有則將該任務(wù),提交給分布式調(diào)度服務(wù)器,進行任務(wù)分發(fā);當(dāng)任務(wù)分發(fā)完成后,分布式調(diào)度服務(wù)器檢查當(dāng)前任務(wù)的運行場景列表中,是否還有未運行的場景,如果有則繼續(xù)分發(fā),如果沒有則發(fā)送郵件給測試申請人。
運行機器接收到分發(fā)的指令后,到測試任務(wù)數(shù)據(jù)表中獲取分配的場景,使用中斷處理機制調(diào)度運行,具體為:
從數(shù)據(jù)庫中查詢,分配給自己的測試場景,根據(jù)自動化場景數(shù)據(jù)表里的獲取腳本存放的路徑,調(diào)度運行,同時在運行過程中,回寫數(shù)據(jù)庫運行結(jié)果;
使用中斷處理運行機制:先判斷依賴項是否成功,如果成功則運行,如果失敗則阻塞;進行異常處理,當(dāng)其中一個場景中斷后,記錄當(dāng)時的錯誤截屏和日志信息;同時判斷當(dāng)前狀態(tài)是否滿足下一場景運行的條件,如果滿足,繼續(xù)運行,如果不滿足,重新準(zhǔn)備被測環(huán)境,運行下一個場景;
測試結(jié)果的智能分析:腳本運行失敗時,自動截圖、通過日志記錄失敗的詳細信息,并進行測試結(jié)果的智能分析,通過包括控件類型、控件標(biāo)題的特點進行判斷,將失敗原因自動確定。
所述失敗原因歸為以下三類:
因程序錯誤導(dǎo)致的中斷,該類失敗歸為“程序錯誤”;
因網(wǎng)絡(luò)原因?qū)е碌牟痪邆淠_本運行的前提條件,該類失敗歸為“阻塞”;
因腳本沒有及時更新,導(dǎo)致腳本與程序沒有同步而導(dǎo)致的失敗,該類失敗歸為“腳本問題”;
分布式調(diào)度自動化測試平臺通過包括控件類型、控件標(biāo)題的特點進行判斷,當(dāng)符合某一類特征時,自動歸類為“程序錯誤”或者“阻塞”,其他問題歸為“腳本問題”。
本發(fā)明的一種分布式調(diào)度自動化測試平臺及方法和現(xiàn)有技術(shù)相比,具有以下有益效果:
本發(fā)明的一種分布式調(diào)度自動化測試平臺及方法,實現(xiàn)機器的集中利用:未使用該技術(shù)時,團隊的機器都分散在各個小組里,機器的利用率不高;使用該技術(shù)后,將機器集中起來,統(tǒng)一進行狀態(tài)管理,實現(xiàn)的資源的充分利用;提高測試效率,高效支撐了每日構(gòu)建自動化測試:未使用該技術(shù)時,每日進行自動化走查,運行一次包含6000個場景的自動化測試任務(wù)為例,1個場景約用時3分鐘,以傳統(tǒng)的自動化技術(shù),1臺機器約用時18000分鐘(約12.5天);即便使用多臺機器,人工分配場景,一旦出現(xiàn)個別機器無法在第二天上午運行完的情況,就需要通過人工二次分配來加快進度,給自動化測試人員帶來極大的壓力,自動化程度不高,且無法保證敏捷測試的效率,使用該技術(shù)后,由于消息隊列的穩(wěn)定性表現(xiàn),保證機器一直在正常運行,并且通過任務(wù)的分發(fā),讓各機器能夠基本同步完成任務(wù),從而實現(xiàn)測試任務(wù)在最短的時間內(nèi)完成,高效支撐了每日構(gòu)建自動化測試,實用性強,適用范圍廣泛,具有很好的推廣應(yīng)用價值。
附圖說明
附圖1為本發(fā)明的測試平臺實現(xiàn)結(jié)構(gòu)圖。
具體實施方式
下面結(jié)合附圖及具體實施例對本發(fā)明作進一步說明。
該發(fā)明使用消息隊列實現(xiàn)分布式調(diào)度,使用B/S架構(gòu),實現(xiàn)用戶只需提交測試任務(wù),指定啟動時間即可,無需關(guān)注運行過程,服務(wù)器會定時啟動測試任務(wù),自動選擇空閑機器,分布式調(diào)度機器,完成測試。系統(tǒng)會自動給用戶發(fā)送測試啟動通知、測試報告郵件,用戶也可以在運行過程中實時了解運行進度。
本發(fā)明使用分布式調(diào)度,平衡調(diào)度測試機器,提高了規(guī)模較大的自動化測試任務(wù)的運行效率,高效的支撐了每日構(gòu)建自動化測試;解決在敏捷開發(fā)的每日構(gòu)建自動化測試中,如何保證夜間定時啟動、無人值守、第二天保證完成、并發(fā)布報告的問題。
如附圖1所示,一種分布式調(diào)度自動化測試平臺,該測試平臺基于B/S架構(gòu)或CS架構(gòu),使用消息隊列實現(xiàn)分布式調(diào)度,其結(jié)構(gòu)包括,
分布式調(diào)度服務(wù)器,DistributedServer,進行任務(wù)分發(fā);
分布式調(diào)度客戶端,通過分布式調(diào)度服務(wù)器調(diào)度,自動進行測試過程;
Web客戶端,用于實現(xiàn)人機交互,提供用戶提交任務(wù)、管理任務(wù)的界面。
所述分布式調(diào)度服務(wù)器使用消息隊列進行任務(wù)分發(fā),當(dāng)接收方出現(xiàn)異常,收不到消息時,消息會一直暫存在發(fā)送方,當(dāng)接收方再次啟動時,再進行分發(fā),同時該分布式調(diào)度服務(wù)器還用于:
使用消息隊列進行任務(wù)分發(fā),當(dāng)接收方出現(xiàn)異常,收不到消息時,消息會一直暫存在發(fā)送方,當(dāng)接收方再次啟動時,再進行分發(fā),消息不會丟失,比Socket更為穩(wěn)定。
任務(wù)發(fā)布,不直接向TestMachine發(fā)送測試用例,僅發(fā)送任務(wù)ID,TestMachine從數(shù)據(jù)庫中取出分配給自己的場景運行,從而降低了網(wǎng)絡(luò)通信的負載,提高性能;
形成Test Machine資源池,通過【機器管理】數(shù)據(jù)表獲取機器的狀態(tài),通過【測試任務(wù)】數(shù)據(jù)表獲取待運行的任務(wù),將指定數(shù)量的任務(wù)分發(fā)到空閑的Test Machine上,同時更新測試場景和TestMachine的狀態(tài)。
實現(xiàn)Test Machine與Distributed Server的批量連接。由于Test Machine數(shù)量眾多,實現(xiàn)與Distributed Server的批量連接工作量也是巨大的。本技術(shù)方案通過IPC實現(xiàn)跨機器連接,給Test Machine創(chuàng)建計劃任務(wù),定時啟動分布式調(diào)度客戶端程序,實現(xiàn)與Distributed Server的連接。
在步驟1)中,運行機器通過數(shù)據(jù)庫獲取分配給自己的場景,該數(shù)據(jù)庫包括主表和從表,具體如下所示:
數(shù)據(jù)庫設(shè)計主要字段:
在步驟2)中,分別通過機器管理數(shù)據(jù)表和測試任務(wù)數(shù)據(jù)表獲取機器的狀態(tài)和待運行的任務(wù),其中機器管理數(shù)據(jù)表實現(xiàn)將所有的機器集中管理,實現(xiàn)機器的任務(wù)分配、狀態(tài)管理。
具體包括下表所示字段:
測試任務(wù)數(shù)據(jù)表即為數(shù)據(jù)庫的主表部分。
所述從表中的場景ID存儲在自動化場景數(shù)據(jù)表中,該自動化場景數(shù)據(jù)表將自動化測試場景保存在數(shù)據(jù)庫中,是自動化調(diào)度的基礎(chǔ),具體包括以下主要字段:
所述分布式調(diào)度客戶端包括運行機器TestMachine集群和Web服務(wù)器WebServer,其中,TestMachine集群:作為分布式調(diào)度客戶端,受分布式服務(wù)器調(diào)度,負責(zé)測試運行;
Web服務(wù)器:作為自動化測試平臺的應(yīng)用服務(wù)器,接收任務(wù),提交DistributedServer;進行任務(wù)的過程監(jiān)控;同時作為分布式調(diào)度客戶端去與DistributedServer連接。
一種分布式調(diào)度自動化測試方法,基于上述分布式調(diào)度自動化測試平臺,其實現(xiàn)過程為:
用戶提交測試任務(wù),確定測試使用哪些用例,使用幾臺機器,指定啟動時間;
分布式調(diào)度自動化測試平臺定時啟動測試任務(wù),自動生成該任務(wù)的運行場景,自動選擇空閑機器,分布式調(diào)度機器,完成測試;
最后自動給用戶發(fā)送測試啟動通知、測試報告郵件。
在分布式調(diào)度自動化測試平臺定時啟動測試任務(wù)時,根據(jù)自動化場景數(shù)據(jù)表生成該任務(wù)的運行場景;并查看前一個任務(wù)的計劃啟動時間至預(yù)計結(jié)束時間這個時間段內(nèi),通過機器管理數(shù)據(jù)表的任務(wù)安排,查看哪些機器是沒有任務(wù)安排的,則安排該任務(wù)到該機器上。
當(dāng)用戶指定計劃啟動時間后,分布式調(diào)度自動化測試平臺采用輪詢的方式,每隔一段時間檢查是否有到計劃啟動時間的任務(wù),有則將該任務(wù),提交給分布式調(diào)度服務(wù)器,進行任務(wù)分發(fā);當(dāng)任務(wù)分發(fā)完成后,分布式調(diào)度服務(wù)器檢查當(dāng)前任務(wù)的運行場景列表中,是否還有未運行的場景,如果有則繼續(xù)分發(fā),如果沒有則發(fā)送郵件給測試申請人。
TestMachine接收指令后,到【測試任務(wù)】數(shù)據(jù)表中獲取分配的場景,使用中斷處理機制調(diào)度運行,具體為:
從數(shù)據(jù)庫中查詢,分配給自己的測試場景,根據(jù)【自動化場景】里的獲取腳本存放的路徑,調(diào)度運行,同時在運行過程中,回寫數(shù)據(jù)庫運行結(jié)果;
使用中斷處理運行機制:先判斷依賴項是否成功,如果成功則運行,如果失敗則阻塞。在運行過程中包含了異常處理,當(dāng)其中一個場景中斷后,記錄當(dāng)時的錯誤截屏和日志信息。同時判斷當(dāng)前狀態(tài)是否滿足下一場景運行的條件,如果滿足,繼續(xù)運行,如果不滿足,重新準(zhǔn)備被測環(huán)境,運行下一個場景;
測試結(jié)果的智能分析:腳本運行失敗時,自動截圖、通過日志記錄失敗的詳細信息,并進行測試結(jié)果的智能分析,通過包括控件類型、控件標(biāo)題的特點進行判斷,將失敗原因自動確定。
所述失敗原因歸為以下三類:
因程序錯誤導(dǎo)致的中斷,該類失敗歸為“程序錯誤”;
因網(wǎng)絡(luò)等原因?qū)е碌牟痪邆淠_本運行的前提條件,該類失敗歸為“阻塞”;
因腳本沒有及時更新,導(dǎo)致腳本與程序沒有同步而導(dǎo)致的失敗,該類失敗歸為“腳本問題”。
在此基礎(chǔ)上,積累“程序錯誤”、“阻塞”的特征,即,通過控件類型、控件標(biāo)題等特點進行判斷,當(dāng)符合某一類特征時,自動歸類為“程序錯誤”或者“阻塞”,其他問題歸為“腳本問題”。這樣節(jié)省了結(jié)果分析人員分析問題的時間,提高結(jié)果分析的效率。分布式調(diào)度自動化測試平臺通過包括控件類型、控件標(biāo)題的特點進行判斷,當(dāng)符合某一類特征時,自動歸類為“程序錯誤”或者“阻塞”,其他問題歸為“腳本問題”。
通過上述描述可知,本發(fā)明實現(xiàn):
自動化測試的云服務(wù):
用戶不需要關(guān)注自動化測試具體運行的過程,只需提供測試哪些用例,用幾臺機器,該系統(tǒng)則可自動選擇機器、識別該任務(wù)需運行的自動化場景。選擇場景的方法:根據(jù)【自動化場景】生成該任務(wù)的運行場景;選擇機器的方法:看前任務(wù)的“計劃啟動時間”至“預(yù)計結(jié)束時間”這個時間段內(nèi),通過【機器管理】“任務(wù)安排”中看哪些機器是沒有任務(wù)安排的,則安排該任務(wù)到該機器上。
支持任務(wù)定時運行:
系統(tǒng)支持立即運行,也支持定時運行,當(dāng)用戶指定計劃啟動時間后,系統(tǒng)會采用輪詢的方式,每隔一段時間檢查,是否有到計劃啟動時間的任務(wù),有則將該任務(wù),提交給分布式調(diào)度服務(wù)器(Distributed Server),進行任務(wù)分發(fā)。
運行過程可控:
任務(wù)啟動:當(dāng)任務(wù)提交至Distributed Server時,自動發(fā)送郵件給測試申請人;
過程監(jiān)控:在運行過程中,用戶可以通過該Web平臺,實時了解運行該任務(wù)的各個機器的指標(biāo)(已分配場景數(shù)、在運行場景數(shù)、失敗場景數(shù)、成功率、分配率);
過程可干預(yù):支持在運行過程中,通過測試平臺,對任務(wù)進行干預(yù),包括:暫停、修改、繼續(xù)運行、停止、刪除、失敗場景重復(fù)運行等。
任務(wù)結(jié)束:當(dāng)分布式測試運行機器(Distributed Client)完成分配的任務(wù)后,Distributed Server會檢查當(dāng)前任務(wù)的運行場景列表中,是否還有未運行的場景,如果有則繼續(xù)分發(fā),如果沒有則發(fā)送郵件給測試申請人。
專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的方法及結(jié)構(gòu),基于計算機軟件系統(tǒng)實現(xiàn),能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的功能及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實施例描述的方法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上對本發(fā)明所提供的一種分布式調(diào)度自動化測試平臺及方法進行了詳細介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。