本申請涉及軟件測試技術(shù)領(lǐng)域,尤其涉及一種智能測試方法和裝置。
背景技術(shù):
在對網(wǎng)絡(luò)接口進行測試時,測試請求需要根據(jù)待測試接口的定義包含相應(yīng)的參數(shù)。目前接口的定義朝著兩個方向發(fā)展,一是入?yún)?fù)雜化,二是入?yún)⑼ㄓ没鹘y(tǒng)的測試方案需要測試人員手工在測試請求中寫入?yún)?shù),得到實例請求,由于參數(shù)越來越復(fù)雜,降低了測試效率。
技術(shù)實現(xiàn)要素:
本申請旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
為此,本申請的一個目的在于提出一種智能測試方法,該方法可以提高測試效率。
本申請的另一個目的在于提出一種智能測試裝置。
為達到上述目的,本申請第一方面實施例提出的智能測試方法,包括:向用戶展示錄入頁面,并接收用戶在所述錄入頁面中錄入的頁面數(shù)據(jù);根據(jù)所述頁面數(shù)據(jù),以及預(yù)先獲取的資源池和請求池,生成當(dāng)前實例請求;根據(jù)所述當(dāng)前實例請求進行測試;將測試得到的當(dāng)前結(jié)果與歷史結(jié)果進行比 較,得到校驗結(jié)果,并展示給用戶。
本申請第一方面實施例提出的智能測試方法,通過根據(jù)頁面數(shù)據(jù)和資源池以及請求池生成當(dāng)前實例請求,可以實現(xiàn)實例請求的自動生成,避免人工方式存在的問題,提高測試效率。另外,通過將當(dāng)前結(jié)果與歷史結(jié)果進行比較,可以更好的發(fā)現(xiàn)問題,從而提高測試效果。
為達到上述目的,本申請第二方面實施例提出的智能測試裝置,包括:測試管理界面,用于向用戶展示錄入頁面,并接收用戶在所述錄入頁面中錄入的頁面數(shù)據(jù);實例化請求組件,用于根據(jù)所述頁面數(shù)據(jù),以及預(yù)先獲取的資源池和請求池,生成當(dāng)前實例請求;測試執(zhí)行模塊,用于根據(jù)所述當(dāng)前實例請求進行測試;結(jié)果校驗組件,用于將測試得到的當(dāng)前結(jié)果與歷史結(jié)果進行比較,得到校驗結(jié)果,并通過所述測試管理界面展示給用戶。
本申請第二方面實施例提出的智能測試裝置,通過根據(jù)頁面數(shù)據(jù)和資源池以及請求池生成當(dāng)前實例請求,可以實現(xiàn)實例請求的自動生成,避免人工方式存在的問題,提高測試效率。另外,通過將當(dāng)前結(jié)果與歷史結(jié)果進行比較,可以更好的發(fā)現(xiàn)問題,從而提高測試效果。
本申請附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請的實踐了解到。
附圖說明
本申請上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1是本申請一實施例提出的智能測試方法的流程示意圖;
圖2是本申請實施例對應(yīng)的測試系統(tǒng)的示意圖;
圖3是本申請實施例中展示給用戶的頁面的示意圖;
圖4是本申請另一實施例提出的智能測試方法的流程示意圖;
圖5是本申請實施例中實例化請求的流程示意圖;
圖6是本申請另一實施例提出的智能測試方法的流程示意圖;
圖7是本申請另一實施例提出的智能測試裝置的結(jié)構(gòu)示意圖;
圖8是本申請另一實施例提出的智能測試裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面詳細描述本申請的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的模塊或具有相同或類似功能的模塊。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本申請,而不能理解為對本申請的限制。相反,本申請的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
圖1是本申請一實施例提出的智能測試方法的流程示意圖。如圖1所示,該方法包括:
S11:向用戶展示錄入頁面,并接收用戶在所述錄入頁面中錄入的頁面數(shù)據(jù)。
頁面數(shù)據(jù)包括:待測試接口的接口名、測試方法的方法名,另外,還可以包括指定K-V,K-V是指關(guān)鍵字(key)和對應(yīng)的值(value)。
其中,可以在錄入頁面中向用戶提供一個或多個可供選擇的接口名和方法名,用戶可以選擇需要的接口名和方法名。
另外,如果需要,用戶還可以手工輸入指定K-V。
例如,參見圖2,本實施例對應(yīng)的系統(tǒng)20中可以包括:測試管理界面 21,測試管理界面21的一種功能是向用戶展示錄入頁面。
錄入頁面可以如圖3所示,在錄入頁面中,用戶可以選擇待測試接口的接口名31和測試方法的方法名32,另外還可以輸入指定K-V 33。
一些實施例中,參見圖4,該方法還包括:
S41:獲取資源包,所述資源包中包含接口定義。
其中,測試請求需要基于接口定義發(fā)起,因此需要有接口定義。
以java編程為例,資源包可以具體是包含接口定義的jar包。
具體的,參見圖2,系統(tǒng)還可以包括:測試管理組件22。用戶可以通過測試管理界面21向系統(tǒng)上傳jar包的資源文件地址,之后系統(tǒng)可以將獲取的資源文件地址記錄在數(shù)據(jù)庫中。測試管理組件22用于從數(shù)據(jù)庫中獲取資源文件地址并根據(jù)資源文件地址下載資源文件,在下載后,可以先判斷下載的資源文件是否是jar文件,如果是,則進行解壓,動態(tài)類加載(load class)等加載jar文件。如果不是jar文件則可以結(jié)束流程。
S42:提取所述資源包中的關(guān)鍵信息,并將所述關(guān)鍵信息存儲到資源池中。
測試管理組件22加載jar文件后,可以從中提取關(guān)鍵信息,例如類信息,之后將其存儲到資源池中。
在存儲關(guān)鍵信息時,具體的可以按照預(yù)設(shè)格式進行存儲,本實施例稱為類型倉儲(map),類型倉儲的結(jié)構(gòu)如下:
Map<接口名,Map<方法名,List<入?yún)㈩愋?gt;>>
接口名也可以稱為類名,如“com.alipay.test.TestInterface”;
方法名,如“Sting queryInfo(String)”;
入?yún)㈩愋停纭癹ava.lang.String”、“l(fā)ong”。
S43:根據(jù)所述關(guān)鍵信息生成可供選擇的接口名和方法名,并在所述錄入 頁面中進行展示。
在得到上述的類型倉儲后,可以根據(jù)其生成可供選擇的接口名和方法名,在錄入頁面中展示,實現(xiàn)頁面初始化。
具體的,如上所示的類型倉儲中會包含接口名、方法名等字段,可以在類型倉儲的相應(yīng)字段位置進行提取,從而得到可供選擇的接口名和方法名,如提取出一種可供選擇的接口名是“com.alipay.test.TestInterface”,提取出一種可供選擇的方法名是“Sting queryInfo(String)”。
S12:根據(jù)所述頁面數(shù)據(jù),以及預(yù)先獲取的資源池和請求池,生成當(dāng)前實例請求。
當(dāng)用戶錄入頁面數(shù)據(jù)后,可以將其發(fā)送給系統(tǒng),例如,用戶點擊錄入頁面的“發(fā)送請求”按鈕后,可以將頁面數(shù)據(jù)發(fā)送給系統(tǒng),之后由系統(tǒng)進行實例請求化。
例如,參見圖2,該系統(tǒng)還包括:實例化請求組件23,由實例化請求組件根據(jù)頁面數(shù)據(jù)、資源池和請求池生成當(dāng)前實例請求。
如上所示,測試管理組件22加載jar文件(資源包)后,可以將提取的關(guān)鍵信息存儲到資源池中。
請求池是實例請求的集合,該集合可以包括歷史實例請求,歷史實例請求具體可以通過保存歷史的測試用例,從測試用例中獲取歷史實例請求。另外,在得到當(dāng)前實例請求后,也可以將其存儲到請求池中,以提高請求池內(nèi)數(shù)據(jù)的完備性和精準性。
一些實施例中,參見圖5,生成當(dāng)前實例請求的流程可以包括:
S51:根據(jù)頁面數(shù)據(jù)中的接口名和方法名,從資源池中獲取當(dāng)前測試信息。
測試信息包括:接口名、方法名、入?yún)㈩愋鸵约爸付↘-V。例如,測試信息表示為:接口名.方法名.入?yún)㈩愋?,入?yún)㈩愋?,…,入?yún)㈩愋蚽+指定K-V。
例如,如上所示,資源池中記錄的類型倉儲的結(jié)構(gòu)是:
Map<接口名,Map<方法名,List<入?yún)㈩愋?gt;>>
通過該結(jié)構(gòu),可以找到與用戶錄入的接口名和方法名對應(yīng)的入?yún)㈩愋?,并由錄入的接口名、方法名和對?yīng)的入?yún)㈩愋徒M成上述的接口名.方法名.入?yún)㈩愋?,入?yún)㈩愋?,…,入?yún)㈩愋蚽。另一方面,用戶錄入時可以輸入指定K-V(如圖3中的s=”test”),從而可以得到當(dāng)前測試信息。
S52:確定當(dāng)前測試信息與請求池中實例請求對應(yīng)的測試信息之間的匹配關(guān)系。
如上所示,請求池中存儲有實例請求。具體的,每個實例請求可以與測試信息對應(yīng)存儲,例如,測試信息_1對應(yīng)實例請求_1。每個測試信息的形式可以如上所示。
通過將當(dāng)前測試信息與請求池中的每個測試信息進行比較,可以確定匹配關(guān)系。
匹配關(guān)系包括:完全匹配、不完全匹配和不匹配。
其中,完全匹配是指請求池中存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵约爸付↘-V均一致的測試信息,不完全匹配是指請求池中存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵恢?、但指定K-V不一致(關(guān)鍵字K不同或值V不同)的測試信息,不匹配是指請求池中不存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵恢碌臏y試信息。
S53:如果匹配關(guān)系是完全匹配,則從請求池中獲取完全匹配的測試信息對應(yīng)的實例請求,并將獲取的實例請求作為當(dāng)前實例請求。
例如,請求池中一個實例請求A對應(yīng)的測試信息與當(dāng)前測試信息完全匹配,則將實例請求A確定為當(dāng)前實例請求。
S54:如果匹配關(guān)系是不完全匹配,則從請求池中獲取不完全匹配的測試信息對應(yīng)的實例請求,并用頁面數(shù)據(jù)中的指定K-V更新獲取的實例請求中的相應(yīng)屬性值,將更新后的實例請求作為當(dāng)前實例請求。
例如,請求池中一個實例請求A對應(yīng)的測試信息與當(dāng)前測試信息不完全匹配,則獲取實例請求A,假設(shè)實例請求A中的一個入?yún)?shù)據(jù)是s=”request”,同時頁面數(shù)據(jù)中的指定K-V是s=”test”,則用s=”test”替換s=”request”,假設(shè)更新后得到實例請求A’,則將實例請求A’確定為當(dāng)前實例請求。
S55:如果匹配關(guān)系是不匹配,則根據(jù)當(dāng)前測試信息以及預(yù)設(shè)機制,進行實例化,得到當(dāng)前實例請求。
預(yù)設(shè)機制例如是java反射機制。
例如,對一個從未測試過的接口發(fā)起測試,請求池中不存在匹配的測試信息,則可以根據(jù)當(dāng)前測試信息,采用java反射機制進行實例化。
例如,頁面數(shù)據(jù)中的接口名和方法名分別是“com.alipay.test.TestInterface”和“Sting queryInfo(String s,String d)”,通過在資源池中查找確定入?yún)?shù)據(jù)是String類型的s和String類型的d,則可以通過java反射機制,得到一個String類型的實例s和一個String類型的d,另外,如果頁面數(shù)據(jù)中還包括指定K-V是s=”test”,則將實例s的值更新為”test”。
通過上述流程可以生成當(dāng)前實例請求。
一些實施例中,在得到當(dāng)前實例請求后,如圖6所示,該方法還可以 包括:
S61:將生成的當(dāng)前實例請求展示給用戶,以供用戶確認或修改。
例如,實例請求化組件得到當(dāng)前實例請求后,通過測試管理界面將其展示給用戶。
用戶可以通過測試管理界面確認或修改當(dāng)前實例請求。
另外,用戶在確認或修改當(dāng)前實例請求后,可以將確認或修改后的當(dāng)前實例請求保存在請求池中,以供后續(xù)使用。
S13:根據(jù)所述當(dāng)前實例請求進行測試。
如果用戶對展示的當(dāng)前實例請求進行了修改,則測試時采用的具體是指修改后的當(dāng)前實例請求。
參見圖2,系統(tǒng)還包括:測試執(zhí)行模塊24,測試執(zhí)行模塊24用于對當(dāng)前實例請求進行具體的測試執(zhí)行。
S14:將測試得到的當(dāng)前結(jié)果與歷史結(jié)果進行比較,得到校驗結(jié)果,并展示給用戶。
測試執(zhí)行模塊24在執(zhí)行測試后,會得到當(dāng)前結(jié)果。
參見圖2,系統(tǒng)還包括:結(jié)果校驗組件25,結(jié)果校驗組件25用于對當(dāng)前結(jié)果與歷史結(jié)果進行比較,得到校驗結(jié)果。歷史結(jié)果也可以稱為歷史基線。
例如,結(jié)果校驗組件25可以從測試執(zhí)行模塊24獲取到當(dāng)前結(jié)果。另外,系統(tǒng)中還包括結(jié)果池,結(jié)果池內(nèi)保存歷史結(jié)果,結(jié)果校驗?zāi)K25可以從結(jié)果池中獲取歷史結(jié)果,進而實現(xiàn)當(dāng)前結(jié)果與歷史結(jié)果的比較。
在得到比較結(jié)果后,可以通過測試管理界面21展示給用戶。例如,參見圖3,可以展示比較結(jié)果34。
具體的,可以根據(jù)用戶的觸發(fā)或者在存在歷史結(jié)果是自動觸發(fā)結(jié)果校驗組件進行比較,得到校驗結(jié)果。
結(jié)果校驗組件在比較時,可以基于反射機制獲取當(dāng)前結(jié)果的所有屬性值,并與歷史結(jié)果中的屬性值一一比較,并反饋給用戶,還可以給出總體的結(jié)果。
另外,在展示校驗結(jié)果的頁面上還可以提高按鈕用于變更用例結(jié)果(歷史結(jié)果)數(shù)據(jù),如用例結(jié)果數(shù)據(jù)發(fā)生變更,同步到結(jié)果池,若不做選擇,保留原用例。
一些實施例中,參見圖6,該方法還可以包括:
S62:根據(jù)用戶的選擇,根據(jù)當(dāng)前實例請求及當(dāng)前結(jié)果生成用例。
例如,參見圖3,可以在頁面上提供用于生成用例的按鈕,圖3中用保存為用例表示,從而實現(xiàn)用例的自動化生成。
一些實施例中,參見圖6,該方法還可以包括:
S63:對生成的用例進行持久化。
在生成用例后,可以用新生成的用例更新請求池和結(jié)果池。例如,可以對用例進行持久化,在服務(wù)器啟動時將數(shù)據(jù)加載至請求池和結(jié)果池。
一些實施例中,參見圖6,該方法還可以包括:
S64:對持久化的用例進行用例管理。
用例管理例如包括:刪除、修改、查看、分類、定時回放、作為發(fā)送校驗請求功能的入口等。
定時回放是指配置回放周期,測試系統(tǒng)根據(jù)該回放周期定期生成實例請求和得到測試結(jié)果,并可以根據(jù)實例請求和測試結(jié)果生成離線報告并存儲在數(shù)據(jù)庫內(nèi),以供用戶隨時檢查。
本實施例中,通過根據(jù)頁面數(shù)據(jù)和資源池以及請求池生成當(dāng)前實例請求,可以實現(xiàn)實例請求的自動生成,避免人工方式存在的問題,提高測試效率。另外,通過將當(dāng)前結(jié)果與歷史結(jié)果進行比較,可以更好的發(fā)現(xiàn)問題,從而提高測試效果。
圖7是本申請另一實施例提出的智能測試裝置的結(jié)構(gòu)示意圖,該裝置70包括:測試管理界面71、實例化請求組件72、測試執(zhí)行模塊73和結(jié)果校驗組件74。
測試管理界面71,用于向用戶展示錄入頁面,并接收用戶在所述錄入頁面中錄入的頁面數(shù)據(jù)。
頁面數(shù)據(jù)包括:待測試接口的接口名、測試方法的方法名,另外,還可以包括指定K-V,K-V是指關(guān)鍵字(key)和對應(yīng)的值(value)。
其中,可以在錄入頁面中向用戶提供一個或多個可供選擇的接口名和方法名,用戶可以選擇需要的接口名和方法名。
另外,如果需要,用戶還可以手工輸入指定K-V。
相應(yīng)的,所述頁面數(shù)據(jù)包括:接口名、方法名和指定K-V,所述錄入頁面中包含可供選擇的接口名和方法名,所述測試管理界面71用于接收用戶在所述錄入頁面中錄入的頁面數(shù)據(jù),包括:
接收用戶在所述錄入頁面中選擇的接口名和方法名;
接收用戶在所述錄入頁面中輸入的指定K-V。
錄入頁面可以如圖3所示,在錄入頁面中,用戶可以選擇待測試接口的接口名31和測試方法的方法名32,另外還可以輸入指定K-V 33。
一些實施例中,參見圖8,該裝置70還包括:
測試管理組件75,用于獲取資源包,所述資源包中包含接口定義;提取 所述資源包中的關(guān)鍵信息,并將所述關(guān)鍵信息存儲到資源池中;以及,根據(jù)所述關(guān)鍵信息生成可供選擇的接口名和方法名,并通過所述測試管理界面在所述錄入頁面中進行展示。
其中,測試請求需要基于接口定義發(fā)起,因此需要有接口定義。
以java編程為例,資源包可以具體是包含接口定義的jar包。
用戶可以通過測試管理界面向系統(tǒng)上傳jar包的資源文件地址,之后系統(tǒng)可以將獲取的資源文件地址記錄在數(shù)據(jù)庫中。測試管理組件用于從數(shù)據(jù)庫中獲取資源文件地址并根據(jù)資源文件地址下載資源文件,在下載后,可以先判斷下載的資源文件是否是jar文件,如果是,則進行解壓,動態(tài)類加載(load class)等加載jar文件。如果不是jar文件則可以結(jié)束流程。
測試管理組件加載jar文件后,可以從中提取關(guān)鍵信息,例如類信息,之后將其存儲到資源池中。
在存儲關(guān)鍵信息時,具體的可以按照預(yù)設(shè)格式進行存儲,本實施例稱為類型倉儲(map),類型倉儲的結(jié)構(gòu)如下:
Map<接口名,Map<方法名,List<入?yún)㈩愋?gt;>>
接口名也可以稱為類名,如“com.alipay.test.TestInterface”;
方法名,如“Sting queryInfo(String)”;
入?yún)㈩愋?,如“java.lang.String”、“l(fā)ong”。
在得到上述的類型倉儲后,可以根據(jù)其生成可供選擇的接口名和方法名,在錄入頁面中展示,實現(xiàn)頁面初始化。
具體的,如上所示的類型倉儲中會包含接口名、方法名等字段,可以在類型倉儲的相應(yīng)字段位置進行提取,從而得到可供選擇的接口名和方法名,如提取出一種可供選擇的接口名是“com.alipay.test.TestInterface”,提取出一 種可供選擇的方法名是“Sting queryInfo(String)”。
實例化請求組件72,用于根據(jù)所述頁面數(shù)據(jù),以及預(yù)先獲取的資源池和請求池,生成當(dāng)前實例請求。
當(dāng)用戶錄入頁面數(shù)據(jù)后,可以將其發(fā)送給系統(tǒng),例如,用戶點擊錄入頁面的“發(fā)送請求”按鈕后,可以將頁面數(shù)據(jù)發(fā)送給系統(tǒng),之后由系統(tǒng)進行實例請求化。
如上所示,測試管理組件加載jar文件(資源包)后,可以將提取的關(guān)鍵信息存儲到資源池中。
請求池是實例請求的集合,該集合可以包括歷史實例請求,歷史實例請求具體可以通過保存歷史的測試用例,從測試用例中獲取歷史實例請求。另外,在得到當(dāng)前實例請求后,也可以將其存儲到請求池中,以提高請求池內(nèi)數(shù)據(jù)的完備性和精準性。
一些實施例中,參見圖8,所述頁面數(shù)據(jù)包括:接口名、方法名和指定K-V,所述實例化請求組件72包括:
第一單元721,用于根據(jù)頁面數(shù)據(jù)中的接口名和方法名,從資源池中獲取當(dāng)前測試信息;
第二單元722,用于確定當(dāng)前測試信息與請求池中實例請求對應(yīng)的測試信息之間的匹配關(guān)系;
第三單元723,用于如果匹配關(guān)系是完全匹配,則從請求池中獲取完全匹配的測試信息對應(yīng)的實例請求,并將獲取的實例請求作為當(dāng)前實例請求;
第四單元724,用于如果匹配關(guān)系是不完全匹配,則從請求池中獲取不完全匹配的測試信息對應(yīng)的實例請求,并用頁面數(shù)據(jù)中的指定K-V更新 獲取的實例請求中的相應(yīng)屬性值,將更新后的實例請求作為當(dāng)前實例請求;
第五單元725,用于如果匹配關(guān)系是不匹配,則根據(jù)當(dāng)前測試信息以及預(yù)設(shè)機制,進行實例化,得到當(dāng)前實例請求。
測試信息包括:接口名、方法名、入?yún)㈩愋鸵约爸付↘-V。例如,測試信息表示為:接口名.方法名.入?yún)㈩愋?,入?yún)㈩愋?,…,入?yún)㈩愋蚽+指定K-V。
例如,如上所示,資源池中記錄的類型倉儲的結(jié)構(gòu)是:
Map<接口名,Map<方法名,List<入?yún)㈩愋?gt;>>
通過該結(jié)構(gòu),可以找到與用戶錄入的接口名和方法名對應(yīng)的入?yún)㈩愋停⒂射浫氲慕涌诿?、方法名和對?yīng)的入?yún)㈩愋徒M成上述的接口名.方法名.入?yún)㈩愋?,入?yún)㈩愋?,…,入?yún)㈩愋蚽。另一方面,用戶錄入時可以輸入指定K-V(如圖3中的s=”test”),從而可以得到當(dāng)前測試信息。
如上所示,請求池中存儲有實例請求。具體的,每個實例請求可以與測試信息對應(yīng)存儲,例如,測試信息_1對應(yīng)實例請求_1。每個測試信息的形式可以如上所示。
通過將當(dāng)前測試信息與請求池中的每個測試信息進行比較,可以確定匹配關(guān)系。
匹配關(guān)系包括:完全匹配、不完全匹配和不匹配。
其中,完全匹配是指請求池中存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵约爸付↘-V均一致的測試信息,不完全匹配是指請求池中存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵恢?、但指定K-V不一致(關(guān)鍵字K不同或值V不同)的測試信息,不匹配是指請求池中不存在與當(dāng)前測試信息中的接口名、方法名和入?yún)㈩愋鸵恢碌臏y試信息。
例如,請求池中一個實例請求A對應(yīng)的測試信息與當(dāng)前測試信息完全 匹配,則將實例請求A確定為當(dāng)前實例請求。
例如,請求池中一個實例請求A對應(yīng)的測試信息與當(dāng)前測試信息不完全匹配,則獲取實例請求A,假設(shè)實例請求A中的一個入?yún)?shù)據(jù)是s=”request”,同時頁面數(shù)據(jù)中的指定K-V是s=”test”,則用s=”test”替換s=”request”,假設(shè)更新后得到實例請求A’,則將實例請求A’確定為當(dāng)前實例請求。
預(yù)設(shè)機制例如是java反射機制。
例如,對一個從未測試過的接口發(fā)起測試,請求池中不存在匹配的測試信息,則可以根據(jù)當(dāng)前測試信息,采用java反射機制進行實例化。
例如,頁面數(shù)據(jù)中的接口名和方法名分別是“com.alipay.test.TestInterface”和“Sting queryInfo(String s,String d)”,通過在資源池中查找確定入?yún)?shù)據(jù)是String類型的s和String類型的d,則可以通過java反射機制,得到一個String類型的實例s和一個String類型的d,另外,如果頁面數(shù)據(jù)中還包括指定K-V是s=”test”,則將實例s的值更新為”test”。
通過上述流程可以生成當(dāng)前實例請求。
一些實施例中,實例化請求組件生成當(dāng)前實例請求后,還用于通過測試管理界面將生成的當(dāng)前實例請求展示給用戶,以供用戶確認或修改。
用戶可以通過測試管理界面確認或修改當(dāng)前實例請求。
另外,用戶在確認或修改當(dāng)前實例請求后,可以將確認或修改后的當(dāng)前實例請求保存在請求池中,以供后續(xù)使用。
測試執(zhí)行模塊73,用于根據(jù)所述當(dāng)前實例請求進行測試。
如果用戶對展示的當(dāng)前實例請求進行了修改,則測試時采用的具體是 指修改后的當(dāng)前實例請求。
結(jié)果校驗組件74,用于將測試得到的當(dāng)前結(jié)果與歷史結(jié)果進行比較,得到校驗結(jié)果,并通過所述測試管理界面展示給用戶。
例如,結(jié)果校驗組件可以從測試執(zhí)行模塊獲取到當(dāng)前結(jié)果。另外,系統(tǒng)中還包括結(jié)果池,結(jié)果池內(nèi)保存歷史結(jié)果,結(jié)果校驗?zāi)K可以從結(jié)果池中獲取歷史結(jié)果,進而實現(xiàn)當(dāng)前結(jié)果與歷史結(jié)果的比較。
在得到比較結(jié)果后,可以通過測試管理界面展示給用戶。例如,參見圖3,可以展示比較結(jié)果34。
具體的,可以根據(jù)用戶的觸發(fā)或者在存在歷史結(jié)果是自動觸發(fā)結(jié)果校驗組件進行比較,得到校驗結(jié)果。
結(jié)果校驗組件在比較時,可以基于反射機制獲取當(dāng)前結(jié)果的所有屬性值,并與歷史結(jié)果中的屬性值一一比較,并反饋給用戶,還可以給出總體的結(jié)果。
另外,在展示校驗結(jié)果的頁面上還可以提高按鈕用于變更用例結(jié)果(歷史結(jié)果)數(shù)據(jù),如用例結(jié)果數(shù)據(jù)發(fā)生變更,同步到結(jié)果池,若不做選擇,保留原用例。
一些實施例中,測試管理組件還用于:根據(jù)用戶的選擇,根據(jù)當(dāng)前實例請求及當(dāng)前結(jié)果生成用例。
例如,參見圖3,可以在頁面上提供用于生成用例的按鈕,從而實現(xiàn)用例的自動化生成。
一些實施例中,測試管理組件還用于:對生成的用例進行持久化。
在生成用例后,可以用新生成的用例更新請求池和結(jié)果池。例如,可以對用例進行持久化,在服務(wù)器啟動時將數(shù)據(jù)加載至請求池和結(jié)果池。
一些實施例中,測試管理組件還用于:對持久化的用例進行用例管理。
用例管理例如包括:刪除、修改、查看、分類、定時回放、作為發(fā)送校驗請求功能的入口等。
定時回放是指配置回放周期,測試系統(tǒng)根據(jù)該回放周期定期生成實例請求和得到測試結(jié)果,并可以根據(jù)實例請求和測試結(jié)果生成離線報告并存儲在數(shù)據(jù)庫內(nèi),以供用戶隨時檢查。
本實施例中,通過根據(jù)頁面數(shù)據(jù)和資源池以及請求池生成當(dāng)前實例請求,可以實現(xiàn)實例請求的自動生成,避免人工方式存在的問題,提高測試效率。另外,通過將當(dāng)前結(jié)果與歷史結(jié)果進行比較,可以更好的發(fā)現(xiàn)問題,從而提高測試效果。
需要說明的是,在本申請的描述中,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本申請的描述中,除非另有說明,“多個”的含義是指至少兩個。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本申請的實施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
應(yīng)當(dāng)理解,本申請的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實現(xiàn):具有 用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
此外,在本申請各個實施例中的各功能單元可以集成在一個處理模塊中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質(zhì)中。
上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本申請的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本申請的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本申請的限制,本領(lǐng)域的普通技術(shù)人員在本申請的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。