一、前言
之前講了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)構建完成之后,飛書群里就能收到對應的消息,如下圖:
我這里就不截圖我自己的飛書通知,因為有水印,所以用的是網上的圖,具體接口中對應圖里哪個字段,在上面的腳本代碼中有注釋