天天看點

《Effective Debugging:軟體和系統調試的66個有效方法》一第12條:将複雜的測試場景自動化

本節書摘來自華章出版社《effective debugging:軟體和系統調試的66個有效方法》一書中的第2章,第2.4節,作[希]迪歐米迪斯·斯賓奈裡斯(diomidis spinellis),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

我們可以用腳本對複雜的測試場景進行自動化。自動化的方式有很多種。如果是要對處理流程與檔案進行編排,那麼可以考慮unix shell所提供的大量實用工具(參見第22條)。此外,通過能夠擷取url的curl指令,以及能夠解析json資料的jq指令,我們還可以用shell來測試web服務。對于牽涉api通路及狀态維護等事宜的複雜場景來說,我們可以求助于功能更為豐富的腳本語言,如python、ruby或perl,另外,還有很多系統會内置它們自己的腳本語言,如apache http server、wireshark(一款網絡包分析器)以及vlc(一款媒體播放器)都支援lua程式設計語言。

如果軟體本身不支援腳本語言,但你能夠對它進行修改,那麼可以考慮将該軟體與腳本語言結合起來,通過相關的api來把軟體程式中的函數披露給腳本語言。現在看一個簡單的例子(這是筆者特意構造出來的)。假設我們用c語言實作了一個數學函數庫,并且需要對其進行測試,那麼可以采用程式清單2.1這樣的c語言代碼來加載并運作名為debug.lua的lua程式。這段c語言代碼會把sin、cos及tan函數導出給lua程式,以供其進行測試。

《Effective Debugging:軟體和系統調試的66個有效方法》一第12條:将複雜的測試場景自動化
《Effective Debugging:軟體和系統調試的66個有效方法》一第12條:将複雜的測試場景自動化

在debian linux系統中,可以通過sudo apt-get install lua5.2-dev指令來安裝lua,并通過cc myprog.c-llua5.2-lm來編譯上述c語言程式。(其他作業系統上面的安裝方法,請參閱lua的文檔。)然後,筆者編寫下面這個簡短的lua程式,并通過正弦函數的定義來驗證數學函數庫中的函數所達到的精确程度。

《Effective Debugging:軟體和系統調試的66個有效方法》一第12條:将複雜的測試場景自動化

運作c語言程式之後,該程式會加載lua代碼,并産生下面這樣的輸出:

《Effective Debugging:軟體和系統調試的66個有效方法》一第12條:将複雜的測試場景自動化

在現實工作中,本例所舉的c語言程式相當于你正在開發的大型應用程式,而受測的三角函數,則相當于應用程式裡面有待檢查的那些函數,你可以通過lua程式為其打造相應的測試用例。

要點

通過腳本語言來自動執行複雜的測試用例。

繼續閱讀