jenkins+testng+ant+webdriver持续集成测试

上一篇 / 下一篇  2013-09-18 12:20:10 / 个人分类:Webdriver

摘自:http://hi.baidu.com/janice515/item/3272fe9b99eb4cc8b6253101

我的需求:

1、webdriver代码放在svn上;

2、hudson(jenkins)去执行构建,它从svn上下载代码,并利用testng.xml来执行我设置好的测试套件;

3、接上,将结果放在指定位置;

我的设备:

开发工具:intellij idea

自动化工具:webdriver(selenium2.0)

持续集成工具:hudson(它的插件需要安装seleniumhq,testng,ant)这些都可以下包来安装也可以自动安装。ANT我用的是1.8.3版本

PS:我的svn及hudson都是用我本地机器作为服务器;

另外:在配置这个环境之前,请把你的代码在自己的开发ide上跑一下,以保证代码不会报错

一、hudson插件安装及设置

http://hi.baidu.com/janice515/item/4c468bf7e79e780985d27821 在这儿,可以参考一下;

ps:  ant的安装我选择是自动安装,可以下个包,解压下就可;

安装完selenium后,在jenkins的工作目录下会有一个selenium的服务包;

(图P1.jpg)

注意:在hudson在启动时,你可以观察一下log,是否可以看到会自动启动selenium的服务器包;所以你在构建selenium的时候就可以不用再设置服务器,否则的话,会报错,说端口已被使用;因为已经启动过了。

二、建立hudson job,设置job

建议job的主要事情就是让想hudson去干啥,这里需要设置ant,svn

如图:

   svn存放代码地址    (图p2)


   用ANT执行testng.xml(图p3)

下面这个其实可以不用设置,testng执行完会产生test-output的文件,我们要做的就是去配置这个文件的存放位置。

(图p4)


当你建立完job后,可以试着去构建一下;此时jenkins的工作目录下会有一个workspace;

workspace放着是svn上所下载的内容。如图

(图p5)


三、编写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" />  

这里遇到的问题:

1、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>

这里遇到的问题:

1、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就可以搞定了。



TAG:

 

评分:0

我来说两句

Open Toolbar