jenkins+testng+ant+webdriver持續集成測試

個人需求:html

一、webdriver代碼放在svn上;java

二、hudson(jenkins)去執行構建,它從svn上下載代碼,並利用testng.xml來執行我設置好的測試套件;web

三、接上,將結果放在指定位置;express

個人設備:服務器

開發工具:intellij ideaide

自動化工具:webdriver(selenium2.0)svn

持續集成工具:hudson(它的插件須要安裝seleniumhq,testng,ant)這些均可如下包來安裝也能夠自動安裝。ANT我用的是1.8.3版本工具

PS:個人svn及hudson都是用我本地機器做爲服務器;開發工具

另外:在配置這個環境以前,請把你的代碼在本身的開發ide上跑一下,以保證代碼不會報錯測試

1、hudson插件安裝及設置

http://hi.baidu.com/janice51

5/item/4c468bf7e79e780985d27821 在這兒,能夠參考一下;

ps: ant的安裝我選擇是自動安裝,能夠下個包,解壓下就可;

安裝完selenium後,在jenkins的工做目錄下會有一個selenium的服務包;

注意:在hudson在啓動時,你能夠觀察一下log,是否能夠看到會自動啓動selenium的服務器包;因此你在構建selenium的時候就能夠不用再設置服務器,不然的話,會報錯,說端口已被使用;由於已經啓動過了。

2、創建hudson job,設置job

建議job的主要事情就是讓想hudson去幹啥,這裏須要設置ant,svn

如圖:

svn存放代碼地址
用ANT執行testng.xml

下面這個其實能夠不用設置,testng執行完會產生test-output的文件,咱們要作的就是去配置這個文件的存放位置。

當你創建完job後,能夠試着去構建一下;此時jenkins的工做目錄下會有一個workspace;

workspace放着是svn上所下載的內容。

3、編寫build.xml--重點

當全部須要插件的東西設置好,點擊構建的時候,首先jenkins先去svn下載代碼,並放在workspace;

接着ant就去找workspace的build.xml。若是沒有,會告訴你不存在;有一點很是重要,就是在構建過程當中你能夠去jenkins的控制檯去查看log,究竟是哪一個地方錯了;這是一個很是關鍵的地方,千萬不要忽視它。

build.xml主要作3件事,

一件是編譯java類,

另外一件事執行testng.xml,

最後一件事就是將結果輸出到指定位置

編譯java類:

<target name="compile" depends="init">

<javac srcdir="${src}" destdir="${dest}" classpathref="compile.path" encoding="UTF-8"/>

</target>

srcdir="${src}"java類所在的地方;

destdir="${dest}",編譯後classes所臨時放的地方,爲何說臨時呢,由於在build.xml我把它刪除了,你也能夠不刪除它;

classpathref="compile.path",編譯所要用到一些lib;

encoding="UTF-8",這個要注意設置,若是沒有設置會報錯,如字符與**不符合等;固然首先你的java類的編碼格式須要是UTF-8;

執行testng.xml

<target name="run_tests" depends="compile">

<testng classpathref="compile.path"? failureproperty="test.failed">

<!--xml test suite file -->

<xmlfileset dir="${basedir}">

<include name="testng.xml" />

</xmlfileset>

</testng>

<antcall target="sendReport" />

<fail message="ERROR: test failed!!!!!" if="test.failed" />

</target>

<taskdef resource="testngtasks" classpath="${lib.dir}/testng-6.4.jar" />

這裏遇到的問題:

一、Cause:

The name is undefined. Action:

Check the spelling. Action:

Check that any custom tasks/types have been declared.

Action: Check that any <presetdef>/<macrodef> declarations have taken place.

建立任務沒法成功。

解決辦法:

1)http://ant-contrib.sourceforge.net/ 下載ant-contrib-1.0b3.zip

2)下載完後,解壓,將ant-contrib-1.0b3.jar,放在你安裝的ANT下的lib下就可;


結果輸出到指定位置

<target name="transform">

<xslt in="${basedir}/test-output/testng-results.xml" style="${basedir}/test-output/testng-results.xsl" out="${basedir}/test-output/index1.html" classpathref="compile.path">

<!-- you need to specify the directory here again -->

<param name="testNgXslt.outputDir" expression="${basedir}/test-output/" />

<param name="testNgXslt.showRuntimeTotals" expression="true"/>

<!--<classpath refid="compile.path" />-->

</xslt>

</target>

這裏遇到的問題:

一、testng-results.xsl找不到這個文件

解決辦法:

我去網上下載了一下zip,將解壓後的此文件testng-results.xsl,放在test-output(這個文件testng會自動生成,只要你的testng.xml被成功執行後)

PS:ANT1.7版本以後, processor = "Saxon Liaison"屬性用了以後會報錯,直接刪除就行了。

下面爲整個build.xml的內容;有了上方文,可能看起來會好理解些;


<project name="kuaidi100" default="start_server_and_run_tests" basedir=".">

<property name="src" value="src/com" />

<property name="dest" value="classes" />

<property name = "log4j" value = "config"/>

<property name="lib.dir" value="lib" />


<path id="compile.path">

<fileset dir="${lib.dir}/">

<include name="*.jar" />

<include name="*.zip"/>

</fileset>

<fileset dir="${log4j}/">

<include name="*.properties" />

<include name="*.xml"/>

</fileset>

<pathelement location="${src}"/>

<pathelement location="${dest}" />

<pathelement location="${log4j}"/>

</path>

<target name="init" description = "create classes file">

<!--mkdir means : create file:classes-->

<mkdir dir="${dest}" />

</target>

<target name="compile" depends="init">

<javac srcdir="${src}" destdir="${dest}" classpathref="compile.path" encoding="UTF-8"/>

</target>

<!--run testng ant task-->

<taskdef resource="testngtasks" classpath="${lib.dir}/testng-6.4.jar" />???????

<target name="start_server_and_run_tests" depends="compile" description="start selenium server and run tests">

<parallel>

<antcall target="run_tests">

</antcall>

</parallel>

</target>

 

<target name="run_tests" depends="compile">

<testng classpathref="compile.path"? failureproperty="test.failed">

<!--xml test suite file -->

<xmlfileset dir="${basedir}">

<include name="testng.xml" />

</xmlfileset>

</testng>

<antcall target="sendReport" />

<fail message="ERROR: test failed!!!!!" if="test.failed" />

</target>

<target name="sendReport">

<delete dir="${dest}"/>

<antcall target="transform" />

</target>

<target name="transform">

<xslt in="${basedir}/test-output/testng-results.xml" style="${basedir}/test-output/testng-results.xsl" out="${basedir}/test-output/index1.html" classpathref="compile.path">

<!-- you need to specify the directory here again -->

<param name="testNgXslt.outputDir" expression="${basedir}/test-output/" />

<param name="testNgXslt.showRuntimeTotals" expression="true"/>

<!--<classpath refid="compile.path" />-->

</xslt>

</target>

</project>

這樣個人整個環境就搭成了,寫代碼及調試用了將近一週,而配置實際上只用了一個上午;

但願你也能成功;今後不用打開idea直接用jenkins就能夠搞定了。

本文轉自:http://www.spasvo.com/ceshi/open/kydycsgj/TestNG/20131218103100.html

相關文章
相關標籤/搜索