(!nginx访问静态页面)持续构建junit单元测试代码覆盖率步骤(问题优化中)

笔记:nginx访问静态页面

在整个迭代过程中对被测应用的代码测试通常有两个阶段,一个是开发过程中开发编写的单元测试case,通过通过junit框架编写测试代码,另一个阶段是提测后,测试人员通过手动+测试脚本进行的测试。

实现目标:

用户手动触发jenkins任务,输入对应的参数工程名称/分支号, 实现自动输出单元测试代码覆盖率统计;

具体实现原理:

通过Maven命令触发在对项目进行打包编译的过程中,自动完成jacoco的插桩和junit单元测试的代码覆盖率统计

适用范围:

应用项目是基于Maven管理,且通过junit进行单元测试覆盖的应用。

实际实现步骤:

一、每父工程pom文件(即工程根目录下的pom文件)配置如下

1、添加pom依赖

<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

配置读取制定的文件类型:(看情况定,一般不加此项默认跑所有case)

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.5</version>
				<configuration>
				<includes>
					<include>**/*Test.java</include>
					<include>**/*Tests.java</include>
				</includes>
				</configuration>
			</plugin>

<!-- Jacoco插件用来生成代码覆盖率-->
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>0.8.3</version>
				<configuration>
					<skip>false</skip>
				</configuration>
				<executions>
					<execution>
						<id>pre-test</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>post-test</id>
						<phase>test</phase>
						<goals>
							<goal>report</goal>
						</goals>

						<configuration>
							<!-- 指定从哪里对其jacoco的exec文件,默认路径为jacoco.exec-->
							<!--<dataFile>target/jacoco.exec</dataFile>-->
							<!-- 指定dataFile路径中文件被解析后输出地址-->
							<outputDirectory>${basedir}/target/jacoco-ut</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>

outputDirectory的配置在本地时均配置为target/jacoco-ut即可,但是放到jenkins上构建时需要指定绝对路径增加内置属性${basedir}变更为: ${basedir}/target/jacoco-ut 否则找不到地址而无法生成测试覆盖率文件

Maven的属性,${project.basedir},${project.build.directory}:项目构件输出目录,默认为 target/ - 张艳涛&java - 博客园

二、准备脚本文件

二、构建jenkins任务

  • 参数:1、项目名称, 2、分支名
  • 使用命令行启动:

mvn org.jacoco:jacoco-maven-plugin:prepare-agent clean package -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true

org.jacoco:jacoco-maven-plugin:prepare-agent:命令行引用 jacoco-maven-plugin 插件,减少对开发源码的依赖。
-Dmaven.test.skip=false:启用代码中的单元测试,开发代码中一般默认是关闭的。
-Dmaven.test.failure.ignore=true:忽略失败的单元测试用例继续执行。

  • 在/mnt/data/alibaba/nginx 目录下以jenkins工程名为目录名称创建一个目录,存放生成的覆盖率文件  ​​​​​​​createFolder.sh

# 启动命令 .createFolder.sh jenkins任务目录 启动

  • 构建完成后,在/mnt/jenkins/workspace/执行shell脚本​​​​​​​ getDir.sh 整合覆盖率文件(从每个子工程的targe中提取并传送到nginx上上一步骤中已经创建好的指定文件夹)

# 启动命令 ./getDir.sh jenkins任务目录 启动

  • 在 /mnt/data/alibaba/nginx 文件夹下执行 getCoverageAndShow.sh ​​​​​​​脚本,生成展示文件(合并覆盖率文件到一个统一的露出文件)

# 启动命令 ./getCoverageAndShow.sh jenkins任务目录 启动 

  • 发送邮件给出覆盖率结果链接 通过完成的html展示每个子项目的覆盖率情况:

三、结果报告呈现html页面

整合报告,通过配置nginx访问静态html页面

1、配置nginx访问静态页面地址路径

  • 在nginx的 安装目录/usr/local/alibaba/nginx/ 下新建文件夹 CodeCoverage__gauss-counsel(与上面的jenkins任务名字保存一致,已经存在则可以不创建)
  • 将一个静态页面及静态页面所需要用的js以及css和图片,上传到了nginx的安装目录下
  • 配置nginx

在/usr/local/alibaba/nginx/conf/目录下的 xxx.conf, 新增配置文件

#访问有缓存
server {
    listen 8989;
    server_name localhost;
    root /usr/local/alibaba/nginx/CodeCoverage__gauss-counsel;
    index index.html;
}

变更配置,去除缓存

server {
    listen 8989;
    server_name localhost;
    location / {
       root /usr/local/alibaba/nginx/CodeCoverage__gauss-counsel;
       index index.html;
       #不要缓存设置
       add_header Cache-Control no-cache;
       add_header Pragma no-cache;
       add_header Expires 0;
    }
}

重启nginx 

./sbin/nginx -c /usr/local/alibaba/nginx/conf/nginx-single-1.3.conf -s reload

通过浏览器访问http://11.164.61.168:8989/

后续:

可优化的点:

1、执行./createFolder.sh , ./getDir.sh 和 ./getCoverageAndShow.sh 脚本的地址若测试环境对呀的jenkisn 或 nginx部署地址会变动的话可通过 环境变量或者参数化 去动态处理

遗留问题:

1、当有多module时, 若module A中编写单侧脚本去测试module B的功能, 则会出现覆盖率统计丢失的情况

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值