• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    自動化測試框架: Delphi中"包"的妙用

    發布: 2009-6-02 10:11 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 75次 | 進入軟件測試論壇討論

    領測軟件測試網  自動化測試框架的基礎是鉤子,也就是常說的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,都會受到影響。而這也正是我們想要的。

            解決了這個問題后,我們就可以針對已有的系統安裝程序進行測試,而不需要修改任何開發代碼(包括版本構造過程)。滿足這個特性非常好!

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: delphi Delphi DELPHI 框架 妙用 自動化


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>