自動化測試框架: Delphi中"包"的妙用
自動化測試框架的基礎是鉤子,也就是常說的HOOK機制。但這在實際的應用過程中可能會遇到一些問題。
一旦要做鉤子,那麼就必須獲取函式地址。由於我原先設計的鉤子的目標函式,都是Delphi的內部函式,也就是說,這些函式在編譯之後,很難找到。
當然了,也是有幾種方式可以找到的:
- 將程式碼植入到系統中,編譯的時候可以直接找到。
- 編譯的時候,帶上Map檔案,可以通過Map找到函式地址。測試框架以Dll的方式遠端注入。
- Delphi中的包,可以公佈這些函式的地址
前兩種方式,有一個最大的缺點,在於必須為自動化測試,特別編譯一個版本。雖然說可以接受,但顯然不是最好的方案。第三種方案雖然好,但是前提是系統必須構建在帶包編譯的基礎上。
幸好,我們目前的測試的系統就具備這樣的條件。
那麼,對於自動化測試框架來說,只需要隨意作為一個Dll,並注入到原系統中就可以了。如果原系統提供了注入的擴充套件,那是最好。因為這樣除錯起來很方便。否則就做成遠端注入,不過除錯的時候只能Attach了,很麻煩。
這個時候,只需要將包含自動化測試框架程式碼的測試用例程式碼,對VCL的包,帶包編譯,就可以做到對包中函式的HOOK了。不過這裡面還是有一些細節需要注意的。原先我用的是FastCode的HOOK程式碼,但是在代表編譯的時候就失效了。經過追查,發現代表編譯和非帶包編譯的程式碼不一樣。由於VCL的程式碼,編譯到了包中,那麼本Dll在呼叫包中的方法的時候,加上了跳轉指令。簡單的就是一個call操作。在包裝載的時候,call後的地址會更新。
經過一些探索,發現中國的cnPack(www.cnpack.org)中早就針對這個問題有了解決方案。其實方法也很簡單,就是判斷一下是否存在地址跳轉,如果有的話,就取跳轉後的地址,否則取當前地址。
完成了鉤子後,我們就會發現,在我的測試用例的Dll中,對Bpl中的方法,進行了HOOK。請注意,這裡面有一個選擇,就是在Dll內部HOOK,還是在Bpl內部HOOK。在Dll內部HOOK,只需要修改跳轉地址即可,鉤子的方法很簡單。在Bpl中HOOK,則需要修改函式程式碼的前5個位元組,這種方法複雜,但是使得入口單一,一處修改,全面有效。
自動化測試框架,就是選用的後者的HOOK方法。這樣,我們在Dll中,對Bpl中的方法進行了HOOK,所有帶著此包編譯的DLL或者EXE,都會受到影響。而這也正是我們想要的。
解決了這個問題後,我們就可以針對已有的系統安裝程式進行測試,而不需要修改任何開發程式碼(包括版本構造過程)。滿足這個特性非常好!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1739362
相關文章
- 自動化測試框架框架
- 軟體測試框架——自動化測試框架框架
- 自己動手寫Web自動化測試框架(6):自動化測試框架的規劃Web框架
- 自動化測試框架思路框架
- 自動化測試框架指南框架
- 自動化測試框架的AW模式框架模式
- 測試開發之自動化篇-自動化測試框架設計框架
- 自動化測試框架比較框架
- 自動化測試框架介紹框架
- Selenium自動化測試框架框架
- 軟體測試自動化框架框架
- 介面自動化測試框架 HttpFPT框架HTTP
- 利用tox打造自動自動化測試框架框架
- T框架介紹(自動化測試框架)框架
- Keil中搭建自動化單元測試框架Unity框架Unity
- 四種常用的自動化測試框架框架
- 自動化測試框架:日誌的分析框架
- 介面自動化測試框架搭建的思路框架
- 構建高效的自動化測試框架框架
- Robot Framework自動化測試框架核心指南-如何做好自動化測試平臺框架的設計Framework框架
- UI自動化測試框架Cypress初探UI框架
- Python 自動化測試框架unittestPython框架
- 自動化測試QTP知識框架QT框架
- 自動化測試框架:擁抱Ruby框架
- 常見的自動化測試框架有哪些?框架
- swift - 基於TCL的自動化測試框架Swift框架
- 搭建 WPF 上的 UI 自動化測試框架UI框架
- 自動化測試框架: 設計的重構框架
- 自動化測試系列 —— UI自動化測試UI
- Fastlane + Bugly自動化部署測試包AST
- 軟體自動化測試有什麼優勢?自動化測試框架有哪些?框架
- 自己動手寫Web自動化測試框架Web框架
- 淺談自動化測試框架開發框架
- 介面自動化測試框架搭建總結框架
- HamronyOS 自動化測試框架使用指南框架
- Python自動化測試框架介紹Python框架
- 常用網路介面自動化測試框架框架
- 自動化測試框架Selenium入門框架