本發(fā)明屬于瀏覽器測試領(lǐng)域,尤其涉及一種基于selenium的測試中間件、測試系統(tǒng)及方法。
背景技術(shù):
現(xiàn)有基于selenium(瀏覽器自動化測試框架)的ui(用戶界面)測試工具為單用戶單任務(wù)形式,且selenium的測試需要專業(yè)測試開發(fā)人員進行源代碼的編寫,非一般手工測試人員能夠具備的能力,測試難度高,腳本維護工作量大,對人力資源的要求度很高。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是為了克服現(xiàn)有技術(shù)中selenium測試方法只能解決單用戶單任務(wù)的問題,且腳本維護工作量大、性能測試工作難度高的缺陷,提供了一種基于selenium的測試中間件、測試系統(tǒng)及方法。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題:
一種基于selenium的測試中間件,包括:交互api(應(yīng)用程序編程接口)模塊、任務(wù)隊列模塊、selenium控制模塊和瀏覽器資源池;
所述交互api模塊包含多個api接口,所述api接口用于接收多個測試任務(wù)并發(fā)送至所述任務(wù)隊列模塊;
所述任務(wù)隊列模塊用于將接收到的所述多個測試任務(wù)存入任務(wù)隊列中,并按照所述任務(wù)隊列的順序依次將所述多個測試任務(wù)發(fā)送至所述selenium控制模塊;
所述selenium控制模塊用于依次根據(jù)每個測試任務(wù)從所述瀏覽器資源池中調(diào)取瀏覽器資源并調(diào)用selenium,將所述測試任務(wù)和所述瀏覽器資源發(fā)送至所述selenium的node節(jié)點完成任務(wù)的測試,并將測試結(jié)果發(fā)送出去;
所述瀏覽器資源池用于存放多個瀏覽器資源。
本方案中,將測試任務(wù)發(fā)送到測試中間件的交互api模塊,所述測試任務(wù)為頁面連接、元素標(biāo)識、對元素進行的操作和該操作需要的參數(shù)中至少一項,比如具體的一個網(wǎng)站的ip(網(wǎng)絡(luò)協(xié)議)地址、操作人員的id(設(shè)別號)號或sendkey(一個編程語句,它可將一個或多個按鍵消息發(fā)送到活動窗口,就如同用鍵盤進行輸入一樣)操作等,測試中間件即可以完成任務(wù)的測試,克服了現(xiàn)有技術(shù)中selenium測試需要專業(yè)測試開發(fā)人員進行源代碼編寫的缺陷。
較佳地,所述多個測試任務(wù)為同一時刻多個用戶發(fā)送過來的多個測試任務(wù)或單個用戶發(fā)送過來的多個測試任務(wù)。
本方案中,測試任務(wù)為單用戶發(fā)送的多個測試任務(wù)或者多用戶發(fā)送的多個測試任務(wù),交互api模塊將所述多個測試任務(wù)發(fā)送至任務(wù)隊列模塊,所述任務(wù)隊列模塊按照先進先出的順序依次將所述測試任務(wù)發(fā)送到selenium控制模塊完成任務(wù)的測試,克服了現(xiàn)有技術(shù)selenium只能解決單用戶單任務(wù)的缺陷。
較佳地,所述測試任務(wù)還包括一執(zhí)行請求,所述執(zhí)行請求包括執(zhí)行所述測試任務(wù)所需的node節(jié)點類型和瀏覽器類型;
所述selenium控制模塊根據(jù)所述瀏覽器類型從所述瀏覽器資源池中調(diào)取具有所述瀏覽器類型的瀏覽器資源;
所述selenium控制模塊根據(jù)所述node節(jié)點類型將所述瀏覽器資源和所述測試任務(wù)發(fā)送至具有所述node節(jié)點類型的node節(jié)點。
本方案中,所述瀏覽器資源池用于存放大量的瀏覽器資源以及瀏覽器資源與node節(jié)點類型的對應(yīng)關(guān)系,根據(jù)執(zhí)行請求里包含的node節(jié)點類型和瀏覽器類型,selenium控制模塊調(diào)取對應(yīng)的瀏覽器資源并發(fā)送到對應(yīng)的node節(jié)點來進行任務(wù)的測試。
較佳地,所述selenium控制模塊還用于檢測正在執(zhí)行一目標(biāo)測試任務(wù)的目標(biāo)瀏覽器資源的數(shù)量是否超過設(shè)定的閾值,若是,則停止從所述瀏覽器資源池中調(diào)取所述目標(biāo)瀏覽器資源。
本方案中,selenium控制模塊還實時監(jiān)控執(zhí)行中的測試任務(wù)所用到的某一類型瀏覽器資源的量是否超過設(shè)定的閾值,超過數(shù)量的同一種瀏覽器資源同時執(zhí)行測試任務(wù),可能會造成服務(wù)器耗盡,影響整體的任務(wù)的執(zhí)行速度。
較佳地,所述測試中間件還包括日志整理模塊,所述日志整理模塊用于接收所述selenium控制模塊發(fā)送過來的所述測試結(jié)果,并根據(jù)所述測試結(jié)果生成日志數(shù)據(jù),再調(diào)用所述api接口將所述日志數(shù)據(jù)發(fā)送出去。
一種基于selenium的測試系統(tǒng),包括管理平臺和如上述各優(yōu)選項任意組合的測試中間件,所述管理平臺用于調(diào)用所述api接口發(fā)送所述多個測試任務(wù)并接收所述測試結(jié)果。
一種基于selenium的測試方法,利用如上述的測試中間件來實現(xiàn),所述測試方法包括以下步驟:
s1、所述api接口接收多個測試任務(wù)并發(fā)送至所述任務(wù)隊列模塊;
s2、所述任務(wù)隊列模塊將接收到的所述多個測試任務(wù)存入任務(wù)隊列中,并按照所述任務(wù)隊列的順序依次將所述多個測試任務(wù)發(fā)送至所述selenium控制模塊;
s3、所述selenium控制模塊依次根據(jù)每個測試任務(wù)從所述瀏覽器資源池中調(diào)取瀏覽器資源并調(diào)用selenium,將所述測試任務(wù)和瀏覽器資源發(fā)送至所述selenium的node節(jié)點完成任務(wù)的測試,并將測試結(jié)果發(fā)送出去。
較佳地,步驟s1中所述的測試任務(wù)為同一時刻多個用戶發(fā)送過來的多個測試任務(wù)或單個用戶發(fā)送過來的多個測試任務(wù)。
較佳地,所述測試任務(wù)還包括執(zhí)行請求,所述執(zhí)行請求包括執(zhí)行所述測試任務(wù)所需的node節(jié)點類型和瀏覽器類型,步驟s3中:
所述selenium控制模塊根據(jù)所述瀏覽器類型從所述瀏覽器資源池中調(diào)取具有所述瀏覽器類型的所述瀏覽器資源;
所述selenium控制模塊根據(jù)所述node節(jié)點類型將所述瀏覽器資源和所述測試任務(wù)發(fā)送至具有所述node節(jié)點類型的node節(jié)點。
較佳地,步驟s3還包括:所述selenium控制模塊檢測正在執(zhí)行一目標(biāo)測試任務(wù)的目標(biāo)瀏覽器資源的數(shù)量是否超過設(shè)定的閾值,若是,則停止從所述瀏覽器資源池中調(diào)取所述目標(biāo)瀏覽器資源。
較佳地,所述測試中間件還包括日志整理模塊,所述測試方法還包括步驟s4:
所述日志整理模塊接收所述selenium控制模塊發(fā)送過來的所述測試結(jié)果,并根據(jù)所述測試結(jié)果生成所述日志數(shù)據(jù),再調(diào)用所述api接口將所述日志數(shù)據(jù)發(fā)送出去。
較佳地,所述測試方法還利用管理平臺來實現(xiàn),步驟s1之前還包括:所述管理平臺調(diào)用所述api接口發(fā)送測試任務(wù);步驟s4之后還包括:所述日志整理模塊調(diào)用所述api接口將所述測試結(jié)果發(fā)送至所述管理平臺。
本發(fā)明的積極進步效果在于:本發(fā)明通過增加測試中間件,只要簡單的添加交互api接口的訪問信息就可以通過測試中間件來完成任務(wù)的測試,從而實現(xiàn)類似于管理平臺的一套多任務(wù)多用戶系統(tǒng),更能減少腳本的維護工作,同時還降低了性能測試工作的難度。
附圖說明
圖1為本發(fā)明實施例1的基于selenium的測試中間件的結(jié)構(gòu)框圖。
圖2為本發(fā)明實施例1的基于selenium的測試系統(tǒng)的結(jié)構(gòu)框圖。
圖3為本發(fā)明實施例2的基于selenium的測試方法的流程圖。
具體實施方式
下面通過實施例的方式進一步說明本發(fā)明,但并不因此將本發(fā)明限制在所述的實施例范圍之中。
實施例1
一種基于selenium的測試中間件,如圖1所示,包括:交互api模塊1、任務(wù)隊列模塊2、selenium控制模塊3、瀏覽器資源池4和日志整理模塊5;
所述交互api模塊1包含多個api接口,所述api接口用于接收多個測試任務(wù)并發(fā)送至所述任務(wù)隊列模塊2;所述多個測試任務(wù)為同一時刻多個用戶發(fā)送過來的多個測試任務(wù)或單個用戶發(fā)送過來的多個測試任務(wù);
所述任務(wù)隊列模塊2用于將接收到的所述多個測試任務(wù)存入任務(wù)隊列中,并按照所述任務(wù)隊列的順序依次將所述多個測試任務(wù)發(fā)送至所述selenium控制模塊3;
每個測試任務(wù)還包括一執(zhí)行請求,所述執(zhí)行請求包括執(zhí)行所述測試任務(wù)所需的node節(jié)點類型和瀏覽器類型;所述selenium控制模塊3根據(jù)所述瀏覽器類型從所述瀏覽器資源池4中調(diào)取具有所述瀏覽器類型的瀏覽器資源;再調(diào)用selenium,根據(jù)所述node節(jié)點類型將所述測試任務(wù)和所述瀏覽器資源發(fā)送至具有所述node節(jié)點類型的node節(jié)點完成任務(wù)的測試,并將測試結(jié)果發(fā)送至日志整理模塊;
所述瀏覽器資源池4用于存放多個瀏覽器資源;
所述日志整理模塊5用于接收所述測試結(jié)果,并根據(jù)所述測試結(jié)果生成日志數(shù)據(jù),再調(diào)用所述api接口將所述日志數(shù)據(jù)發(fā)送出去。
所述測試任務(wù)在測試過程中實時生成測試狀態(tài)并發(fā)送至所述交互api模塊1,所述測試狀態(tài)為等待、執(zhí)行、成功和失敗中任意一種。具體的,當(dāng)測試腳本存入所述任務(wù)隊列的同時生成等待的測試狀態(tài)并將所述測試狀態(tài)返回至所述交互api模塊1;當(dāng)測試腳本由所述任務(wù)隊列模塊2發(fā)送至所述selenium控制模塊3執(zhí)行測試任務(wù)的同時生成執(zhí)行的測試狀態(tài)并將所述測試狀態(tài)返回至所述交互api模塊1;當(dāng)測試腳本在所述selenium控制模塊3中完成測試任務(wù)生成測試結(jié)果的同時,根據(jù)任務(wù)的測試結(jié)果生成成功或失敗的測試狀態(tài)并將所述測試狀態(tài)返回至所述交互api模塊1。
本實施例還提供一種基于selenium的測試系統(tǒng),如圖2所示,包括管理平臺6和如上所述的測試中間件,所述管理平臺6用于將所述多個測試任務(wù)發(fā)送至所述交互api模塊1,還用于接收所述日志整理模塊5發(fā)送過來的所述日志數(shù)據(jù)。
本實施例中,通過增加測試中間件,管理平臺只要簡單添加交互api接口的測試任務(wù),就可以通過測試中間件來完成任務(wù)的測試,再將測試結(jié)果回傳至管理平臺,從而實現(xiàn)一套類似管理平臺的測試系統(tǒng),更能減少腳本的維護工作,同時還降低了性能測試工作的難度。
實施例2
一種基于selenium的測試方法,利用如實施例1所述的測試中間件來實現(xiàn),如圖3所示,所述測試方法包括以下步驟:
步驟101、api接口接收多個測試任務(wù)并發(fā)送至任務(wù)隊列模塊。所述測試任務(wù)為同一時刻多個用戶發(fā)送過來的多個測試任務(wù)或單個用戶發(fā)送過來的多個測試任務(wù)。
步驟102、任務(wù)隊列模塊將接收到的多個測試任務(wù)存入任務(wù)隊列中,并按照所述任務(wù)隊列的順序依次將所述多個測試任務(wù)發(fā)送至所述selenium控制模塊。
步驟103、selenium控制模塊根據(jù)所述瀏覽器類型從所述瀏覽器資源池中調(diào)取具有所述瀏覽器類型的所述瀏覽器資源;再調(diào)用selenium,根據(jù)所述node節(jié)點類型將所述瀏覽器資源和所述測試任務(wù)發(fā)送至具有所述node節(jié)點類型的node節(jié)點完成任務(wù)的測試,并將測試結(jié)果發(fā)送至日志整理模塊。
步驟104、日志整理模塊接收測試結(jié)果,并根據(jù)測試結(jié)果生成日志數(shù)據(jù),并調(diào)用api接口將日志數(shù)據(jù)發(fā)送出去。
本實施例中的測試方法還利用管理平臺來實現(xiàn),步驟101之前還包括:所述管理平臺調(diào)用所述api接口發(fā)送測試任務(wù);步驟104之后還包括:所述日志整理模塊調(diào)用所述api接口將所述測試結(jié)果發(fā)送至所述管理平臺。
雖然以上描述了本發(fā)明的具體實施方式,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說明,本發(fā)明的保護范圍是由所附權(quán)利要求書限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實質(zhì)的前提下,可以對這些實施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護范圍。