Jenkins流水线 & Allure & JUnit5 自动化测试

目录

[一、Jenkins Allure配置](#一、Jenkins Allure配置)

[1.1 安装Allure插件](#1.1 安装Allure插件)

[1.2 安装Allure工具](#1.2 安装Allure工具)

[1.3 配置测试报告路径](#1.3 配置测试报告路径)

[1.4 JenkinsFile](#1.4 JenkinsFile)

[二、Jenkins 邮箱配置](#二、Jenkins 邮箱配置)

[2.1 安装Email Extension Plugin插件](#2.1 安装Email Extension Plugin插件)

[2.2 邮箱配置](#2.2 邮箱配置)

[2.3 JenkinsFile](#2.3 JenkinsFile)

[三、项目pom.xml 配置](#三、项目pom.xml 配置)

[3.1 引入allure-junit5依赖](#3.1 引入allure-junit5依赖)

[3.2 引入maven-surefire-plugin插件](#3.2 引入maven-surefire-plugin插件)

四、测试报告

问题

参考


目标:在Jenkins项目构建后生成测试报告,并发送邮件给构建人。

背景:项目是多模块的springboot项目,在Jenkins分包部署,目前针对某一个子模块进行自动化测试并发送邮件。

一、Jenkins Allure配置

1.1 安装Allure插件

1.2 安装Allure工具

版本选择2.8.0

1.3 配置测试报告路径

非流水线方式的项目配置:

注意路径尽量配置成推荐的路径,意思是在workspace/项目名/target/allure-results下生成测试结果

1.4 JenkinsFile

流水线方式通过脚本配置:

其中hbintrade-common是项目子模块,单元测试在该模块下

bash 复制代码
    post('生成测试报告') {
        always {
            script {// 集成allure,目录需要和保存的results保持一致,注意此处目录为job工作目录之后的目录,Jenkins会自动将根目录与path进行拼接
//                目前仅测试hbintrade-common包下的单元测试,后续需要优化(测试后发现配置多个路径的results无效)
                allure includeProperties: false, jdk: '', results: [[path: 'hbintrade-common/target/allure-results']]
            }
        }

    }

建议使用Jenkins的流水线语法,配置后点击生成脚本:

二、Jenkins 邮箱配置

2.1 安装Email Extension Plugin插件

2.2 邮箱配置

Extended E-mail Notification下配置

配置默认接收人邮箱 Default Recipients

配置默认主题:

$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

配置默认模版:

html 复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
    <div width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <div>本邮件由系统自动发出,无需回复!
            <br />
            <br>各位同事,大家好,以下为${PROJECT_NAME }自动化测试项目构建信息
            <br />
            <div>
                <font color="#CC0000">构建结果 - ${BUILD_STATUS}</font>
            </div>
        </div>
        <div>
            <h4>
                <font color="#0B610B">构建信息</font>
            </h4>
            <hr size="2" width="100%" />
            <ul>
                <li>项目名称 : ${JOB_NAME}</li>
                <li>构建编号 : 第${BUILD_NUMBER}次构建</li>
                <li>触发原因: ${CAUSE}</li>
                <li>构建状态: ${BUILD_STATUS}</li>
                <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a>
                <li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                </li>
                <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a>
                </li>
                <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a>
                </li>
            </ul>
        </div>
        <div>
            <h4>
                <font color="#0B610B">测试报告</font>
            </h4>
            <hr size="2" width="100%" />
            <b>点击查看测试报告: <a href="http://192.168.30.233:8080/job/ ${JOB_NAME}/${BUILD_NUMBER}/allure">http://192.168.30.233:8080/job/hbintrade-ui/${BUILD_NUMBER}/allure</a></b>
        </div>
        <!-- <div>
            <h4>
                <font color="#0B610B">测试结果</font>
            </h4>
            <hr size="2" width="100%" />
            <div>
                本次测试共执行<b>${TEST_COUNTS}</b>个用例,成功<b style="color: green">${TEST_COUNTS,var="pass"}</b>个,失败<b
                    style="color: red">${TEST_COUNTS,var="fail"}</b>个,跳过<b
                    style="color: #FFEB3B">${TEST_COUNTS,var="skip"}</b>个。
            </div>
        </div> -->
        <div>
            <h4>
                <font color="#0B610B">构建日志 (最后20行):</font>
                <hr size="2" width="100%" align="center" />
            </h4>
        </div>
        <div>
            <ul>
                <li>${BUILD_LOG, maxLines=22}</li>
            </ul>
        </div>
    </div>
</body>

</html>

失败时发送:

配置邮箱通知

SMTP认证 用户名:邮箱 密码:授权码(如qq邮箱 账号与安全下获取)

2.3 JenkinsFile

html 复制代码
post('发送邮件') {
        failure {
            emailext(
                    subject: '${JOB_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
                    body: '${DEFAULT_CONTENT}',
                    to: '${DEFAULT_RECIPIENTS}'
            )
        }

    }

三、项目pom.xml 配置

3.1 引入allure-junit5依赖

注意版本不能选择太高的,与Allure匹配

XML 复制代码
<dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-junit5</artifactId>
            <version>2.13.6</version>
            <scope>test</scope>
        </dependency>

3.2 引入maven-surefire-plugin插件

XML 复制代码
<plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <!--  install跳过单元测试                  -->
                    <configuration>
                        <!--                        <skipTests>false</skipTests>-->
                        <includes>
                            <include>**/*Test.java</include>
                        </includes>
                        <!--                        默认在 当前模块的target/allure-results生成-->
                        <!--                        在target目录下自动生成原生的测试结果目录:/allure-results-->
                        <systemProperties>
                            <property>
                                <name>allure.results.directory</name>
                                <value>${project.build.directory}/allure-results</value>
                            </property>
                            <property>
                                <name>allure.link.issue.pattern</name>
                                <value>https://example.org/issue/{}</value>
                            </property>
                        </systemProperties>
                    </configuration>
                </plugin>

四、测试报告

邮件

问题

  • Allure测试报告没有数据
    • maven项目需要配置插件并引入依赖allure-junit5
    • 单元测试文件名是否匹配上
    • 版本问题,allure-junit5版本不能太高,与Allure的版本需要兼容
    • 没有找到results的目录,注意是相对路径,建议使用jenkins流水线语法生成脚本
  • 流水线方式邮箱标题错误,项目名获取不到
    • 对于流水线方式创建的项目,项目名使用$JOB_NAME

参考

相关推荐
legend_jz18 分钟前
【linux】手搓线程池
linux·运维·服务器·c++·笔记·学习·学习方法
_oP_i32 分钟前
Oracle JDK(通常简称为 JDK)和 OpenJDK区别
java·数据库·oracle
seabirdssss32 分钟前
力扣_876. 链表的中间结点
java·数据结构·算法·leetcode·链表
SEO-狼术32 分钟前
Enhance your XML editing experience Crack
xml·java·前端
IT-sec38 分钟前
tomcat 文件上传 (CVE-2017-12615)
java·安全·web安全·网络安全·tomcat·系统安全
i7i8i9com1 小时前
baomidou Mabatis plus引入异常
java·开发语言·mybatis
weixin_446707741 小时前
使用easyexcel导出复杂模板,同时使用bean,map,list填充
java·excel·easyexcel
通义灵码1 小时前
如何用通义灵码快速绘制流程图?
java·python·流程图·visual studio·通义灵码
dntktop1 小时前
拥抱自由,Floorp浏览器让你的网络生活更纯净
运维
小蒜学长1 小时前
springboot视频网站系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·spring