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


Jenkins +JUnit的更多相关文章
- jenkin插件整理
分类 plugin名称 wiki地址 源码地址 plugin作用范围 备注 Build Reports构建报告(此类插件用来分析构建结果,比果代码检查,测试CASE分析,并将这些结果以报表,趋势图等形 ...
- 负载,性能测试工具-Gatling
前言 Gatling Gatling是一款功能强大的负载测试工具,它为易于使用,高可维护性和高性能而设计. 开箱即用,Gatling由于对HTTP协议的出色支持,使其成为负载测试任何HTTP服务器的首 ...
- 阿里,百度,腾讯招聘 Java 程序员的技术标准
阿里巴巴篇 扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等 具有扎实的Java编程基础,理解IO.多线程等基础框架 熟练使用Linux系统的常用命令及shel ...
- DEVOPS技术实践_12:创建持续集成的管道
持续集成不仅包含了Jenkins或者相关其它的CI工具,也包含了包含代码如何控制,采用的什么分支策略等.不同的组织可能采用不同的类型的策略来完成CI,策略类型和项目的类型的有很大的关系. 一 分支策略 ...
- DEVOPS技术实践_08:声明式管道语法
简介 前面简单的做了管道的实验,看了一下的它的效果 声明式管道是Groovy语法中的一个更简单和结构化的语法.下面主要学习明式管道语法. 一 声明式管道的基本结构 以上节的代码为例 node { de ...
- 搭建持续集成单元测试平台(Jenkins+Ant+Java+Junit+SVN)
一.环境准备 Jenkins: 到官网下载jenkins.war包:http://jenkins-ci.org/ 安装方法有两种: 把下载下来的jenkins.war包放到文件夹下,如C:\jenki ...
- jenkins+maven+junit构建自动化测试,整合junit xml生成直观的测试报告[留存]
在自动化测试过程中,测试报告最能直观的体现测试的价值,之前一直使用maven+junit来构建我的自动化测试,但这样有几个缺点,一是,不能定时构建自动化任务(也许是我没有找到maven有没有提供这样的 ...
- Jenkins配置Publish Junit test result report(转)
参考这篇文章:http://www.yiibai.com/jenkins/jenkins_unit_testing.html 插件:JUnit Plugin
- ruby rspec+jenkins+ci_report持续集成生成junit测试报告
1.加载ci_report gem install ci_reporter_rspec 2.给测试工程编写rakefile require 'ci/reporter/rake/rspec' requi ...
随机推荐
- javascript大神修炼记(5)——OOP思想(封装)
读者朋友们好,前面我们已经讲解了有关javascript的基础,从今天的内容开始,我们就要开始讲有关封装的内容了,这里,我们就一点一点地接触到OOP(面向对象编程)了,如果作为一门语言使用的程序员连O ...
- [解决] python WindowsError: [Error 3]
python 运行出错 WindowsError: [Error ] : 'D:\\\xe7\x81\xab\xe8\xbd\xa6\xe9\x87\x87\xe9\x9b\x86\xe5\x99\x ...
- 洛谷——P1630 求和
P1630 求和 题目描述 求1^b+2^b+……+a^b的和除以10000的余数. 输入输出格式 输入格式: 第一行包含一个正整数N,表示共有N组测试数据: 接下来N行,每行包含两个正整数a和b. ...
- 密码统计分析工具pipal
密码统计分析工具pipal pipal是Kali Linux提供的一款密码统计分析工具.该工具可以对一个密码字典的所有密码进行统计分析.它会统计最常用的密码.最常用的基础词语.密码长度占比.构成字 ...
- WPS设置去广告
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha WPS设置去广告 设置密码和权限
- [UOJ62]怎样跑得更快
以下用等号代替同余 这个式子是$\sum\limits_{j=1}^n(i,j)^{c-d}i^dj^dx_j=b_i$ 令$g(n)=\sum\limits_{e|n}\mu\left(\frac ...
- Vue视图下
3 Vue视图 3.5 样式绑定 class绑定 <p :class='对象'> <p :class="数组"> <p :class="{类 ...
- 解决maven无法下载jar的问题
先去本地仓库查看是否有没有jar包,如果没有并且存在除jar包以外的文件,先将文件删除,重新用maven下载一遍.如果还是不行,就自己下载jar包导入到本地仓库,但是不能手动的添加文件夹和pom.xm ...
- 测试 markdown
PHP 标量类型与返回值类型声明 标量类型声明 默认情况下,所有的PHP文件都处于弱类型校验模式. PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式: 强制模式 (默认) 严格模式 标量类 ...
- JavaScript之引用类型(Array类型)
除了Object类型,Array是ECMAScript中最常用的类型了. 与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据. 而且,ECMAScript数组的大小是可以动态调 ...