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

参考

相关推荐
Aspartame~11 分钟前
K8s的相关知识总结
java·容器·kubernetes
寒士obj27 分钟前
MyBatis-Plus基础篇详解
java·mybatis
我崽不熬夜29 分钟前
List、Set、Map,你真的会选用吗?
java·后端·java ee
Sadsvit1 小时前
网络聚合链路与软件网桥配置指南
linux·运维·服务器·网络·centos
Y4090011 小时前
Java算法之排序
java·数据结构·笔记·算法
网硕互联的小客服1 小时前
如何配置安全的SFTP服务器?
运维·服务器·安全
ALLSectorSorft2 小时前
搭子交友 app 动态分享与打卡系统设计实现
java·服务器·数据库·人工智能·oracle·交友
long3162 小时前
适配器模式 java demo
java·javascript·后端·程序人生·设计模式·适配器模式
##学无止境##2 小时前
从青铜到王者:Java设计模式——代理模式
java·设计模式·代理模式
pengzhuofan2 小时前
Java设计模式-适配器模式
java·设计模式·适配器模式