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

参考

相关推荐
早睡冠军候选人8 分钟前
Ansible学习----Ansible Playbook
运维·服务器·学习·云原生·容器·ansible
sulikey8 分钟前
从实验出发深入理解Linux目录权限:r、w、x分别控制什么?能否进入目录到底由谁决定?
linux·运维·服务器·ubuntu·centos
懒羊羊不懒@19 分钟前
Java基础语法—最小单位、及注释
java·c语言·开发语言·数据结构·学习·算法
ss27323 分钟前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
DokiDoki之父34 分钟前
MyBatis—增删查改操作
java·spring boot·mybatis
兩尛1 小时前
Spring面试
java·spring·面试
Java中文社群1 小时前
服务器被攻击!原因竟然是他?真没想到...
java·后端
Full Stack Developme1 小时前
java.nio 包详解
java·python·nio
零千叶1 小时前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝2 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表