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目录下,重新构建,成功!

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/8444442.html
Copyright © 2011-2022 走看看