一、前言
之前講了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)構建完成之後,飛書群裡就能收到對應的訊息,如下圖:
我這裡就不截圖我自己的飛書通知,因為有水印,所以用的是網上的圖,具體介面中對應圖裡哪個欄位,在上面的指令碼程式碼中有註釋