需求:公司需要將接口自動化部署到服務區上每天定時運行 並將測試報告發送到釘釘(飛書)相關群
框架邏輯
代碼框架選擇以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
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 設置釘釘推送
三、遇到的問題
+關注 持續更新