Jenkins結合釘釘完成定時推送 (python+pytest+allure框架)


需求:公司需要將接口自動化部署到服務區上每天定時運行 並將測試報告發送到釘釘(飛書)相關群
 
框架邏輯
代碼框架選擇以requests+pytest+allure 技術為底層框架進行編寫。

一、安裝環境
  • 1.1 安裝Python
    MAC安裝和Windows安裝這里就不多說了

    下面提個安裝包,自行下載

    windows版本

    鏈接: https://pan.baidu.com/s/1O96z1DzQ4DSqFXZHcGyWiQ  密碼: 1h38

    mac版本

    鏈接: https://pan.baidu.com/s/1apJjhsUnrsUqi1Jxx8zBSA  密碼: 488v

  

 

  • 1.2 安裝Pycharm

    下面只提供安裝包

    windows版本

    鏈接: https://pan.baidu.com/s/1Ijq7mpQTI4oUJtLNvxqi4w  密碼: vg45

    mac版本

    https://www.macwk.com/soft/pycharm

  

  • 1.3 安裝插件

  

pip install requests
pip install pytest
pip install pytest-html

allure安裝:https://blog.csdn.net/chenfei_5201213/article/details/80982929

  

 

  • 1.4 docker上安裝Jenkins

    創建安裝jenkins鏡像並啟動Jenkins容器

docker run \
  --name jenkins-blueocean \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  jenkinsci/blueocean

    輸入 docker 查看jenkins鏡像是否安裝成功

docker images

  

 

     查看容器是否運行 

docker ps

   啟動jenkins

 

 

瀏覽器訪問 http://<你的電腦ip>:8080 如果無法訪問請關閉系統防火牆

密碼存放在 cat /var/lib/jenkins/secrets/initialAdminPassword

  

 

 

  

  • 1.5 編寫飛書推送腳本
  • #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2021/4/16 10:42 上午
    # @Name    : peilun
    # @File    : Fly_book.py
    # @Software: PyCharm
    import sys
    sys.path.append("..")
    import jenkins
    from comment.readConfig import *
    from comment.log import *
    import requests
    import json
    
    '''
    jenkins持續集成飛書發送報告通知
    '''
    
    class flyb():
        def __init__(self):
            self.errorMsg = ""
            self.tile = time.strftime("%Y-%m-%d %H:%M:%S")
            try:
                self.jenkins_url = con.jenkins_url
                self.server = jenkins.Jenkins(self.jenkins_url, username=con.jenkins_name, password=con.jenkins_passwd)
    
                # 獲取jenkins_url
                self.job_name = "job/autotest/"  # job名稱
                self.job_url = self.jenkins_url + self.job_name  # job的url地址
                # 獲取最后一次構建
                self.job_last_number = self.server.get_info(self.job_name)['lastBuild']['number']
                # #獲取報告地址
                self.report_url = self.job_url + str(self.job_last_number) + '/allure'  # 報告地址
                log.debug("jenkins地址:%s" % self.report_url)
            except Exception as e:
                self.errorMsg = str(e)
                log.info("jenkins連接異常 %s" %e)
    
    
    
        def ly_data(self):
    
            #獲取生成的txt報告數據
            d = {}
            proDir = "/allure-report/export/prometheusData.txt"
            f = open(con.allure_path + proDir, 'r')
            for lines in f:
                for c in lines:
                    launch_name = lines.strip('\n').split(' ')[0]
                    num = lines.strip('\n').split(' ')[1]
                    d.update({launch_name: num})
            f.close()
            retries_run = d.get('launch_retries_run')  # 運行總數
            status_passed = d.get('launch_status_passed')  # 通過數量
            status_failed = d.get('launch_status_failed')  # 不通過數量
            status_broken = d.get('launch_status_broken')  # 異常數量
            try:
                url_path = 'https://open.feishu.cn/open-apis/bot/v2/hook/'
                url = url_path+con.fly
                log.debug("webhook地址: %s"% url)
    
                headers = {
                    'content-type': "application/json"
                }
    
    
                payload = {
                    "mobiles": "13282148187",
                    "msg_type": "post",
                    "content": {
                        "post": {
                            "zh_cn": {
                                "title": "項目接口測試報告",
                                "content": [
                                    [
                                        {
                                            "tag": "text",
                                            "text": "項目名稱: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": "儲能管家\n"
                                        },
                                        {
                                            "tag": "text",
                                            "un_escape": True,
                                            "text": "報告鏈接:  "
                                        },
                                        {
                                            "tag": "a",
                                            "text": "鏈接\n",
                                            "href": self.report_url
                                        },
                                        {
                                            "tag": "text",
                                            "text": "監測分支: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": "master\n"
                                        },
                                        {
                                            "tag": "text",
                                            "text": "運行總數: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": retries_run+"\n"
                                        },
                                        {
                                            "tag": "text",
                                            "text": "通過數量: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": status_passed+"\n"
                                        },
                                        {
                                            "tag": "text",
                                            "text": "異常數量: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": status_broken+"\n"
                                        },
                                        {
                                            "tag": "text",
                                            "text": "不通過數量: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": status_failed+"\n"
                                        },
                                        {
                                            "tag": "text",
                                            "text": "運行時間: "
                                        },
                                        {
                                            "tag": "text",
                                            "text": self.tile
                                        }
                                    ]
                                ]
                            }
                        }
                    }
                }
    
                response = requests.request("POST", url, headers=headers, data=json.dumps(payload))
                log.info(response.text)
    
            except Exception as e:
                self.errorMsg = str(e)
                log.info("接口請求異常 %s" % e)
    
    
    
    
    
    
    f = flyb()
    f.ly_data()
    

      

 

 
二、配置Jenkins
  • 2.1 Jenkins內安裝allues
  • 2.2 創建項目
  • 2.3 設置釘釘推送
 
三、遇到的問題
 
 
 +關注 持續更新


免責聲明!

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



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