本申請涉及互聯網技術領域,特別是涉及一種測試件覆蓋率及覆蓋應用接口的分析方法、裝置。
背景技術:
分布式服務系統通常采用客戶端/服務器相分離的體系結構,其中,所述客戶端向服務器發出服務請求,所述服務器根據客戶端的服務請求,執行相應功能的應用程序。在實際應用中,如圖1所示,客戶端的數量眾多,而服務器的數量有限,為了有效均衡服務器的負載,通常在客戶端和服務器間設置遠程調用平臺,而遠程調用平臺中存儲有所有服務器發布的應用接口,當客戶端需實現某些功能的服務時,在遠程調用平臺中調用相關的應用接口即可。
目前,如圖2所示,一服務器通常在遠程調用平臺中發布多個應用接口,且為了保證上述應用接口的正確運行,一般通過應用接口測試平臺對每個服務器所發布的應用接口進行測試。在實際應用中,通常調用應用接口測試平臺中的一個測試程序,即測試件,檢測一個服務器所發布的所有應用接口是否正確和完備。
由于服務器經常在遠程調用平臺動態發布新應用接口,或,動態修改遠程調用平臺中已發布應用接口的功能代碼,因此,遠程調用平臺中的一測試件,是否可對其所對應的服務器所發布的所有應用接口均能夠進行正確和完備測試,即一測試件是否可覆蓋其對應服務器所發布的所有應用接口,并不知得。因此,在現有技術中,亟需一種測試件覆蓋率及覆蓋應用接口的分析方法、裝置,以分析一測試件覆蓋其對應服務器所發布應用接口的比例。
申請內容
本申請實施例中提供了一種測試件覆蓋率及覆蓋應用接口的分析方法、裝置,以分析一測試件覆蓋其對應服務器所發布應用接口的比例。
為了解決上述技術問題,本申請實施例公開了如下技術方案:
本申請公開了一種測試件覆蓋率的分析方法,包括:
獲取測試件對應服務器發布的第一應用接口集合;
根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;
確定所述第一應用接口集合與所述第二應用接口集合的交集;
分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。
可選的,確定所述第一應用接口集合與所述第二應用接口集合的交集,包括:
依次判斷所述第一應用接口集合中的每個應用接口,是否在所述第二應用接口集合中查找到;
如果是,將所述應用接口加入至所述交集。
可選的,根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合,包括:
掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
根據所述測試件源代碼的測試規則,依次判斷所述單詞是否標識所述測試件測試的應用接口;
如果是,將所述單詞所標識的應用接口,加入至所述第二應用接口集合。
可選的,所述方法還包括:
確定所述第一應用接口集合中每個應用接口相關聯的調用方法。
可選的,抽象語法樹所述測試件能夠測試的第二應用接口是從所述測試件的抽象語法樹中獲得的;根據所述測試件源代碼的測試規則,確定所述測試件的抽象語法樹,包括:
掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;
如果是,將所述單詞作為所述測試件的應用接口節點;
查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
可選的,確定所述第一應用接口集合與所述第二應用接口集合的交集,包括:
依次判斷所述第一應用接口集合中的每個應用接口,是否在所述抽象語法樹中查找到匹配的應用接口節點;
如果是,將所述應用接口加入至所述交集。
可選的,所述方法還包括:
依次判斷所述第一應用接口集合中的每個應用接口相關聯的調用方法,是否在所述抽象語法樹中查找到匹配的調用方法節點;
如果是,將所述調用方法,作為所述測試件能夠測試的調用方法;
分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=能夠測試的調用方法數目/第一應用接口集合中所有應用接口相關聯的調用方法數目。
本申請還公開了一種測試件覆蓋率的分析方法,包括:
獲取測試件對應服務器發布的第一應用接口集合;
依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;所述抽象語法樹為預先根據所述測試件的源代碼所構建的,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;
如果是,將所述應用接口作為所述測試件能夠測試的應用接口;
分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目。
可選的,所述抽象語法樹中還包括所述測試件能夠測試的調用方法節點,所述方法還包括:
獲取所述測試件對應服務器發布的第一調用方法集合,所述第一調用方法集合為所述服務器在所述第一應用接口集合中的應用接口下發布的;
依次判斷所述第一調用方法集合中的每個調用方法,能否在所述測試件的抽象語法樹中查找到相匹配的調用方法節點;
如果能,將所述調用方法作為所述測試件能夠測試的調用方法;
分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件能夠測試的調用方法的數目/第一應用接口集合中應用接口的數目。
可選的,根據所述測試件的源代碼構建所述測試件的抽象語法樹,包括:
掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試 的應用接口;
如果是,將所述單詞作為所述測試件的應用接口節點;
查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
可選的,所述方法還包括:
如果所述第一應用接口集合中的一應用接口,在所述測試件的抽象語法樹中未能查找到匹配的應用接口節點,確定所述應用接口為所述測試件未能測試的應用接口。
可選的,所述方法還包括:
如果所述第一調用方法集合中的一調用方法,在所述測試件的抽象語法樹中未能查找到匹配的調用方法節點,確定所述調用方法為所述測試件未能測試的調用方法。
本申請還公開了一種測試件覆蓋應用接口的分析方法,包括:
獲取測試件對應服務器發布的一應用接口;
判斷所述應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點,所述抽象語法樹為預先根據所述測試的源代碼所構建的,所述AST中至少包括所述測試件能夠測試的應用接口節點;
如果是,確定所述測試件覆蓋所述應用接口,否則,確定所述測試件未能覆蓋所述應用接口。
本申請還公開了一種測試件覆蓋率的分析裝置,包括:
第一獲取模塊,用于獲取測試件對應服務器發布的第一應用接口集合;
第一確定模塊,用于根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;
第二確定模塊,用于確定所述第一應用接口集合與所述第二應用接口集合的交集;
第一分析模塊,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。
15、根據權利要求14所述的裝置,其特征在于,所述第一確定模塊包括:
第一判斷單元,用于依次判斷所述第一應用接口集合中的每個應用接口,是否在所述第二應用接口集合中查找到;
第一加入單元,用于當在所述第二應用接口集合中查找到所述應用接口時,將所述應用接口加入至所述交集。
可選的,所述第二確定模塊包括:
掃描單元,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞是否標識所述測試件測試的應用接口;
第二加入單元,用于將所述單詞所標識的應用接口,加入至所述第二應用接口集合。
可選的,所述裝置還包括:
第三確定模塊,用于確定所述第一應用接口集合中每個應用接口相關聯的調用方法。
可選的,所述測試件能夠測試的第二應用接口是從所述測試件的抽象語法樹中獲得的;所述第二確定模塊包括:
掃描單元,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;
第二加入單元,用于當所述單詞標識所述測試件的應用接口時,將所述單詞作為所述測試件的應用接口節點;
查找單元,用于查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
構建單元,用于根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
可選的,所述第一確定模塊,包括:
第三判斷單元,用于依次判斷所述第一應用接口集合中的每個應用接口,是否在所述抽象語法樹中查找到匹配的應用接口節點;
第三加入單元,用于當所述應用接口,在所述抽象語法樹中查找到匹配的應用接口節點時,將所述應用接口加入至所述交集。
可選的,所述裝置還包括:
第四判斷單元,用于依次判斷所述第一應用接口集合中的每個應用接口相關聯的調用方法,是否在所述抽象語法樹中查找到匹配的調用方法節點;
第一設定單元,用于當查找到匹配的調用方法節點時,將所述調用方法作為所述測試能夠測試的調用方法;
分析單元,用于分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=能夠測試的調用方法數目/第一應用接口集合中所有應用接口相關聯的調用方法數目。
本申請還公開了一種測試件覆蓋率的分析裝置,包括:
第一獲取模塊,用于獲取測試件對應服務器發布的第一應用接口集合;
構建模塊,用于根據所述測試件的源代碼構建抽象語法樹,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;
第一判斷模塊,用于依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;
第二設定單元,用于當一應用接口在所述抽象語法樹中查找到匹配的應用接口節點時,將所述應用接口作為所述測試件能夠測試的應用接口;
第二分析模塊,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目。
可選的,所述抽象語法樹中還包括所述測試件能夠測試的調用方法節點,所述裝置還包括:
第二獲取模塊,用于獲取所述測試件對應服務器發布的第一調用方法集合,所述第一調用方法集合為所述服務器在所述第一應用接口集合中的應用接口下發布的;
第二判斷模塊,用于依次判斷所述第一調用方法集合中的每個調用方法,能否在所述測試件的抽象語法樹中查找到相匹配的調用方法節點;
第三設定單元,用于當一調用方法在所述抽象語法樹中查找到匹配的調用方法節點時,將所述調用方法作為所述測試件能夠測試的調用方法;
第三分析模塊,用于分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件能夠測試的調用方法的數目/第一應用接口集合中應用接口的數目。
可選的,所述構建模塊包括:
掃描單元,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;
第四設定單元,用于當所述單詞標識所述測試件的應用接口時,將所述單詞作為所述測試件的應用接口節點;
查找單元,用于查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
構建單元,用于根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
可選的,所述裝置還包括:
第四確定模塊,用于當所述第一應用接口集合中的一應用接口,在所述測試件的抽象語法樹中未能查找到匹配的應用接口節點時,確定所述應用接口為所述測試件未能測試的應用接口。
可選的,所述裝置還包括:
第五確定模塊,用于當所述第一調用方法集合中的一調用方法,在所述測試件的抽象語法樹中未能查找到匹配的調用方法節點時,確定所述調用方法為所述測試件未能測試的調用方法。
本申請還公開了一種測試件覆蓋應用接口的分析裝置,包括:
第三獲取模塊,用于獲取測試件對應服務器發布的一應用接口;
構建模塊,用于根據所述測試件的源代碼構建抽象語法樹,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;
第三判斷模塊,用于判斷所述應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;
第六確定模塊,用于當所述應用接口能在所述測試件的抽象語法樹中查找到匹配的應用接口節點時,確定所述測試件覆蓋所述應用接口;
第七確定模塊,用于當所述應用接口未能在所述測試件的抽象語法樹中查找到匹配的應用接口節點時,確定所述測試件未覆蓋所述應用接口。
本申請的有益效果包括:在本申請實施例中,首先獲取一測試件對應服器發布的第一應用接口集合;然后根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;再然后確定所述第一應用接口集合與所述第二應用接口集合的交集;最后,分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。由上可見,在本申請實施例中,可分析一測試件覆蓋其對應服務器所發布應用接口的比例。
附圖說明
為了更清楚地說明本申請實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領域普通技術人員而 言,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本申請實施例提供的遠程調用平臺的示意圖;
圖2為本申請實施例提供的測試件測試應用接口的示意圖;
圖3為本申請實施例提供的測試件覆蓋率的分析方法的一流程圖;
圖4為本申請實施例提供的測試件覆蓋率的分析方法的另一流程圖;
圖5為本申請實施例提供的測試件覆蓋率的分析方法的又一流程圖;
圖6為本申請實施例提供的測試件覆蓋率的分析方法的另一流程圖;
圖7為本申請實施例提供的測試件覆蓋率的分析方法的又一流程圖;
圖8為本申請實施例提供的測試件的抽象語法樹的示意圖;
圖9為本申請實施例提供的測試件覆蓋率的分析方法的另一流程圖;
圖10為本申請實施例提供的測試件覆蓋率的分析方法的又一流程圖;
圖11為本申請實施例提供的測試件覆蓋率的分析方法的另一流程圖;
圖12為本申請實施例提供的測試件覆蓋率的分析裝置的一結構示意圖;
圖13為本申請實施例提供的測試件覆蓋率的分析裝置的又一結構示意圖;
圖14為本申請實施例提供的測試件覆蓋率的分析裝置的另一結構示意圖;
圖15為本申請實施例提供的測試件覆蓋率的分析裝置的又一結構示意圖;
圖16為本申請實施例提供的測試件覆蓋率的分析裝置的另一結構示意圖;
圖17為本申請實施例提供的測試件覆蓋率的分析裝置的又一結構示意圖;
圖18為本申請實施例提供的測試件覆蓋率的分析裝置的另一結構示意圖;
圖19為本申請實施例提供的測試件覆蓋率的分析方法的另一流程圖;
圖20為本申請實施例提供的測試件覆蓋應用接口的分析方法的一流程圖;
圖21為本申請實施例提供的測試件覆蓋率的分析裝置的另一結構示意圖;
圖22為本申請實施例提供的測試件覆蓋應用接口的分析裝置的一結構示意圖。
具體實施方式
本申請實施例提供一種測試件覆蓋率及覆蓋應用接口的分析方法、裝置,以分析一測試件覆蓋其對應服務器所發布應用接口的比例。
首先對本申請實施例的測試件覆蓋率的分析方法進行說明,如圖3所示,所述方法至少包括:
步驟S31:獲取測試件對應服務器發布的第一應用接口集合;
在本申請實施例中,可首先在遠程調用平臺的注冊中心,獲取該測試件對應服務器的應用接口發布數據;然后,在所述應用接口發布數據中,確定所述服務器發布的第一應用接口集合。
在本申請實施例中,所述遠程調用平臺可具體為阿里巴巴內部所研發的HSF(High-Speed Service Framework)平臺;所述測試件可包括多個測試用例,用于測試一服務器所發布的所有應用接口。
步驟S32:根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;
在本申請實施例中,當所述測試件源代碼采用JAVA語言編寫時,所述測試規則至少包括滿足Spring注入的服務,以及,全路徑名稱可在遠程調用平臺的注冊中心查找到。
步驟S33:確定所述第一應用接口集合與所述第二應用接口集合的交集;
在本申請實施例中,例如,第一應用接口集合包括應用接口A、應用接口B、應用接口C以及應用接口D;而第二應用接口集合包括應用接口A、應用接口B以及應用接口C;那么,所述第一應用接口集合與所述第二應用接口集合的交集為應用接口A、應用接口B以及應用接口C;
步驟S34:分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。
在本申請實施例中,仍沿用上述舉例,所述交集中的應用接口分別為應用接口A、應用接口B以及應用接口C,可見,交集中應用接口的數目為3個;而第一應用接口集合中的應用接口分別為應用接口A、應用接口B、應用接口C以及應用接口D,可見,第一應用接口集合中應用接口的數目為4個;所述測試件的應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目=3/4=75%。
在本申請實施例中,首先獲取一測試件對應服器發布的第一應用接口集合;然后根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;再然后確定所述第一應用接口集合與所述第二應用接口集合的交集;最后,分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。由上可見,在本申請實施例中,可分析一測試件覆蓋其對應服務器所發布應用接口的比例。
在本申請的另一可行實施例中,如圖4所示,上述所有實施例中的步驟S33可至少包括:
步驟S41:依次判斷所述第一應用接口集合中的每個應用接口,是否在所述第二應用接口集合中查找到;如果是,執行步驟S42;否則,結束流程。
在本申請實施例中,仍沿用上述舉例,第一應用接口集合包括應用接口A、應用接口B、應用接口C以及應用接口D,第二應用接口集合包括應用接口A、應用接口B以及應用接口C;那么,在本申請實施例中,上述所有實施例中的步驟S41可具體為:依次判斷所述第二應用接口集合中的應用接口A、應用接口B、應用接口C以及應用接口D是否在所述第二應用接口集合中查找到;可見,應用接口A、應用接口B以及應用接口C可在所述第二應用接口集合中查找到,因此,將所述應用接口A、應用接口B以及應用接口C加入至所述交集中。
在本申請具體實施例中,可具體在所述第一應用接口集合中,獲取每個應用接口的名稱;然后判斷所述名稱能否在所述第二應用接口集合中查找到;如果可查找到,將所述名稱所對應的應用接口,加入至所述交集中。
步驟S42:將所述應用接口加入至所述交集。
由上可見,在本申請實施例中,可確定所述交集中的應用接口。
在本申請的又一可行實施例中,如圖5所示,上述所有實施例中的步驟S32可具體包括:
步驟S51:掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
在本申請實施例中,例如一測試件的源代碼用JAVA語言編寫,其具體的程序代碼,如下所示:
當對上述源代碼執行步驟S51時,可得到源代碼中的“HelloWorldService”以及“strMessage”等單詞。
步驟S52:根據所述測試件源代碼的測試規則,依次判斷所述單詞是否標識所述測試件測試的應用接口;如果是,執行步驟S53;否則,結束流程。
在本申請實施例中,當所述源代碼采用JAVA語言編寫,所述測試規則可包括:滿足Spring注入服務,以及,全路徑名稱可在遠程調用平臺的注冊中心查找到。
在本申請實施例中,仍沿用上述舉例,可得到,上述源代碼中的“HelloworldService”單詞滿足Spring注入的服務;此時需進一步查找“HelloworldService”單詞的全路徑名稱“com.alibaba.test.HelloworldService”能否在遠程調用平臺的注冊中心查找到;如果可以查找到,表示“HelloworldService”可標識所述測試件測試的一應用接口;
在本申請具體實施例中,“HelloworldService”可具體為一應用接口的名稱。
步驟S53:將所述單詞所標識的應用接口,加入至所述第二應用接口集合。
由上可見,在本申請實施例中,可確定一測試件可測試的第二應用接口集合。
在本申請的另一可行實施例中,如圖6所示,上述所有實施例中的方法,還可包括:
步驟S61:確定所述第一應用接口集合中每個應用接口相關聯的調用方法。
在本申請實施例中,可在所述測試件對應服務器的應用接口發布數據中,確定所述服務器發布的第一應用接口集合后;再確定所述第一應用接口集合中的每個應用接口下所發布的調用方法,即每個應用接口相關聯的調用方法。
由上可見,在本申請實施例中,可確定第一應用接口集合中每個應用接口相關聯的調用方法。
在本申請的又一可行實施例中,上述所有實施例中的所述測試件能夠測試的第二應 用接口集合是從所述測試件的AST(Abstract Syntax Tree,抽象語法樹)中獲得的;如圖7所示,上述所有實施例中的步驟S32可包括:
步驟S71:掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
在本申請實施例中,仍沿用上述舉例,一測試件的源代碼,如下所示:
同樣,如上述,通過掃描所述源代碼,可得到源代碼中的“HelloWorldService”以及“strMessage”等單詞。
步驟S72:根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;如果是,執行步驟S73;否則,結束流程;
在本申請實施例中,當所述源代碼采用JAVA語言編寫時,所述測試規則可包括:滿足Spring注入服務,以及,全路徑名稱可在遠程調用平臺的注冊中心查找到。可得到,上述源代碼中的“HelloworldService”單詞滿足Spring注入的服務,此時需進一步查找“HelloworldService”單詞的全路徑名稱“com.alibaba.test.HelloworldService”能否在遠程調用平臺的注冊中心查找到;如果可以查找到,表示“HelloworldService”可標識所述測試件測試的一應用接口。
步驟S73:將所述單詞作為所述測試件的應用接口節點;
步驟S74:查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
在本申請實施例中,可具體在所述測試例的源代碼中查找所述應用接口節點相關聯 的調用方法單詞;也可在掃描獲得的多個單詞中,查找所述應用接口相關聯的調用方法單詞。
在本申請實施例中,從上述源代碼中,可以看出,與所述“HelloworldService”單詞相關聯的調用方法單詞為“say hello”。
步驟S75:根據所述應用接口節點和調用方法節點,構建所述測試件的AST。
在本申請實施例中,利用所述應用接口節點““HelloworldService”,以及,調用方法節點“say hello”構建的AST可具體如圖8所示。
由上可見,采用本申請實施例,可構建一測試件的AST。
在本申請的又一可行實施例中,如圖9所示,上述所有實施例中的步驟S33可包括:
步驟S91:依次判斷所述第一應用接口集合中的每個應用接口,是否在所述AST中查找到匹配的應用接口節點;如果是,執行步驟S92;否則,結束流程。
在本申請實施例中,可具體在確定第一應用接口集合中的每個應用接口后,判斷在所述AST中,能否查找到與所述應用接口名稱相一致的應用接口節點;
步驟S92:將所述應用接口加入至所述交集。
由上可見,采用本申請實施例,可確定所述交集中的應用接口。
在本申請的又一可行實施例中,如圖10所示,上述所有實施例中的方法,還包括:
步驟S101:依次判斷所述第一應用接口集合中的每個應用接口相關聯的調用方法,能否在所述AST中查找到匹配的調用方法節點;如果能,執行步驟S102;否則,結束流程;
在本申請實施例中,調用方法與所述調用方法節點相匹配包括:所述調用方法相關聯的應用接口與所述調用方法節點相關聯的應用接口節點相匹配、所述調用方法的名稱、輸入參數個數以及輸入參數類型與所述調用方法節點的名稱、輸入參數個數以及輸入參數類型均一致;
仍沿用上述舉例,從所述源代碼中可以得出:所述調用方法的名稱為“sayHello”,輸入參數類型為“String”,輸入參數值為“strMessage”,輸入參數個數為1。
同樣,結合圖8的AST,可以得出,該AST中的調用方法名稱為“sayHello”輸入參數類型為“String”,輸入參數值為“strMessage”,輸入參數個數為1(即所述AST中String的個數)。
步驟S102:將所述調用方法,作為所述測試能夠測試的調用方法;
步驟S103:分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=能夠測試的調用方法數目/第一應用接口集合中所有應用接口相關聯的調用方法數目。
在本申請實施例中,可具體將第一應用接口集合中所有應用接口相關聯的調用方法加入一集合中;將所述測試件能夠測試的調用方法加入另一集合中;所述測試件的調用方法覆蓋率為兩個集合中應用接口數目的比值。
由上可見,在本申請實施例中,可分析出一測試件覆蓋調用方法的比例。
在本申請的另一可行實施例中,公開了另一種測試件覆蓋率的分析方法,具體如下:
針對一測試件,構建所述測試件的AST,如圖11所示,其具體構建過程如下:
將一測試件的源代碼,輸入至語法分析器;語法分析器從左至右逐個字符的對源代碼進行掃描,產生多個單詞,將多個單詞發送至單詞分析器;所述單詞分析器會依據應用接口測試文法決定所述單詞是否加入AST,如果滿足測試文法,則輸出;如果不滿足,則加入單詞上下文,而滿足文法的單詞,將在所述單詞上下文中查找相關聯的單詞。最后,根據所輸出的單詞,以及單詞上下文中相關聯的單詞,構建AST。
在構建完成所述AST后,分析一測試件覆蓋率的具體過程如下:
步驟A:在遠程調用平臺的注冊中心,查找一測試件對應服務器發布的應用接口發布數據Si,以及每個接口下發布的方法集合Mi;
步驟B:遍歷集合Si,取集合中的每個接口名去構建好的AST中查找該單詞,如果找到則轉到步驟3,否則計算下一個接口;
步驟C:在AST中取該節點對應接口下的所有方法節點加入集合mi,比較Mi和mi中的每個方法的方法名以及方法的輸入參數個數和輸入參數類型,如果一致則轉到步驟4,否則計算下一個方法;
步驟D:將滿足條件的方法和對應接口名加入集合Ci,如果Ci中已存在該接口和方法則不加入;
步驟E:計算該測試件的接口覆蓋率:Ci中的接口數/Si的接口數,該測試件的方法覆蓋率:Ci中的方法數/Si*Mi中所有的方法數。
目前,本申請的測試件覆蓋率的分析方法,已應用于150多個測試件,2000多個應用接口,上萬個調用方法,覆蓋率統計準確性高達98%以上。
在本申請的另一可行實施例中,還公開了一種測試件覆蓋率的分析方法,如圖19 所示,所述方法至少包括:
步驟S191:獲取測試件對應服務器發布的第一應用接口集合;
步驟S192:依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;所述抽象語法樹為預先根據所述測試件的源代碼所構建的,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;如果是,執行步驟S193,否則結束流程;
步驟S193:將所述應用接口作為所述測試件能夠測試的應用接口;
步驟S194:分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目。
在本申請實施例中,首先獲取一測試件對應服器發布的第一應用接口集合;然后依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;如果是,確將所述應用接口作為所述測試件能夠測試的應用接口;最后,分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目;由上可見,在本申請實施例中,可分析一測試件覆蓋其對應服務器所發布應用接口的比例。
在本申請的另一可行實施例中,所述方法還包括:
A1:獲取所述測試件對應服務器發布的第一調用方法集合,所述第一調用方法集合為所述服務器在所述第一應用接口集合中的應用接口下發布的;
B1:依次判斷所述第一調用方法集合中的每個調用方法,能否在所述測試件的抽象語法樹中查找到相匹配的調用方法節點;
C1:如果能,將所述調用方法作為所述測試件能夠測試的調用方法;
D1:分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件能夠測試的調用方法的數目/第一應用接口集合中應用接口的數目。
由上可見,在本申請實施例中,還可分析一測試件覆蓋調用方法的比例。
在本申請的又一可行實施例中,上述所有實施例中的“根據所述測試件的源代碼構建所述測試件的抽象語法樹”,包括:
A2:掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
B2:根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件 測試的應用接口;
C2:如果所述單詞標識所述測試件的應用接口,將所述單詞作為所述測試件的應用接口節點;
D2:查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
E2:根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
由上可見,在本申請實施例中,可構建一測試件的抽象語法樹。
在本申請的又一可行實施例中,上述所有實施例中的方法,還可包括:
如果所述第一應用接口集合中的一應用接口,在所述測試件的抽象語法樹中未能查找到匹配的應用接口節點,確定所述應用接口為所述測試件未能測試的應用接口。
如果所述第一調用方法集合中的一調用方法,在所述測試件的抽象語法樹中未能查找到匹配的調用方法節點,確定所述調用方法為所述測試件未能測試的調用方法。
由上可見,在本申請實施例中,還可確定一測試件未能測試的應用接口或調用方法。
本申請還公開了一種測試件覆蓋應用接口的分析方法,如圖20所示,所述方法至少包括:
步驟S200:獲取測試件對應服務器發布的一應用接口;
步驟S201:判斷所述應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點,所述抽象語法樹為預先根據所述測試的源代碼所構建的,所述AST中至少包括所述測試件能夠測試的應用接口節點;如果能,執行步驟S202,否則,執行步驟S203;
步驟S202:確定所述測試件覆蓋所述應用接口;
步驟S203:確定所述測試件未能覆蓋所述應用接口。
由上可見,在本申請實施例中,可確定一應用接口是否被測試件覆蓋。
在本申請的另一可行實施例中,所述AST中還包括所述測試件能夠測試的調用方法節點,上述所有實施例中的方法還可包括:
A4:獲取測試件對應服務器發布的一調用方法;
B4:判斷所述調用方法,是否能在所述測試件的抽象語法樹中查找到匹配的調用方法節點;
C4:如果所述調用方法能在所述抽象樹中查找到匹配的調用方法節點,確定所述測試件覆蓋所述調用方法;
D4:如果所述調用方法未能在所述抽象樹中查找到匹配的調用方法節點,確定所述測試件未能覆蓋所述調用方法。
由上可見,在本申請實施例中,可確定一調用方法是否被測試件覆蓋。
在本申請的另一可行實施例中,上述所有實施例中的方法,還可包括:確定所述測試件對應服務器發布的所有應用接口;
分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件覆蓋的應用接口的數目/所述服務器發布的所有應用接口的數目;
和/或,
確定所述測試件對應服務器發布的所有調用方法;
分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件覆蓋的調用方法的數目/所述服務器發布的所有調用方法的數目;
由上可見,采用本申請實施例所公開的方法,可確定一測試件的應用接口覆蓋率和/或調用方法覆蓋率。
通過以上的方法實施例的描述,所屬領域的技術人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:只讀存儲器(ROM)、隨機存取存儲器(RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。
與本申請提供的測試件覆蓋率的分析方法實施例相對應,本申請還提供了一種測試件覆蓋率的分析裝置,如圖12所示,至少包括:
第一獲取模塊121,用于獲取測試件對應服務器發布的第一應用接口集合;
第一確定模塊122,用于根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;
第二確定模塊123,用于確定所述第一應用接口集合與所述第二應用接口集合的交集;
第一分析模塊124,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。
在本申請實施例中,第一第一獲取模塊121,用于獲取一測試件對應服器發布的第一應用接口集合;第一確定模塊122,用于根據所述測試件源代碼的測試規則,確定所述測試件能夠測試的第二應用接口集合;第二確定模塊123,用于確定所述第一應用接口集合與所述第二應用接口集合的交集;第一分析模塊124,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=交集中應用接口的數目/第一應用接口集合中應用接口的數目。由上可見,在本申請實施例中,可分析一測試件覆蓋其對應服務器所發布應用接口的比例。
在本申請的另一可行實施例中,如圖13所示,上述所有實施例中的第一確定模塊122可包括:
第一判斷單元131,用于依次判斷所述第一應用接口集合中的每個應用接口,是否在所述第二應用接口集合中查找到;
第一加入單元132,用于當所述應用接口在所述第二應用接口集合中查找到時,將所述應用接口加入至所述交集。
由上可見,在本申請實施例中,可確定第一應用接口集合和第二應用接口集合的交集。
在本申請的又一可行實施例中,如圖14所示,上述所有實施例中的第二確定模塊123可包括:
掃描單元141,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元142,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞是否標識所述測試件測試的應用接口;
第二加入單元143,用于將所述單詞所標識的應用接口,加入至所述第二應用接口集合。
由上可見,采用本申請的裝置,可確定所述測試件能夠測試的第二應用接口集合。
在本申請的另一可行實施例中,如圖15所示,上述所有實施例中的裝置還可包括:
第三確定模塊151,用于確定所述第一應用接口集合中每個應用接口相關聯的調用方法。
由上可見,采用本申請的裝置,可確定第一應用接口集合中每個應用接口相關聯的調用方法。
在本申請的又一可行實施例中,如圖16所示,上述所有實施例中的測試件能夠測試的第二應用接口是從所述測試件的抽象語法樹中獲得的;第二確定模塊123可包括:
掃描單元141,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元142,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;
第二加入單元143,用于當所述單詞標識所述測試件測試的應用接口時,將所述單詞作為所述測試件的應用接口節點;
查找單元144,用于查找所述應用接口節點相關聯的調用方法節點;
構建單元145,用于根據所述應用接口節點和調用方法節點,構建所述測試件的AST。
由上可見,采用本申請的裝置,可構建一測試件的AST。
在本申請的另一可行實施例中,如圖17所示,上述所有實施例中的第一確定模塊122,可包括:
第三判斷單元171,用于依次判斷所述第一應用接口集合中的每個應用接口,是否在所述AST中查找到匹配的調用方法節點;
第三加入單元172,用于當所述應用接口查找到匹配的調用方法節點時,將所述應用接口加入至所述交集。
由上可見,可確定所述交集中的應用接口。
在本申請的又一可行實施例中,如圖18所示,上述所有實施例中的所述裝置還包括:
第四判斷單元181,用于依次判斷所述第一應用接口集合中的每個應用接口相關聯的調用方法,能否在所述AST中查找到匹配的調用方法節點;
第一設定單元182,用于當所述調用方法查找到匹配的調用方法節點時,將所述調用方法,作為所述測試能夠測試的調用方法;
分析單元183,分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=能夠測試的調用方法數目/第一應用接口集合中所有應用接口相關聯的調用方法數目。
由上可見,采用本申請的裝置,還可分析一測試件覆蓋調用方法的比例。
本申請還公開了一種測試件覆蓋率的分析裝置,如圖21所示,所述裝置至少包括:
第一獲取模塊211,用于獲取測試件對應服務器發布的第一應用接口集合;
構建模塊212,用于根據所述測試件的源代碼構建抽象語法樹,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;
第一判斷模塊213,用于依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;
第二設定單元214,用于當一應用接口在所述抽象語法樹中查找到匹配的應用接口節點時,將所述應用接口作為所述測試件能夠測試的應用接口;
第二分析模塊215,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目。
在本申請實施例中,首先獲取一測試件對應服器發布的第一應用接口集合;然后依次判斷所述第一應用接口集合中的每個應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;如果是,確將所述應用接口作為所述測試件能夠測試的應用接口;最后,分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件能夠測試的應用接口數目/第一應用接口集合中應用接口的數目;由上可見,在本申請實施例中,可分析一測試件覆蓋其對應服務器所發布應用接口的比例。
在本申請的另一可行實施例中,所述抽象語法樹中還包括所述測試件能夠測試的調用方法節點,所述裝置還包括:
第二獲取模塊,用于獲取所述測試件對應服務器發布的第一調用方法集合,所述第一調用方法集合為所述服務器在所述第一應用接口集合中的應用接口下發布的;
第二判斷模塊,用于依次判斷所述第一調用方法集合中的每個調用方法,能否在所述測試件的抽象語法樹中查找到相匹配的調用方法節點;
第三設定單元,用于當一調用方法在所述抽象語法樹中查找到匹配的調用方法節點 時,將所述調用方法作為所述測試件能夠測試的調用方法;
第三分析模塊,用于分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件能夠測試的調用方法的數目/第一應用接口集合中應用接口的數目。
由上可見,在本申請實施例中,可分析一測試件的調用方法覆蓋率。
在本申請的又一可行實施例中,所述構建模塊212包括:
掃描單元,用于掃描所述測試件的源代碼,獲得所述源代碼中的多個單詞;
第二判斷單元,用于根據所述測試件源代碼的測試規則,依次判斷所述單詞,是否標識所述測試件測試的應用接口;
第四設定單元,用于當所述單詞標識所述測試件的應用接口時,將所述單詞作為所述測試件的應用接口節點;
查找單元,用于查找所述應用接口節點相關聯的調用方法單詞,且將所述單詞作為調用方法節點;
構建單元,用于根據所述應用接口節點和調用方法節點,構建所述測試件的抽象語法樹。
由上可見,在本申請實施例中,可構建一測試件的AST。
在本申請的又一可行實施例中,所述裝置還包括:
第四確定模塊,用于當所述第一應用接口集合中的一應用接口,在所述測試件的抽象語法樹中未能查找到匹配的應用接口節點時,確定所述應用接口為所述測試件未能測試的應用接口。
第五確定模塊,用于當所述第一調用方法集合中的一調用方法,在所述測試件的抽象語法樹中未能查找到匹配的調用方法節點時,確定所述調用方法為所述測試件未能測試的調用方法。
由上可見,在本申請實施例中,可確定一測試件未能測試的應用接口或調用方法。
本申請還公開了一種測試件覆蓋應用接口的分析裝置,如圖22所示,所述裝置還包括:
第三獲取模塊221,用于獲取測試件對應服務器發布的一應用接口;
構建模塊212,用于根據所述測試件的源代碼構建抽象語法樹,所述抽象語法樹中至少包括所述測試能夠測試的應用接口節點;
第三判斷模塊223,用于判斷所述應用接口,是否能在所述測試件的抽象語法樹中查找到匹配的應用接口節點;
第六確定模塊224,用于當所述應用接口能在所述測試件的抽象語法樹中查找到匹配的應用接口節點時,確定所述測試件覆蓋所述應用接口;
第七確定模塊225,用于當所述應用接口未能在所述測試件的抽象語法樹中查找到匹配的應用接口節點時,確定所述測試件未覆蓋所述應用接口;
在本申請的又一可行實施例中,上述所有實施例中的裝置,還可包括:
第八確定模塊,用于確定所述測試件對應服務器發布的所有應用接口;
第四分析模塊,用于分析所述測試件的應用接口覆蓋率,所述應用接口覆蓋率=所述測試件覆蓋的應用接口的數目/所述服務器發布的所有應用接口的數目;
和/或,
第九確定模塊,用于確定所述測試件對應服務器發布的所有調用方法;
第五分析模塊,用于分析所述測試件的調用方法覆蓋率,所述調用方法覆蓋率=所述測試件覆蓋的調用方法的數目/所述服務器發布的所有調用方法的數目;
由上可見,采用本申請實施例所公開的方法,可確定一測試件的應用接口覆蓋率和/或調用方法覆蓋率。
需要說明的是,在本文中,諸如“第一”和“第二”等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
以上所述僅是本申請的具體實施方式,使本領域技術人員能夠理解或實現本申請。對這些實施例的多種修改對本領域的技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本申請的精神或范圍的情況下,在其它實施例中實現。因此,本申 請將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
以上所述僅是本申請的具體實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本申請的保護范圍。