Hudson是一個比較流行都持續(xù)集成工具。用Hudson來驅(qū)動自動化測試的好處有以下這些:
· 類似crontab的自動任務(wù)管理
· 豐富的插件支持
· 支持分布式任務(wù)
· 容易部署
其實整個過程很簡單,把Hudson跑起來,新建一個Job,配置一下Ant任務(wù)好了。這里只分享一下我遇到的一些坑。
是否使用Source Code Management獲取新的測試代碼?
如果每次測試都拉新的代碼,好處是保證測試代碼是新的。但是也會帶來一些問題,測試代碼本身也是代碼,怎么保證新的測試代碼沒有問題呢?我個人認為,如果團隊比較小,可以直接拉新的代碼;如果團隊大,需要控制。
如果不用SCM插件,怎么樣更新自動化測試代碼?
我想到的一種辦法是,在Hudson里面建立一個構(gòu)建自動化測試代碼的Job,這個Job的產(chǎn)物是自動化測試的包,譬如說如果用WebDriver或者Selenium,把測試代碼build成一個或者若干個jar包,然后建立一個latest的軟鏈接指向新的jar包;在運行自動化測試的Job里面做好配置,運行測試的目標(biāo)jar包指向latest.jarOK了。
TestNG的結(jié)果如何跟Hudson整合
Hudson插件很多,可以用testng-plugin來完成這個任務(wù)。配置比較簡單,在Ant腳本里面配置好TestNG的result output,然后在Hudson里面把測試報告的模式填好。我直接填的TestNG的默認結(jié)果文件“testng-results.xml”。build.xml節(jié)點配置的一個例子:
<target name="live_check" depends="compile,remove_last_result">
<testng outputdir="${testng.output.dir}" classpathref="classes" delegateCommandSystemProperties="true" useDefaultListeners="true">
<xmlfileset dir="${base.dir}" includes="${live.check.config}"/>
</testng>
<move file="${testng.output.dir}/${test.result.file}" todir="${ci.workspace}"/>
</target>
首先在testng節(jié)點指定outputdir屬性,然后測試運行完成以后把結(jié)果文件移動到Hudson的workspace
怎么樣把Ant的參數(shù)傳遞給TestNG
很多時候我們會希望通過ant把一些參數(shù)傳遞給testng.xml,從而使得測試更加靈活。例如傳遞不用的base_url可以測試不同的站點。還有配置不同的瀏覽器。雖然之前這篇文章已經(jīng)介紹了如何把Ant的參數(shù)傳遞給TestNG,但是那個方法有個缺點,如果在測試方法A里面調(diào)用了測試方法B,測試方法B是不能拿到Ant傳進去的參數(shù)的。我的辦法比較土,是首先寫好一個testng_base.xml的模板文件,把一些可能經(jīng)常改變的數(shù)值替換成參數(shù),然后用Ant的replace任務(wù)做字符串替換。
<target name="replace_testng_xml">
<replace file="${base.dir}/${testng.file}" token="@@base_url@@" value="${base_url}"/>
<replace file="${base.dir}/${testng.file}" token="@@browser@@" value="${webdriver.browser}"/>
</target>