本技術屬于計算機,具體涉及一種代碼測試方法、代碼測試裝置、計算機可讀介質、電子設備以及計算機程序產品。
背景技術:
1、流量錄制回放是一種常用的后臺測試技術,通過錄制線上流量,在回放時使用相同的輸入參數,比較線上環境和測試環境的輸出參數,從而判斷測試環境的接口代碼邏輯是否異常。但是,在錄制線上流量的過程中,往往會錄制很多與測試需求無關的噪聲流量,需要人工篩除噪聲或者修改原始代碼,因而存在測試效率低的問題。
技術實現思路
1、本技術提供一種代碼測試方法、代碼測試裝置、計算機可讀介質、電子設備以及計算機程序產品,目的在于提高代碼測試效率。
2、本技術的其他特性和優點將通過下面的詳細描述變得顯然,或部分地通過本技術的實踐而習得。
3、根據本技術實施例的一個方面,提供一種代碼測試方法,該代碼測試方法包括:獲取與待測試的源代碼相對應的替換函數列表,所述替換函數列表用于保存對所述源代碼中的原始函數進行替換調用的包裝函數;根據所述替換函數列表以及具有錄制回放功能的庫函數生成規則文件,所述規則文件用于定義所述源代碼的測試項目的構建規則;根據所述規則文件對所述源代碼進行編譯處理,得到待測試的目標代碼;當編譯至所述源代碼中的原始函數時,將所述原始函數替換為調用所述包裝函數;當編譯至所述源代碼中的庫函數時,將所述庫函數的調用地址替換為所述具有錄制回放功能的庫函數;對所述目標代碼執行錄制回放測試。
4、根據本技術實施例的一個方面,提供一種代碼測試裝置,該代碼測試裝置包括:
5、獲取模塊,被配置為獲取與待測試的源代碼相對應的替換函數列表,所述替換函數列表用于保存對所述源代碼中的原始函數進行替換調用的包裝函數;
6、生成模塊,被配置為根據所述替換函數列表以及具有錄制回放功能的庫函數生成規則文件,所述規則文件用于定義所述源代碼的測試項目的構建規則;
7、編譯模塊,被配置為根據所述規則文件對所述源代碼進行編譯處理,得到待測試的目標代碼;當編譯至所述源代碼中的原始函數時,將所述原始函數替換為調用所述包裝函數;當編譯至所述源代碼中的庫函數時,將所述庫函數的調用地址替換為所述具有錄制回放功能的庫函數;
8、測試模塊,被配置為對所述目標代碼執行錄制回放測試。
9、在本技術的一些實施例中,基于以上技術方案,所述代碼測試裝置還包括:
10、函數庫獲取模塊,被配置為根據所述源代碼的代碼語言獲取供所述源代碼調用的函數庫;
11、庫函數篩選模塊,被配置為從所述函數庫中篩選能夠在錄制回放測試中引入噪聲的原始庫函數;
12、庫函數編寫模塊,被配置為重新編寫所述原始庫函數,得到具有錄制回放功能的庫函數。
13、在本技術的一些實施例中,基于以上技術方案,所述庫函數編寫模塊還被配置為:創建與所述原始庫函數相對應的代理函數;向所述代理函數中寫入錄制邏輯和回放邏輯,得到具有錄制回放功能的庫函數;所述錄制邏輯用于在錄制模式下記錄所述原始庫函數的輸出參數;所述回放邏輯用于在回放模式下讀取所述錄制模式下記錄的所述原始庫函數的輸出參數,并用于在非回放模式下調用所述原始庫函數。
14、在本技術的一些實施例中,基于以上技術方案,能夠在錄制回放測試中引入噪聲的原始庫函數包括輸出參數具有時間相關性的函數或者輸出參數具有隨機性的函數。
15、在本技術的一些實施例中,基于以上技術方案,所述代碼測試裝置還包括:
16、函數寫入模塊,被配置為將所述具有錄制回放功能的庫函數與所述原始庫函數進行關聯處理后,寫入所述替換函數列表。
17、在本技術的一些實施例中,基于以上技術方案,所述獲取模塊包括:
18、解析模塊,被配置為解析待測試的源代碼得到所述源代碼的抽象語法樹;
19、遍歷模塊,被配置為遍歷所述抽象語法樹,得到指定類型的原始函數,所述指定類型的原始函數是需要在錄制回放測試中進行替換調用的函數;
20、創建模塊,被配置為根據所述指定類型的原始函數,創建與待測試的源代碼相對應的替換函數列表。
21、在本技術的一些實施例中,基于以上技術方案,所述指定類型的原始函數包括內聯函數、靜態函數或者類成員函數中的一種或多種。
22、在本技術的一些實施例中,基于以上技術方案,所述替換函數列表包括內聯函數列表、靜態函數列表或者類成員函數列表;所述創建模塊包括:
23、第一創建模塊,被配置為當所述指定類型的原始函數為內聯函數時,將所述內聯函數的函數名寫入所述內聯函數列表;
24、第二創建模塊,被配置為當所述指定類型的原始函數為靜態函數時,創建與所述靜態函數具有相同語法信息的非靜態函數,并將所述靜態函數和所述非靜態函數的映射關系寫入所述靜態函數列表;
25、第三創建模塊,被配置為當所述指定類型的原始函數為類成員函數時,創建與所述類成員函數具有重定向關系的包裝函數和真實函數,并將所述包裝函數和所述真實函數的映射關系寫入所述類成員函數列表。
26、在本技術的一些實施例中,基于以上技術方案,第二創建模塊進一步被配置為:獲取所述靜態函數的語法信息,所述語法信息包括文件名、行號以及函數調用信息;根據所述文件名和行號為所述靜態函數重命名,并移除所述靜態函數中表示靜態函數定義的關鍵字,得到非靜態函數;根據所述函數調用信息將調用所述靜態函數的函數修改為調用所述非靜態函數。
27、在本技術的一些實施例中,基于以上技術方案,第三創建模塊進一步被配置為:獲取從所述待測試的源代碼中解析得到的符號表;根據所述符號表查找與所述類成員函數相匹配的修飾后函數;創建與所述修飾后函數相對應的包裝函數和真實函數,將所述類成員函數重定向至所述包裝函數,并將所述真實函數定向至所述類成員函數。
28、在本技術的一些實施例中,基于以上技術方案,第三創建模塊進一步被配置為:對所述符號表進行解碼處理,得到與類成員函數的修飾后名稱相對應的解碼名稱;查找與所述類成員函數的原始名稱相同的解碼名稱,并根據與所述解碼名稱對應的修飾后名稱確定與所述類成員函數相匹配的修飾后函數。
29、在本技術的一些實施例中,基于以上技術方案,所述編譯模塊包括:
30、參數獲取模塊,被配置為獲取向所述規則文件中添加或者更新的編譯參數,所述編譯參數包括內聯函數、靜態函數或者類成員函數中的一種或多種;
31、第一編譯模塊,被配置為當所述編譯參數為所述內聯函數時,跳過對所述內聯函數的代碼嵌入操作;
32、第二編譯模塊,被配置為當所述編譯參數為所述靜態函數時,將所述靜態函數替換為與其對應的非靜態函數;
33、第三編譯模塊,被配置為當所述編譯參數為所述類成員函數時,將所述類成員函數替換為與其對應的包裝函數。
34、根據本技術實施例的一個方面,提供一種計算機可讀介質,其上存儲有計算機程序,該計算機程序被處理器執行時實現如以上技術方案中的代碼測試方法。
35、根據本技術實施例的一個方面,提供一種電子設備,該電子設備包括:處理器;以及存儲器,用于存儲所述處理器的可執行指令;其中,所述處理器被配置為執行所述可執行指令來實現如以上技術方案中的代碼測試方法。
36、根據本技術實施例的一個方面,提供一種計算機程序產品,包括計算機程序,所述計算機程序被處理器執行時實現如以上技術方案中的代碼測試方法。
37、在本技術實施例提供的技術方案中,通過獲取與待測試的源代碼相對應的替換函數列表,可以根據替換函數列表以及具有錄制回放功能的庫函數生成規則文件,進一步根據規則文件對源代碼進行編譯處理得到待測試的目標代碼,從而能夠對目標代碼執行錄制回放測試。本技術實施例利用替換函數列表將源代碼中的庫函數和業務函數改為替換調用包裝函數,克服了在錄制回放測試中容易引入噪聲流量的問題,因而提高了測試效率。