个人需求: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