星期三, 4月 26, 2017

利用 Jenkins持續整合,自動產生Coverage報表

話說同事接了大案子,業主要求必須做單元測試,還要有涵蓋率。這不是很簡單的事嗎?問題就出在他們為了省經費,只用免費的Express版開發,幸好VS2015 Express全加上Unit Test,但是看不到Coverage了。
我自己也很久沒有用MSTest,多半用NUnit,利用VS的套件或TestDriven.Net Personal版就搞定,但是得讓同事方便,就裝台Jenkins Server。起初都還簡單,但是在產出報表時,照著網路上的步驟,怎麼也測不出來。
後來看到小風這篇四年前的文章,想說依樣畫葫蘆總行了吧?沒想到還是卡關試不出來。
原來是微軟把功能閹割精簡,現在沒有CodeCoverage.exe這支程式。好,那我再試Visual Studio 2015/2017在VStest能產出Coverage,沒想到居然不能指定TestResults底下的目錄名稱,*.coverage檔也不能指定檔名,網路上找的招數都沒用,ReportGenerator這招也沒用了。

接著又花了兩個小時去找其他Tool,大都是要改用NUnit或是用OpenCover之類;後來實在受不了,回頭改CoverageConverter.exe,讓它能自動去找TestResults目錄下最新的.coverage,接著就可以照小風的做法,產出Coverage.xml。最後再利用msxsl.exe轉成CoverageResult.xml,連結到Emma Coverage Report。

若想用Jenkins做到相似性檢查,程式碼風格檢查,程式複雜度分析等等高難度的工作,請參考使用Jenkins打造.Net CI Server 系列,我在此沒做,是因為團隊成員無法接受。

結論:若貴公司不是像敝小公司這麼窮,最簡單的方法就是丟到微軟的雲端,要什麼都做得出來。要省錢的話,請努力爬文+自幹。

P.S. 我不知道Test Class踩到什麼雷,用VSTest 14會找不到Unit Test Method,得用VSTest 15才行,所以Jenkins上又更新到VS 2017的Tool。

沒有留言: