Jenkins +JUnit

轉載:https://www.cnblogs.com/helloIT/p/5761740.html

1.環境

  windows10 專業版html

  Jenkins 2.7java

  apache-ant-1.9.6git

  JDK1.8.0_20apache

2.總體思路

  jdk:支持ant腳本中的編譯、測試等target。ubuntu

  ant腳本:負責java代碼的編譯、JUnit。windows

  Jenkins:調度觸發ant腳本的執行。yii

  

 

3.開始練兵

  3.1 項目總體結構ide

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:\SoftInstall\apache-ant-1.9.6\lib下。

這一步頗有必要,不然正式運行會報錯。

  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目錄下,從新構建,成功!

相關文章
相關標籤/搜索