如何使用MATLAB寫測試(5): MATLAB with Jenkins
myc知道一個成熟的軟體項目通常由如下幾個步驟組成
開發->編譯->測試->提交->新一輪開發->.....n
學過計算機原理的同學們都知道,這種階梯型(瀑布式?)的流程是很耗時的,一種簡單的優化方法就是將可以同步進行的步驟組成pipeline
| 開發1->開發2 ->開發3 ->開發4...n| ->編譯1 ->編譯2 ->編譯3...n| ->測試1 ->測試2...n| ->提交1...n...n/n n
而我們平時在MATLAB中做開發的好處之一,就是省去了編譯的過程,然而跑測試的時候還是需要佔用我們的開發時間。而Jenkins(或者其他CI軟體)就可以解決這個問題。
首先去Jenkins的官網下載軟體,myc用的是linux, 安裝好後會自動啟動Jenkins的服務,或者可以手動啟用
service jenkins startn
localhost:8080n
不知道為什麼myc看到Jenkins的logo後想到了這個……
挺像的吧(並沒有接下來,就是按照官網上的教程安裝Pipeline插件了.
裝好後,我們按照Mathworks的教程創建一個project. New Item ->Freestyle project
給我們的project選個酷炫的名字後,在Add Build step的下拉菜單里選擇Execute Shell
然後在Command裡面用MATLAB自帶的startup option跑你的script, 點擊Apply.在runmytests裡面,我們簡單的調用一個runtests,並且根據其結果來判斷測試是否通過tryn result = runtests(testme);ncatch en getReport(e)n exit(1);nendnnif result.Failedn n fprintf(result.Details.DiagnosticRecord.Report)n exit(1);nendn
在Jenkins中點擊Build Now就可以開始測試啦
MATLAB正常退出(exit(0)),Jenkins的build會顯示藍圈。異常退出(exit(1))會顯示紅圈。可以通過查看Console Output來檢測出錯信息。也可以設置如果出錯給你自己發個email。然而myc覺得測試雖然不用在自己的MATLAB裡面跑了,然而每次想跑測試的時候還是得去Jenkins的網頁里點一下Build Now,還是有點麻煩。他不知道Jenkins還可以監視各種SCM的系統,檢測到新版本時自動跑test。但是他在MATLAB做了點小修改,實現了一鍵跑當前test。
首先他在MATLAB的快捷工具欄里定義了一個新的快捷方式,定義如下
toolsdir = /local/Work/jenkins;np = addpath(toolsdir);n% Get the current File namencurrentFileName = matlab.desktop.editor.getActiveFilename;n% Write the file name into a filenfid = fopen(fullfile(toolsdir,testlist),w);nfprintf(fid,currentFileName);nfclose(fid);n% Trigger the buildndisp(Triggering jenkins build);n!curl http://localhost:8080/job/Run%20my%20test/build?delay=0secnn% restor the pathnpath(p);n
選擇一個合適的圖標
再適當修改runmytest.mtestlistFile = fullfile(toolsdir,testlist);ntest = strsplit(fileread(testlistFile),n);nntryn result = runtests(test);ncatch en getReport(e)n exit(1);nendnnif result.Failedn n fprintf(result.Details.DiagnosticRecord.Report)n exit(1);nendn
噹噹噹噹~完成
每次寫完一個test,myc只需將想跑的test在Editor裡面打開,再輕輕點擊他的快捷方式,就可以繼續開發了
Jenkins的功能很強大,myc也是剛剛接觸這個軟體,相信今後會有更多地收穫,到時候再來分享。
推薦閱讀:
※MATLAB算符重載和量綱分析
※MATLAB Live Editor 簡介
※基於MATLAB/SIMULINK車載吸附儲氫系統的集總參數模型
※MATLAB腳本中的局部函數