笔记: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目录下/mnt/jenkins/workspace/ 放置脚本文件
获取目标文件并将文件放到指定的目录下_清风羽的博客-CSDN博客https://blog.csdn.net/u011441473/article/details/125387450 - 在/mnt/data/alibaba/nginx/CodeCoverage__gauss-counsel下放置
createFolder.sh 创建制定文件名的文件夹_清风羽的博客-CSDN博客shell脚本创建制定文件名的文件夹https://blog.csdn.net/u011441473/article/details/125380316?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125380316%22%2C%22source%22%3A%22u011441473%22%7D&ctrtid=Xt59m
getCoverageAndShow.sh 测试覆盖率结果使用nginx实现远程访问展示_清风羽的博客-CSDN博客测试覆盖率结果使用nginx实现远程访问展示#将文件已经解析完成的测试覆盖率结果报告文件 放在nginx的工作目录/mnt/data/alibaba/nginx/中https://blog.csdn.net/u011441473/article/details/125380446
二、构建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的功能, 则会出现覆盖率统计丢失的情况