1. DLL接口測試方法介紹
在最近測試的項目中,系統給業務端提供DLL文件,業務端通過DLL文件中的C++接口實現系統功能,這就需要對DLL中的C++接口進行詳細功能測試。 本文主要介紹項目測試中使用的DLL接口測試方法及基於AutoIT實現的DLL接口自動化測試方法。
1.1 VS2005
通過VS2005可以直接加載DLL文件中的C++接口,模擬業務端調用,傳遞一些參數值從而驗證接口返回碼等功能是否正確接口。這部分代碼,類似與白盒測試中編寫的驅動模塊,需要有一定的C++編程基礎。 項目初期就是請開發人員按照這種方法編寫demo進行測試的,功能相對比較簡單,可以正常完成接口的功能測試,但同時存在測試執行相對復雜、效率不高的問題(下圖)。
1.2 Loadrunner
中間也調研了Loadrunner加載DLL文件C++接口的方法,如下:
- 新建Loadrunner腳本,協議選擇C Vuser
- 定義接口中的參數,並進行賦值
- 使用lr_load_dll函數加載DLL
- 根據接口文檔中的函數說明,即可正常調用DLL接口
- 將接口輸入參數進行參數化,可以批量調用接口進行測試
- 定義一個參數保存預期的結果,調用接口得到接口返回值與其比較,判斷成功與失敗。如下圖定義的預期結果參數IDExRes與IDRes比較:
- 定義循環的次數,可一次執行多次測試,實現自動化測試,通過日志即可查看測試結果
1.3 AutoIT
AutoIT調用DLL接口方法基本與Loadrunner相似:
- 首先使用DllOpen函數,加載DLL
- 之后定義接口中的參數,並進行賦值
- 然后使用DllCall函數,調用DLL中的接口
- 最后通過DllClose關閉已打開的DLL文件
2. AutoIT DLL接口自動化測試方案
使用AutoIT,通過操作Excel用例,讀取表格中的參數輸入值和期望結果,通過與調用接口得到返回碼進行比較,可以完成DLL接口自動化測試。
2.1 基本邏輯
2.2 配置文件設計
config.ini配置文件,主要配置了版本號、接口名稱、參數個數及類型等信息,示例文件如下:
[Version] Version=Build#1032 [DFSInitDll] DFSInitDll =5 defName=const char* nodeIP=const char* nodePort=int nodeName=const char* nodePwd=const char*
2.3 測試用例設計
測試用例表格是根據平台測試組通用的測試用例模版修改而來,主要是增加了詳細的輸入參數列,工具執行時根據讀取這些數據作為接口的輸入參數。
2.4 代碼設計
AuotIT腳本簡單來說,可以說是一個個函數堆起來的。本腳本里使用了一些自定義函數,如下:
代碼編寫整體邏輯與設計一致,即首先從配置文件獲取相關配置,讀取Excel獲取輸入數據,調用DLL接口,保存結果至Excel中。
2.5 存在的不足
使用AutoIT編寫接口自動化腳本過程中發現仍然存在一些局限及不足之處:
- 對於異常或存在一定的邏輯關系的用例,很難開發做到可以統一處理,所以工具對於接口用例暫時無法做到100%覆蓋
- AutoIT打開非文本文件讀取內容后,調用接口傳輸的16進制數據轉化成了文本,上傳后文件內容不正確(暫時只能實現txt文本文件的上傳)
3. 總結
使用了三種方法測試DLL接口,對比總結如下:
- 使用VS 2005直接測試接口,適合在時間比較緊的情況下進行使用。該方法建議由開發人員編寫相應的驅動代碼,測試人員進行執行。測試使用易用性及效率一般
- 使用Loadrunner,測試人員可以快速便捷的根據接口設計文檔,調用相關接口(類似WebService接口測試工具Webservice Studio),在對相應的參數進行參數化后可以進行"半自動化測試",節省不少時間
- 使用AutoIT編寫自動化測試工具,功能比較完善,可以進行完整的自動化測試。但工具編寫相對繁瑣與耗時,實際對測試工作效率提升有限