请教jenkins 生成测试报告中配置emma插件报告生成路径问题

请教jenkins中配置emma插件报告生成路径问题_百度知道
请教jenkins中配置emma插件报告生成路径问题
提问者采纳
通过本地命令提示符操作mvn emma:emma时,每个子目录中的target下均能产生报告文件。
网络工程师
其他类似问题
为您推荐:
emma的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Jenkins自动化集成操作指南_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Jenkins自动化集成操作指南
上传于||文档简介
&&J​e​n​k​i​n​s​自​动​化​集​成​操​作​指​南
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩26页未读,继续阅读
你可能喜欢jenkins+ant+svn持续集成环境搭建
1.Jenkins介绍
  Jenkins是一款持续集成工具,通过和maven或者ant等工具整合,可以形成一个自动化持续集成的平台,达到一键更新发布项目的作用。
2.Jenkins安装
2.1安装包方式搭建
官网&获取需要安装包,例如centos系统,当前获取的最新版jenkins-1.564-1.1.noarch.rpm
将安装包上传到服务器,在存放目录执行
  rpm -ivh jenkins-1.564-1.1.noarch.rpm
安装完成后,启动jenkins
  Service Jenkins start
打开浏览器访问
  注:jenkins的启动需要jdk的支持,需要确定服务器上是否已安装jdk
  默认的端口是8080,如果需要修改可编辑/etc/sysconfig/jenkins文件进行配置
2.2war包方式搭建
官网获取最新war包
将war包上传至服务器的tomcat目录的webapps下
启动tomcat进行war包解压,解压完成后,重启tomcat
如果tomcat端口是8080,打开浏览器访问http://serviceIP:8080/
  ant是基于java的一款构建工具,通过配置build.xml,让项目可以进行编译,部署,打包。
从官网包。
上传至服务器目录,解压tar包即可
  tar &xvf & apache-ant-1.9.2-bin.tar
  注:使用javacc编译存在一些条件无法编译的情况,可以使用eclipse的编译器jdt进行编译。找到
  jdtCompilerAdapter.jar
  org.piler.tool_1.0.100.v_B79_R37x.jar
  org.eclipse.jdt.core_3.7.3.v7.jar
  org.eclipse.jdt.debug.ui_3.6.1.v2.jar
  上传至ant目录的lib下。在build.xml申明下使用jdt即可
  &property name=&piler&value=&org.eclipse.jdt.core.JDTCompilerAdapter&&
  ant需要在项目路径下配置build.xml,通过build.xml写入的脚本,来实现功能。以下用一个示例文件来大致说明下。
  &?xml version=&1.0& encoding=&UTF-8&?&
  &project name=&ZPublish_sks&& basedir=&.& default=&publish&&
  &property name=&source.dir& value=&JAVA& /&
  &property name=&lib.dir& value=&UI/WEB-INF/lib& /&
  &property name=&plugin.dir& value=&UI/WEB-INF/plugins& /&
  &property name=&tomcat.dir& value=&/home/local/tomcat_test/tomcat_system& /&
  &property name=&classes.dir& value=&${plugin.dir}/classes& /&
  &property name=&publish.dir& value=&/home/web/skwx_test&/&
  &property name=&database.dir& value=&${publish.dir}/skwx_lgz/WEB-INF/plugins/classes& /&
  &property name=&backup.dir& value=&/home/web/backup&/&
  &property name=&wwwroot_skwx.dir& value=&/home/web/resource_test/wwwroot_skwx&/&
  &property name=&buildfile.dir& value=&/home/web/buildfile&/&
用eclipse的编译工具编译,跳过不能编译泛型的问题--&
  &property name=&piler& value=&org.eclipse.jdt.core.JDTCompilerAdapter&/&
定义jar包所在目录&--&
  &path id=&classpath.dir&&
  &fileset dir=&${plugin.dir}/lib& includes=&*.jar& /&
  &fileset dir=&${tomcat.dir}/lib& includes=&*.jar& /&
  &fileset dir=&${lib.dir}& includes=&*.jar& /&
  &fileset dir=&${plugin.dir}/required& includes=&**/**/*.jar& /&
  &/path&
&target name=&clean&&
  &delete dir = &${classes.dir}&/&
  &mkdir dir=&${classes.dir}& /&
