zoukankan      html  css  js  c++  java
  • 搭建持续集成单元测试平台(Jenkins+Ant+Java+Junit+SVN)

    一、环境准备

    1. Jenkins:
      1. 到官网下载jenkins.war包:http://jenkins-ci.org/
      2. 安装方法有两种:
        1. 把下载下来的jenkins.war包放到文件夹下,如C:jenkins,然后打开命令行窗口并进到该目录下,执行java -jar jenkens.war命令,当提示:“Jenkins is fully up and running”时,表示启动成功,这时在浏览器窗口输入:http://localhost:8080/ 就可到jenkins的首页。
        2. 如果有tomcat,把jenkins.war包放在tomcat的webapps文件夹下,启动tomcat时会自动启动jenkins,这时通过http://localhost:8080/jenkins就 可以访问jenkins的首页了。
    2. ANT:

          下载ant并配置ANT_HOME,官网:http://ant.apache.org/

      3、Junit:

          下载junit.jar包,没用过的可参考:http://blog.csdn.net/lengyuhong/article/details/5815017

      4、SVN:

          1、用本地硬盘当SVN仓库:http://wenku.baidu.com/view/12b02f6a011ca300a6c39081.html

          2、SVN服务器搭建和使用:http://www.cnblogs.com/xiaobaihome/tag/SVN/ (推荐用此种方法,后面有原因

    二、项目代码:

      环境准备好了之后就可开始写代码、单元测试案例以及ANT用来构建的build.xml文件,这些内容在上一篇ANT task之Junit、JunitReport有讲过,这里不细讲:

    1、Java代码:

    package com.glen.he;
    
    public class ComplexCalculation {
        public int Division(int a,int b){        
            return (a/b);        
        }
    
        public int Multiply(int a,int b){        
            return (a*b);        
        }
    }
    ComplexCalculation.java
    package com.glen.he;
    
    public class SimpleCalculation {
        public int Add(int a,int b){        
            return (a+b);        
        }
    
        public int Subtration(int a,int b){
            return(a-b);
        }
        
    }
    SimpleCalculation.java

    2、单元测试代码:  

    package com.glen.he;
    
    import com.glen.he.ComplexCalculation;
    
    import static org.junit.Assert.*;
    
    import org.junit.Test;
    
    
    public class ComplexCalculationTest {
        
        ComplexCalculation cc = new ComplexCalculation();
        
        @Test
        public void DivisionTest() {
            
            int c = cc.Division(100, 5);
            
            assertEquals(20, c);        
        }
    
        @Test
        public void MultiplyTest() {
            
            int c = cc.Multiply(100, 5);
            
            assertEquals(500, c);        
        }
    }
    ComplexCalculationTest.java
    package com.glen.he;
    
    import com.glen.he.SimpleCalculation;
    
    import static org.junit.Assert.*;
    import org.junit.Test;
    
    public class SimpleCalculationTest {
    
        SimpleCalculation sc = new SimpleCalculation();
        
        @Test
        public void AddTest() {
            
            int c = sc.Add(3, 5);    
            
            assertEquals(8, c);        
        }
        
        @Test
        public void SubtrationTest() {
            
            int c = sc.Subtration(20, 5);    
            
            assertEquals(15, c);        
        }
    }
    SimpleCalculationTest.java

    3、build.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="AntDemo" default="junit" basedir=".">
        <!-- =================================================================== -->
        <!-- 变量设置  -->
        <!-- =================================================================== -->
    
        <!-- 源代码src路径 -->
        <property name="src.path" value="src/java"/>
        <!-- 单元测试代码路径 -->
        <property name="test.path" value="src/test"/>
        <!-- 编译文件class路径 -->
        <property name="build.path" value="build"/>
        <!-- jar包路径 -->
        <property name="dist.path" value="dist"/>
        <!-- lib包路径 -->
        <property name="lib.path" value="lib"/>
        <!-- 生成报告junit4.xml路径 -->
        <property name="report.path" value="report"/>
            
        <!-- =================================================================== -->
        <!-- 设置classpath -->
        <!-- =================================================================== -->
        <path id="compile.path">        
            <fileset dir="${lib.path}">
                <include name="**/*.jar"/>
            </fileset>
            
            <pathelement path="${build.path}"/>
        </path>     
    
        <!-- 初始化 -->
        <target name="init">        
            <mkdir dir="${build.path}"/>
            <mkdir dir="${report.path}"/>
            <mkdir dir="${dist.path}"/>
        </target>
        
        <!-- =================================================================== -->
        <!-- 清除历史编译class -->
        <!-- =================================================================== -->
        <target name="clean" description="clean">        
            <delete dir="${build.path}"/>
            <delete dir="${report.path}"/>
            <delete dir="${dist.path}"/>
        </target>
    
        <!-- =================================================================== -->
        <!-- 编译测试文件,初始化目录 -->
        <!-- =================================================================== -->
        <target name="compile" depends="init">
            <javac srcdir="${src.path}" destdir="${build.path}"  classpathref="compile.path" includeantruntime="true"/>
            <javac srcdir="${test.path}" destdir="${build.path}"  classpathref="compile.path" includeantruntime="true"/>
        </target>      
             
        <!-- =================================================================== -->
        <!-- 执行测试案例 -->
        <!-- =================================================================== -->
        <target name="junit" depends="compile">                
            <junit printsummary="true" fork="true">        
                 <formatter type="xml" usefile="true"/>        
                
                 <classpath refid="compile.path"/>        
                
                <batchtest fork="on" todir="${report.path}" haltonfailure="no">
                    <fileset dir="${build.path}">
                        <include name="**/*Test.class"/>
                    </fileset>
                </batchtest>                 
             </junit>        
         </target>
        
        <target name="junit-report" depends="junit">        
            <!-- 产生单元测试报表文档 -->
            <junitreport todir="${report.path}">
                <fileset dir="${report.path}">
                    <include name="TEST-*.xml" />
                </fileset>
                
                <report format="frames" todir="${report.path}" />
            </junitreport>
        </target>
    
        <target name="make-jar" depends="compile" description="make jar file">
              <jar jarfile="${dist.path}/AntDemo.jar">
                   <fileset dir="${build.path}">
    
                    <!--除去test文件-->
                    <exclude name="**/*Test.class"/>
                   </fileset>
              </jar>
         </target>    
        
    </project>
    build.xml

    三、配置Jenkins:

      PS:Jenkins可以通过master/slave来支持分布式的job运行,本文运行在master,即Jenkins所在的机器。

      1、打开jenkins首页,新建一个job,输入Item名称,选择 构建一个自由风格的软件项目,点击"OK"  

      2、在 源码管理 那里,选择Subversion,在Repository URL后面,输入你的SVN地址。  

          PS:Repository URL使用本地磁盘当仓库这种方法后来我在其它机器上试验时,发现老是报错:svn: E180001: Unable to open an ra_local session to URL。一时没有找到解决办法,大家如果也碰到此问题,可以搭建SVN服务器来管理源代码,我试了,挺好使的。

      3、在 构建 那里也可以有两种做法:

       I、选择Execute Windows batch command,在输入框输入如下命令(这里我选择的是这个方法):

          set path=C:ANT_HOMEApache-Ant-1.7.0in;path  把ant的安装目录添加到path

          ant junit                        执行junit task      

       II、方法I比较麻烦,如果我们设置好了ANT_HOME,可以选择Invoke Ant,然后在targets里面指定我们build.xml里的task name。       

      4、点击保存,然后选择立即构建,执行结果:  

    参考资料:

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

    http://blog.csdn.net/lengyuhong/article/details/5828770

  • 相关阅读:
    Multipatch的Z值单位问题(三维坐标系和三维坐标转换,极坐标)
    ArcGIS城市地下管网纵横断面分析设计与实现&三维分析之DEM横断面 纵断面 剖面
    ArcScene按照属性进行拉伸Extrusion
    Python 字符串长度和字符串截取函数
    ArcGIS中Interpolater Polygon to Multipatch(3D)用法及原理——多边形转面片
    arcgis删除重复的线段
    ArcGIS如何判断直线图层的两个端点的编码是否与点图层的Name字段是否相等?
    使用ArcEngine创建Multipatch图形
    ArcGIS和VB联合开发
    ArcGIS根据属性创建3D对象
  • 原文地址:https://www.cnblogs.com/puresoul/p/4212752.html
Copyright © 2011-2022 走看看