zoukankan      html  css  js  c++  java
  • Jenkins +JUnit

    转载:https://www.cnblogs.com/helloIT/p/5761740.html

    1.环境

      windows10 专业版

      Jenkins 2.7

      apache-ant-1.9.6

      JDK1.8.0_20

    2.整体思路

      jdk:支持ant脚本中的编译、测试等target。

      ant脚本:负责java代码的编译、JUnit。

      Jenkins:调度触发ant脚本的执行。

      

    3.开始练兵

      3.1 项目整体结构

    com.java.src下面放源码  MessageUtil.java

    com.java.test目录下放JUnit测试文件 TestMessageUtil.java

    build.xml文件放在根目录下,即位于AntJunit-v1.0目录下,和src位于同一级别。

    3.2 项目源码

    复制代码
     1 package com.java.src;
     2 
     3 public class MessageUtil {
     4     private String message;
     5 
     6        //Constructor
     7        //@param message to be printed
     8        public MessageUtil(String message){
     9           this.message = message; 
    10        }
    11 
    12        // prints the message
    13        public String printMessage(){
    14           System.out.println(message);
    15           return message;
    16        }   
    17 
    18        // add "Hi!" to the message
    19        public String salutationMessage(){
    20           message = "Hi!" + message;
    21           System.out.println(message);
    22           return message;
    23        }   
    24 }
    复制代码
    复制代码
     1 package com.java.test;
     2 
     3 
     4 
     5 
     6 import static org.junit.Assert.*;
     7 
     8 import org.junit.Test;
     9 
    10 import com.java.src.MessageUtil;
    11 
    12 public class TestMessageUtil {
    13     String message = "Robert";   
    14        MessageUtil messageUtil = new MessageUtil(message);
    15 
    16        @Test
    17        public void testPrintMessage() { 
    18           System.out.println("Inside testPrintMessage()");     
    19           assertTrue(message.equals(messageUtil.printMessage()));
    20        }
    21 
    22        @Test
    23        public void testSalutationMessage() {
    24           System.out.println("Inside testSalutationMessage()");
    25           message = "Hi!" + "Robert";
    26           assertTrue(message.equals(messageUtil.salutationMessage()));
    27        }
    28 }
    复制代码
    复制代码
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <project name="test" default="test" basedir=".">
     3  
     4        <!--配置基本属性-->
     5        <property name="src" value="src"/>
     6        <property name="build" value="build"/>
     7        <property name="lib" value="lib" />
     8        <property name="dist" value="dist"/>
     9        <property name="classpath" location="${build}"/>
    10       
    11        <!--配置测试报告的属性-->
    12        <property name="report"   value="report"/>
    13        <property name="report.xml"  value="${report}/junit/xml"/>
    14        <property name="report.html" value="${report}/junit/html"/>
    15  
    16        <!--配置运行时classpath-->
    17        <path id="classpath.run">
    18               <pathelement path="${classpath}"/>
    19               <fileset dir="${lib}">
    20                      <include name="*.jar"/>
    21               </fileset>
    22        </path>
    23  
    24   <!--配置测试时classpath-->
    25        <path id="classpath.test">
    26               <path refid="classpath.run"/>
    27               <path location="${dist}/lib/test-${DSTAMP}.jar"/>
    28        </path>
    29       
    30        <!--任务初始化-->
    31        <target name="init" >
    32               <tstamp/>
    33               <delete dir="${build}"/>
    34               <delete dir="${report}"/>
    35               <delete dir="${dist}"/>
    36               <delete file="${lib}/test-*.jar"/>
    37               <mkdir dir="${build}"/>
    38               <mkdir dir="${lib}"/>
    39               <mkdir dir="${dist}"/>
    40               <mkdir dir="${report}"/>
    41        </target>
    42       
    43        <!--配置编译任务-->
    44        <target name="compile" depends="init">
    45               <javac srcdir="${src}" destdir="${build}">
    46               <classpath refid="classpath.run" />
    47               </javac>
    48        </target>
    49            
    50        <!--配置运行任务-->
    51        <target name="run" depends="compile, dist">
    52          <java classname="com.test.TestCalculator">
    53              <classpath>
    54                      <path refid="classpath.run"/>
    55               </classpath>
    56          </java>
    57        </target>
    58       
    59        <!--配置JUnit测试,打印测试结果-->
    60        <target name="test" depends="compile, dist">
    61               <mkdir dir="${report.xml}"/>
    62               <mkdir dir="${report.html}"/>
    63               <junit printsummary="yes" haltonfailure="no">
    64                      <classpath refid="classpath.run"/>
    65                      <formatter type="xml"/>
    66                      <batchtest fork="yes" todir="${report.xml}">
    67                             <fileset dir="${src}" includes="**/Test*.java"/>
    68                      </batchtest>
    69               </junit>
    70               <junitreport todir="${report.html}">
    71                      <fileset dir="${report.xml}">
    72                             <include name="*.xml"/>
    73                      </fileset>
    74                      <report format="frames" todir="${report.html}"/>
    75               </junitreport>
    76        </target>
    77  
    78 </project>
    复制代码

    3.3 必要的环境配置

    junit-4.10.jar 复制到%ANT_HOME%lib目录下。例如,我需复制到D:SoftInstallapache-ant-1.9.6lib下。

    这一步很有必要,否则正式运行会报错。

      3.4 配置Jenkins

      新建一个自由风格的job,名字为AntJunit-V1.0。

      源码管理:选择No。利用SVN或git对源码进行管理时,Jenkins总是会把代码拷贝一份到自己的工作空间,然后对备份进行操作,因此本demo忽略源码管理,直接将代码拷贝到Jenkins工作区。

      增加构建步骤:选择Invoke Ant。Targets的名字test来自build.xml中的target名字test(test在build.xml中也是默认执行的target)。

      另外,这里的构建可以用windows脚本执行。二者效果完全一样。

       构建后操作:选择Publish JUnit test result report。测试报告xml填:report/junit/html/TESTS-TestSuites.xml  。

        

      点击「保存」。

    4.构建结果

       点击中间的「最新测试结果」,查看详情:

      

    5.总结

     ①完全可以在ant环境下调试好结果再放到jenkins工作空间。因为起实质作用的是ant,jenkins仅仅是调度。ant和jenkins天然有着密切的联系。

     ②这个demo中ant脚本模拟的是手动编译、测试java代码的过程。ant典型应用还有对Java程序的打包、部署等。当然,ant还有更多应用,有兴趣的童鞋可以搜索ant学习。

    6.致谢

    本文参考了参考一 和 参考二 ,在此对原作者表示感谢。 

    7.在ubuntu14.04下遇到的问题(2016.8.16,jenkins版本为2.7.2)

      上述作业在windows下没有任何问题。但是移植到ubuntu14.04虽然能够构建,但查看详情发现报错:Error Message:org/hamcrest/SelfDescribing 。

      原来是由于Junit4.10.jar中不包含hamcrest-core-1.3.jar(参考这里)。

      将hamcrest-core-1.3.jar添加到${JENKINS_HOME}/workspace/AntJunit/lib目录下,重新构建,成功!

  • 相关阅读:
    课堂笔记-------字符串类型string------练习
    网络设计中需要考虑的时延latency差异
    ceph calamari 监控系统安装 on ubuntu 14.04
    Ceph性能优化总结(v0.94)
    创意点子
    “CEPH浅析”系列之八——小结
    “Ceph浅析”系列之七——关于Ceph的若干想法
    “CEPH浅析”系列之六——CEPH与OPENSTACK
    “Ceph浅析”系列之五——Ceph的工作原理及流程
    Ceph浅析”系列之四——Ceph的结构
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/8444442.html
Copyright © 2011-2022 走看看