Jenkins+Allure測試報告+飛書機器人傳送通知

一加一發表於2022-04-16

一、前言

  之前講了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)構建完成之後,飛書群裡就能收到對應的訊息,如下圖:

  我這裡就不截圖我自己的飛書通知,因為有水印,所以用的是網上的圖,具體介面中對應圖裡哪個欄位,在上面的指令碼程式碼中有註釋

 

 

 

 

相關文章