搭建持续集成单元测试平台(Jenkins+Ant+Java+Junit+SVN)

简介: 一、环境准备 Jenkins:到官网下载jenkins.war包:http://jenkins-ci.org/ 安装方法有两种:把下载下来的jenkins.war包放到文件夹下,如C:\jenkins,然后打开命令行窗口并进到该目录下,执行java -jar jenkens.war命令,当提示:“Jenkins is fully up and running”时,表示启动成功,这时在浏览器窗口输入:http://localhost:8080/ 就可到jenkins的首页。

一、环境准备

  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_HOME\Apache-Ant-1.7.0\bin;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

 

目录
相关文章
|
5天前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模版),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、事件绑定与动态交互等功能,广泛适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业加速数字化转型。
|
10天前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模版),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、事件绑定与动态交互等功能,广泛适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业加速数字化转型。
完全开源!国内首个完全开源JAVA企业级低代码平台
|
3月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
3月前
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
|
3月前
|
消息中间件 Java Kafka
"Kafka快速上手:从环境搭建到Java Producer与Consumer实战,轻松掌握分布式流处理平台"
【8月更文挑战第10天】Apache Kafka作为分布式流处理平台的领头羊,凭借其高吞吐量、可扩展性和容错性,在大数据处理、实时日志收集及消息队列领域表现卓越。初学者需掌握Kafka基本概念与操作。Kafka的核心组件包括Producer(生产者)、Broker(服务器)和Consumer(消费者)。Producer发送消息到Topic,Broker负责存储与转发,Consumer则读取这些消息。首先确保已安装Java和Kafka,并启动服务。接着可通过命令行创建Topic,并使用提供的Java API实现Producer发送消息和Consumer读取消息的功能。
69 8
|
3月前
|
Java 测试技术 API
Java 新手入门:Java单元测试利器,Mock详解
Java 新手入门:Java单元测试利器,Mock详解
184 1
|
3月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
74 3
|
3月前
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
129 2
|
3月前
|
NoSQL Java Redis
Spring Boot集成Redis全攻略:高效数据存取,打造性能飞跃的Java微服务应用!
【8月更文挑战第3天】Spring Boot是备受欢迎的微服务框架,以其快速开发与轻量特性著称。结合高性能键值数据库Redis,可显著增强应用性能。集成步骤包括:添加`spring-boot-starter-data-redis`依赖,配置Redis服务器参数,注入`RedisTemplate`或`StringRedisTemplate`进行数据操作。这种集成方案适用于缓存、高并发等场景,有效提升数据处理效率。
482 2

热门文章

最新文章