用 Shell 快速写一个嵌入式测试框架
大家好,轉發我朋友老吳的一篇文章,我們在做測試框架的時候用的是python,但是一些理論基礎和用shell是一樣的,在這里,語言并不是關鍵。希望對大家有幫助。
哈嘍,我是老吳。
作為一個嵌入式底層碼農,
在項目初期,我經常需要測試各種 Linux 單板的穩定性和性能。
例如:
用 memtester 測試內存的穩定性。
用 glmark-es2 測試 GPU 的性能。
用 iperf 測試網卡設備的帶寬。
等一大堆、雜七雜八的測試項目。
這些測試都不難,但是比較碎片化,一般都是基于簡單的測試腳本。
為了節省我的時間和精力,我寫了一個簡單的測試框架。
它的服務對象是像我這樣的嵌入式底層開發人員。
我對它的要求是:
能擴展以適應不同的單板;
能自由地組合測試項;
能對每個測試項進行單獨地定制;
能復用和積累各種測試腳本;
下面是實現這個測試框架的關鍵點。
查找表
declare?-gA?fct_table=(['Test?1']="do_test1"['Test?2']="do_test2"['Test?3']="do_test3"['Test?4']="do_empty_handler"['Test?5']="do_empty_handler"['Test6']="do_empty_handler")declare?-gA?res_table=(['Test?1']="N/A"['Test?2']="N/A"['Test?3']="N/A"['Test?4']="N/A"['Test?5']="N/A"['Test?6']="N/A")這里通過 Shell 的關聯數組定義了兩個查找表。
fct_table 是測試函數表。
res_table 是測試結果表。
測試函數
function?do_empty_handler() {echo?"Test?Not?Implemented:?$1"return?2}function?do_test1 {echo?"Test?1"ret=0return?$ret}function?do_test2 {echo?"Test?2"ret=0return?$ret }function?do_test3 {echo?"Test?1"ret=0return?$ret}這里的每一個 test handler 函數就代表一個測試項目。
只要將 memetester、iperf 等具體地測試命令填充進行就可以執行真實的測試了。
調度代碼
function?validate_system() {for?i?in?"${!fct_table[@]}";?doecho?"Test?:?$i"${fct_table[$i]}res=$?__update_result_table?$res?"$i"?res_tabledone}#?Main?entry?point validate_system print_result遍歷 fct_table,取出每一個 test handler 并調用,然后用 __update_result_table() 將測試的結果填充到 res_table 中。
到這里,這個測試框架就完成。
運行效果
wwd@think:~/Desktop$?./board_test.sh? Test?:?Test?1 Test?1 >>>>>?SUCCESS Test?:?Test?3 Test?1 >>>>>?SUCCESS Test?:?Test?2 Test?2 >>>>>?SUCCESS Test?:?Test?5 Test?Not?Implemented:? >>>>>?N/A Test?:?Test?4 Test?Not?Implemented:? >>>>>?N/A Test?:?Test6 Test?Not?Implemented:? >>>>>?N/A TEST?RESULTS: ============ Test:?Test?1?Result:?PASS Test:?Test?3?Result:?PASS Test:?Test?2?Result:?PASS Test:?Test?5?Result:?N/A Test:?Test?4?Result:?N/A Test:?Test?6?Result:?N/A Test:?Test6?Result:?N/A總結
這個簡單的測試框架非常輕巧且易于擴展,但功能強大。
在我的實際工作中被大量地使用,并且進行了一些必要的擴展,實實在在地降低了我的工作負擔。
它完全可以作為第一次“冒煙測試”集成到更大的自動化系統中。
—— The End ——
總結
以上是生活随笔為你收集整理的用 Shell 快速写一个嵌入式测试框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跟我领导吃饭
- 下一篇: 学习C++,知识点太多记不住怎么办?