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報告

 

 

 

 7、附上服務器的文件結構

 

三、Jenkins發送飛書通知

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

1、 在飛書群中添加自定義機器人,步驟截圖如下:

(因為飛書截圖有水印,所以這里用別人的博客的圖)

圖1

 圖2

 

圖3

 

 圖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)構建完成之后,飛書群里就能收到對應的消息,如下圖:

  我這里就不截圖我自己的飛書通知,因為有水印,所以用的是網上的圖,具體接口中對應圖里哪個字段,在上面的腳本代碼中有注釋

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM