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 ...
随机推荐
- OpenStack 认证服务 KeyStone连接和用户管理(五)
一) 创建环境变量链接keyston vim adminrc export OS_USERNAME=admin export OS_PASSWORD=redhat export OS_PROJECT_ ...
- Java-多线程编程(一)
创建多线程 [Thread class]1.继承Thread类,重写run() [Runnable接口]2.实现Runnable接口,重写run() [*Callable接口]3.实现Callable ...
- 洛谷P3038 牧草种植 [树链剖分]
题目传送门 牧草种植 题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirec ...
- win7家庭版如何获得管理员权限?
1.首先,打开你的命令提示符,输入cmd.有一点非常重要,如图所示,我们必须“以管理员的方式打开”.只有以管理员身份打开,那么接下来要敲打的命令才会成功. 2. 打开命令提示符后,在输入框输入net ...
- Spring Security静态资源访问
在使用Spring Security时要求所有请求都需要授权访问,此时会定义过滤规则如下 protected void configure(HttpSecurity http) throws Exce ...
- Codeforces GYM 101968 A. Tree Game
差点自闭,感谢大佬帮忙找bug 题目:https://codeforces.com/gym/101968/problem/A 找树的重心+思维 找到树的重心,如果重心只有一个,以重心为根节点dfs,求 ...
- 【贪心】【堆】Gym - 101128C - Canvas Painting
一些画布,每块有其大小,一开始都是白的,你任意将它们排序,然后一次操作可以选择一段连续的相同颜色的画布,从中任选一个位置,左侧涂上任意一种颜色,右侧涂上另一种.消耗是这一段画布的总的大小.问你要将所有 ...
- android 关于Make sure the plugin is properly configured问题的解决办法
这个问题引发的原因最初的报错是: [2013-10-14 10:01:58 - XXX] The connection to adb is down, and a severe error has o ...
- Codeforces Gym 100269D Dwarf Tower spfa
Dwarf Tower 题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a ...
- mac下使用github 上传代码
提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...