如何使用MATLAB寫測試(5): MATLAB with Jenkins

我們的實習生myc經常在MathWorks官網的blog裡面讀有意思的文章,今天他決定來實踐這篇文章里介紹的Continuous Integration (CI) system -- 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

成功啟動後,我們可以到Jenkins的web interface中進行設置,默認地址為

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.m

testlistFile = 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腳本中的局部函數

TAG:MATLAB | 软件测试 |