&target name=&compile& depends=&clean&&
&!--执行编译&--&
  &javac source=&1.6& target=&1.6& encoding=&UTF-8& srcdir=&${source.dir}& destdir=&${classes.dir}& includeantruntime=&false& classpathref=&classpath.dir&& includes=&**/*/*.java&& debug=&true& nowarn=&true&&
  &/javac&
&!--拷贝src下的xml和config等文件& --&
  &copy todir=&${classes.dir}&&
  &fileset dir=&${source.dir}&&
  &include name=&lang/**& /&
  &include name=&plugins/**& /&
  &include name=&dic/**& /&
  &include name=&**/*.config& /&
  &include name=&**/*.dat& /&
  &include name=&**/*.xml& /&
  &include name=&**/*.properties& /&
  &/fileset&
  &/copy&
&target name=&publish& depends=&compile&&
  &tstamp&
  &format property=&DAY& pattern=&yyyyMMddHHmmss& locale=&cn& /&
  &/tstamp&
&!--备份文件--&
  &mkdir dir = &${backup.dir}/${DAY}&/&
  &copy todir=&${backup.dir}/${DAY}&&
  &fileset dir=&${publish.dir}&&
  &/fileset&
  &/copy&
&!--部署项目应用&--&
  &delete dir = &${publish.dir}&/&
  &mkdir dir = &${publish.dir}&/&
  &copy todir=&${publish.dir}/skwx_lgz&&
  &fileset dir=&UI&&
  &/fileset&
  &/copy&
&!--修改数据库连接为测试数据库& --&
  &delete file=&${database.dir}/database.xml&/&
  &copy todir=&${database.dir}& file=&${buildfile.dir}/database.xml&/&
&!--拷贝模板等文件--&
  &delete includeemptydirs=&true&&
  &fileset dir=&${wwwroot_skwx.dir}& includes=&**/css/*.*,**/html/*.*,**/js/*.*,**/template/*.*,**/images/*.*&/&
  &/delete&
  &copy todir=&${wwwroot_skwx.dir}&&
  &fileset dir=&wwwroot_skwx&&
  &include name=&**/css/**& /&
  &include name=&**/html/**& /&
  &include name=&**/js/**& /&
  &include name=&**/images/**& /&
  &include name=&**/template/**& /&
  &/fileset&
  &/copy&
&/project&
  该build.xml主要实现了
删除编译目录
  其中环境变量要根据不同机器配置相对应路径。类似于公司的项目,要首先观察下项目的目录结构,把供编译使用的jar包存放路径找到,配置到classpath参数之中。接着建立buildfile目录,加入部署项目时用到的数据库连接文件(一般我们从svn获取的代码中的database.xml不是服务器的测试环境的链接,通过替换数据库链接文件,可以让各环境连接不同的数据库)。在根据项目实际情况,调整build.xml定制特殊功能。
6.jenkins配置
  建立jenkins+ant+svn持续构建环境主要要实现一个这样的流程
通过svn下载项目最新代码
关闭tomcat
调用ant脚本执行部署
启动tomcat
  通过让jenkins自动的执行这些步骤就能完成持续集成的工作。配置如下。
配置系统管理,配置服务器环境变量
访问jenkins,新建一个项目
配置shell和ant
配置完成后点击项目的立刻构建按钮,就能达到持续集成的目的。
  通过规范化svn备注提交,可以达到更新说明的目的
  通过查看控制台输出,可以监控安装部署情况。
建立安全策略,建立账号防止多人访问误点。
  注意事项:
1.&在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat,但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程,tomcat是没有启动的。这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生:
  重设环境变量build_id
  在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat进程
  在启动jenkins&的时候禁止jenkins杀死衍生进程
  修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重启jenkins生效
  此方法配置一次后,所有的job都无需设置BUILD_ID,就能够防止jenkins杀死启动的tomcat进
网友评分:
读完这篇文章后,您心情如何?
Copyright (C) 2007-. All Rights Reserved
北京泽元迅长软件有限公司 版权所有 京ICP备号-1
本站内容由泽元网站内容管理系统(ZCMS)生成IBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
本文主要介绍了如何使用 JaCoCo 分析 Java 项目的单元测试覆盖率,同时介绍了如何在 Eclipse 中安装和使用
EclEMMA,让开发人员可以直观地看到单元测试的覆盖情况。
, 软件工程师,
王群锋,现供职于 IBM,从事下一代统计预测软件的开发。曾在 DW 上发表,合作发表过《被误解的 NodeJS 》、《深入浅出 JavaScript 中的 this》、 《LESS CSS 框架简介》等文章,获得读者的较高评价。
前言随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(Java
Coverage)就是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然。EclEmma
是基于 JaCoCo 的一个 Eclipse 插件,开发人员可以方便的和其交互。因此,本文先从 EclEmma 入手,给读者一个直观的体验。使用 EclEmma 在 Eclipse 中查看单元测试覆盖率EclEmma 是基于 JaCoCo 的 Eclipse 插件,使用它,开发人员可以直观地看到单元测试的覆盖情况。安装 EclEmma打开 Eclipse 的软件市场,在其中搜索 EclEmma,找到后完成安装,如下图所示:图 1. 安装 EclEmma安装完成后,Eclipse 的工具条里会多出下面这样一个图标:图 2. Coverage 图标分析单元测试覆盖率成功安装 EclEmma 后,就可以试着用它来分析项目的单元测试覆盖率了。为了方便演示,我们使用 Eclipse 创建了一个标准 Java
工程。其中包含一个数学工具类,用来计算三个数中的最大值,代码如下:清单 1. 数学工具类package com.dw.
public class MathUtil {
public static int max(int a, int b, int c){
if(a & b){
if(a & c){
if(b & c){
}可以看到,这里的算法稍微有点复杂,使用到了多个条件判断分支,因此,特别适合为其编写单元测试。第一个版本的单元测试如下:清单 2. 第一个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
}试着运行一下单元测试覆盖率分析工具:40.0%!似乎不太理想。展开分析报告,双击后在编辑器里可以看到覆盖情况被不同的颜色标识出来,其中绿颜色表示代码被单元测试覆盖到,黄色表示部分覆盖,红色则表示完全没有覆盖到,如下图所示:图 3. 单元测试覆盖率报告让我们尝试多加一些单元测试,来改善这种情况,请看下面第二个版本的单元测试:清单 3. 第二个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
public void test_max_10_20_30() {
assertEquals(30, MathUtil.max(10, 20, 30));
public void test_max_100_200_300() {
assertEquals(300, MathUtil.max(100, 200, 300));
}测试覆盖率还是
40.0%!虽然我们额外再加了两个测试,但覆盖率没有半点提升,这些单元测试其实是重复的,它们在重复测试同一段代码。如果单纯追求单元测试的数量,那么这无疑会给管理者造成错觉,他们觉得单元测试的数量增加了,软件的质量更有保证了;而对于那些喜欢偷懒的程序员,也蒙混过关,但却给软件质量埋下了隐患。让我们删掉这些重复的单元测试,重新思考一下怎么测试这个方法。首先我们要测试正常情况,这其中又包含 3
种情况:第一个参数最大,第二个参数最大,以及最后一个参数最大。然后我们还需测试几种特殊情况,比如三个参数相同,三个参数中,其中两个相同。让我们照此思路重新编写单元测试:清单 4. 第三个版本的单元测试package com.dw.
import static org.junit.Assert.*;
import org.junit.T
public class MathUtilTest {
public void test_max_1_2_3() {
assertEquals(3, MathUtil.max(1, 2, 3));
public void test_max_1_3_2() {
assertEquals(3, MathUtil.max(1, 3, 2));
public void test_max_3_2_1() {
assertEquals(3, MathUtil.max(3, 2, 1));
public void test_max_0_0_0(){
assertEquals(0, MathUtil.max(0, 0, 0));
public void test_max_0_1_0(){
assertEquals(1, MathUtil.max(0, 1, 0));
}再次运行单元测试分析工具:75.0%!这次比以前有了很大提升,但是结果还不能令人满意,打开分析报告可以看到,有一个分支还是没有覆盖到,如图所示:图 4. 单元测试覆盖率报告阅读代码可以看出,这种情况是指第一个参数大于第二个参数,却小于第三个参数,因此我们再增加一个单元测试:清单 5. 再增加一个单元测试@Test
public void test_max_2_1_3() {
assertEquals(3, MathUtil.max(2, 1, 3));
}再运行一遍单元测试分析工具:100.0%!终于我们的单元测试达到了全覆盖,这样我们对自己开发的代码更有信心了。当然,我们在这里并不是为了单纯的追求这个数字,在增加单元测试覆盖率的诱导下,我们重新理清了测试的步骤,写出了更有意义、更全面的单元测试。而且根据单元测试分析工具给的反馈,我们还发现了先前没有想到的情形。因此,单元测试的覆盖率并不只是一个为了取悦管理者的数据,它实实在在地帮助我们改善了代码的质量,增加了我们对所编写代码的信心。给管理者的单元测试覆盖率报告管理者天生喜欢阅读报告。他们不会屈尊坐在你的办公桌前,让你向他展示 Eclipse
中这一片花花绿绿的东西。而且这份报告对他们至关重要,他们需要用它向上级汇报;年底回顾时,他们也可以兴奋地宣称产品的单元测试覆盖率增加了多少。作为一名开发人员,我们很大一部分工作量就在于满足管理者的这种需求。因此,本节我们讨论如何将
JaCoCo 集成到 Ant 脚本中,生成漂亮的单元测试覆盖率报告。准备工作在集成 JaCoCo 前,必须先确保你的 Java 工程有一个可执行的 Ant 构建脚本。一个简单的 Ant
构建脚本一般会执行如下任务:编译(包括编译工程代码和测试代码)、打包和执行单元测试。下面是本文示例 Java 项目所用的 Ant
构建脚本,读者可结合自己的项目及文件路径,在此基础之上进行修改。清单 6. build.xml&project name="math" basedir="." default="junit"&
&!--预定义的属性和 classpath --&
&property name="src.dir" value="src" /&
&property name="test.dir" value="test" /&
&property name="build.dir" value="build" /&
&property name="classes.dir" value="${build.dir}/classes" /&
&property name="tests.dir" value="${build.dir}/tests" /&
&property name="jar.dir" value="${build.dir}/jar" /&
&property name="lib.dir" value="lib" /&
&path id="classpath"&
&fileset dir="${lib.dir}" includes="**/*.jar" /&
&!--清除上次构建 --&
&target name="clean"&
&delete dir="${build.dir}" /&
&!--编译代码,包括单元测试 --&
&target name="compile" depends="clean"&
&mkdir dir="${classes.dir}" /&
&mkdir dir="${tests.dir}" /&
&javac srcdir="${src.dir}" destdir="${classes.dir}" /&
&javac srcdir="${test.dir}" destdir="${tests.dir}"&
&classpath&
&path refid="classpath" /&
&path location="${classes.dir}" /&
&/classpath&
&!--打包 --&
&target name="jar" depends="compile"&
&mkdir dir="${jar.dir}" /&
&jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"&
&!--运行单元测试 --&
&target name="junit" depends="jar"&
&junit printsummary="yes"&
&classpath&
&path refid="classpath"/&
&path location="${classes.dir}" /&
&path location="${tests.dir}" /&
&/classpath&
&batchtest fork="yes"&
&fileset dir="${test.dir}" includes="**/*Test.java"/&
&/batchtest&
&/project&集成 JaCoCo首先需要从 然后就是使用
需要的版本,然后将下载得到的压缩文件解压,将其中的
jacocoant.jar 拷贝至 Java 工程下存放第三方 jar 包的目录,在示例工程里,我有一个和 src 平级的 lib 目录,jacocoant.jar
就放到了这个目录底下,读者可根据自己的项目组织结构做相应调整。然后我们需要在 Ant 构建脚本中定义新的任务:清单 7. 定义新的构建任务&taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"&
&classpath refid="classpath" /&
&/taskdef&现在就可以在 Ant 构建脚本中使用 JaCoCo 了。需要注意的是,为了避免命名冲突,需要给 Ant 构建脚本加入新的 XML 命名空间:清单 8. 加入新的 JaCoCo 命名空间&project name="math" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" default="junit"&我们主要使用 JaCoCo
的两个任务:首先是jacoco:coverage,用来生成单元测试覆盖率数据,这是一个二进制文件,为了生成从该文件生成报表,我们还要调用另外一个任务jacoco:report,它的输入为jacoco:coverage生成的二进制文件,输出报表。报表有多种格式可选,可以是
HTML、XML、CSV 等。具体的脚本如下:清单 9. 使用 JaCoCo 生成测试覆盖率和报表&jacoco:coverage destfile="${build.dir}/jacoco.exec"&
&junit fork="true" forkmode="once" printsummary="yes"&
&classpath&
&path refid="classpath" /&
&path location="${classes.dir}" /&
&path location="${tests.dir}" /&
&/classpath&
&batchtest fork="yes"&
&fileset dir="${test.dir}" includes="**/*Test.java"/&
&/batchtest&
&/jacoco:coverage&
&jacoco:report&
&executiondata&
&file file="${build.dir}/jacoco.exec"/&
&/executiondata&
&structure name="dw demo"&
&classfiles&
&fileset dir="${classes.dir}"/&
&/classfiles&
&sourcefiles encoding="UTF-8"&
&fileset dir="${src.dir}"/&
&/sourcefiles&
&/structure&
&html destdir="${build.dir}"/&
&/jacoco:report&JaCoCo
的任务定义非常清晰,在这里略作说明。首先需要将原来的junit任务嵌入jacoco:coverage,而且需要指定fork="true",代表单元测试需要另起一个
JVM 执行,否则 JaCoCo 就会执行失败。destfile="${build.dir}/jacoco.exec"指定生成的测试覆盖率文件输出到什么地方,后面生成报告的时候需要输入该文件的地址。然后就是使用 jacoco:report 生成报告,指定前面任务生成的单元测试覆盖率文件、编译好的类文件以及源代码,最后选择一种格式,这里使用
html,生成报告。打开报告的存放路径,就可以看到如下所示的单元测试覆盖率报告:图 5. HTML 版的单元测试覆盖率报告和同类产品比较市面上流行的单元测试覆盖率工具还有
和 。和它们相比,JaCoCo 有如下优势: JaCoCo 拥有友好的授权形式。JaCoCo 使用了 Eclipse Public License,方便个人用户和商业用户使用。而 Clover 对于商业用户是收费的。 JaCoCo 被良好地集成进各种工具中。在 Java 社区里,很多流行的工具都可以集成 JaCoCo,比如
SonarQube、Jenkins、Netbeans、Eclipse、IntelliJ IDEA、Gradle 等。 JaCoCo 社区非常活跃,它是目前唯一支持 Java 8 的单元测试覆盖率工具。而且关于 JaCoCo 的文档相对较多,降低了学习门槛。结束语本文为大家介绍了如何使用 JaCoCo 分析项目的单元测试覆盖率,文章先从 JaCoCo 的 Eclipse 插件 EclEmma
开始,直观地介绍了如何一步步提高单元测试质量,最终达到对代码的全覆盖;然后为大家介绍了如何将 JaCoCo 集成到 Ant 构建脚本中,生成漂亮的单元测试覆盖率报告。但是使用 JaCoCo 只是第一步,重要的是开发人员能够根据工具所给的反馈,不断改进自己的单元测试,写出高质量的代码。
参考资料 参考 ,jazz.net 上一篇关于单元测试的文章,其中也提到了单元测试覆盖率,需要 jazz 帐号登录才可访问。参考 ,EclEmma 官方网站。参考 ,维基百科上关于 JaCoCo 的介绍,并且和其他类似工具作了对比。参考 ,JaCoCo 提供的 Ant 相关任务。参考 ,将 JaCoCo 集成到 Maven 的教程。参考 ,JaCoCo 官网提供的示例构建脚本,展示了 JaCoCo 的基本用法。参考 ,Ant
官网提供的简易教程,帮助新手使用 Ant 构建 Java 项目。访问 developerWorks ,了解关于信息管理的更多信息,获取技术文档、how-to
文章、培训、下载、产品信息以及其他资源。:获取更多软件下载。 加入 。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
为灾难恢复构建应用,赢取现金大奖。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Java technologyArticleID=980366ArticleTitle=JaCoCo:分析单元测试覆盖率的利器publish-date=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&}

我要回帖

更多关于 jenkins emma plugin 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信