6

Jenkins+Allure测试报告+飞书机器人发送通知 - 一加一

 2 years ago
source link: https://www.cnblogs.com/Chilam007/p/16135023.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Jenkins+Allure测试报告+飞书机器人发送通知

  之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人)。

  本次实践搞了一天,踩了一些坑,其中有2个坑可参考如下:

  1、关于jenkins生成allure报告是空的:https://blog.csdn.net/qq_37159446/article/details/122233467

  2、如遇到构建报错:ValueError: option names {'--alluredir'} already added

  解决方案:

  pytest-allure-adaptor与allure-pytest的alluredir都被引用造成冲突
  pip3 uninstall allure-pytest
  module 'pytest' has no attribute 'allure'问题解决
  pip3 uninstall pytest-allure-adaptor
  pip3 install allure-pytest

二、Jenkins生成Allure报告

1、jenkins安装allure插件

  进入jenkins-系统配置-插件管理-可选插件,输入allure后搜索安装

 2、jenkins配置全局工具配置

  进入jenkins-系统管理-全局工具配置,配置allure

3、jenkins配置项目的构建后操作

  进入构建项目的配置页面,选中构建后操作tab,增加构建后操作步骤选择 Allure Report

Results path填写结果文件路径

构建后操作tab点击高级,配置generate路径

 4、构建执行shell,如下图

因为我的脚本中有job_url和job_name,所以shell命令后面要带上jenkins内置变量,如果不需要的话也可以不用后面那串,即直接写 python3 excute.py

特别注意:服务器需要安装allure,具体怎么安装可看我之前的博客或者百度(pip3 install allure-pytest)

5、附上Python项目结构图和excute.py代码

# -*- coding:utf-8 -*-
import pytest
import os


if __name__ == '__main__':
    # pytest执行脚本并生成测试结果文件到report/tmp目录下
    pytest.main(['-s','--alluredir','report/tmp'])

    # 将report/tmp目录下的结果文件生成html类型的测试报告文件到report/html目录下
    # -o report/html --clean 是为了清空已有的测试报告再生成
    os.system(r'allure generate report/tmp -o report/html --clean')

 6、附上jenkins构建控制台图和allure报告

715975-20220415170652081-47234150.png

 

715975-20220415170835174-270486305.png

 

715975-20220415172237018-1455158604.png

 

715975-20220415172149515-188023879.png

 7、附上服务器的文件结构

 

715975-20220415171156997-1442225411.png

三、Jenkins发送飞书通知

  参考:https://blog.csdn.net/jialiu111111/article/details/122129334

1、 在飞书群中添加自定义机器人,步骤截图如下:

(因为飞书截图有水印,所以这里用别人的博客的图)

715975-20220414132417440-220076263.png

图1

715975-20220414133220290-613312577.png

 图2

 

715975-20220414133233065-830521922.png

图3

 

715975-20220414133245302-1880568613.png

 图4

2、将这个webhook地址保存起来,后面需要用到

3、Python发送通知的脚本

  创建feishu.py脚本文件,需要将你的webhook地址拷贝到脚本中的url中,思路是找出jenkins的内置变量,将jenkins内置变量定义为python脚本系统变量(sys.argv[1])

# -*- encoding: utf-8 -*-
"""
@Author  : yijiayi
@File    :feishu.py
@Time    :2022/4/13 13:41
@Remark :飞书通知
"""
import sys
import requests

#定义python系统变量
JOB_URL = sys.argv[1]
JOB_NAME = sys.argv[2]

# 飞书机器人的webhook地址
url = 'https://open.feishu.cn/open-apis/bot/v2/hook/xxx4'
method = 'post'
headers = {'Content-Type':'application/json'}

data = {
    "msg_type": "interactive",
    "card": {
        "config": {
                "wide_screen_mode": True,
                "enable_forward": True
        },
        "elements": [{
                "tag": "div",
                "text": {
                        "content": "用例已执行完成", # 这是卡片的内容,也可以添加其他的内容:比如构建分支,构建编号等
                        "tag": "lark_md"
                }
        }, {
                "actions": [{
                        "tag": "button",
                        "text": {
                                "content": "查看测试报告", # 这是卡片的按钮,点击可以跳转到url指向的allure路径
                                "tag": "lark_md"
                        },
                        "url": f"{JOB_URL}/allure/", # JOB_URL 调用python定义的变量,该url是服务器下的allure路径
                        "type": "default",
                        "value": {}
                }],
                "tag": "action"
        }],
        "header": {
                "title": {
                        "content": JOB_NAME + "构建报告", # JOB_NAME 调用python定义的变量,这是卡片的标题
                        "tag": "plain_text"
                }
        }
    }
}
res= requests.request(method=method,url=url,headers=headers,json=data)
print(res)
print(res.json())

4、Jenkins项目中添加配置

1)运行Python脚本语言需要一些环境,我使用Python3,安装Python3的工具

2)在配置中的构建中 加上一行命令即可,如下图:

  我这里的testcase是项目目录下的,所以要结合你们项目实际情况变更

  shell的变量顺序要跟python定义的系统变量顺序一致,比如python脚本里定义的job_url在前面,那jenkins的shell命令就要将job_url写在前面

python3 testcase/feishu.py $JOB_URL $JOB_NAME

3)构建完成之后,飞书群里就能收到对应的消息,如下图:

  我这里就不截图我自己的飞书通知,因为有水印,所以用的是网上的图,具体接口中对应图里哪个字段,在上面的脚本代码中有注释


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK