釘釘推送測試報告,關於推送的類型,最終選擇了推送markdown的,也實現了預期的功能。現在記錄下來,備忘。
效果圖:

實現功能:
①實時推送測試結果到釘釘;
②加上了可愛可憎的@所有人功能 ;
③增加每日壁紙圖;
④點擊報告鏈接可以跳轉查看詳細的測試報告
1、添加釘釘機器人
獲取自定義機器人webhook
步驟一,打開機器人管理頁面。以PC端為例,打開PC端釘釘,點擊頭像,選擇“機器人管理”。

步驟二,在機器人管理頁面選擇“自定義”機器人,輸入機器人名字並選擇要發送消息的群,同時可以為機器人設置機器人頭像。

步驟三,完成必要的安全設置(至少選擇一種),勾選 我已閱讀並同意《自定義機器人服務及免責條款》,點擊“完成”。安全設置目前有3種方式,設置說明見下文介紹。

步驟四,完成安全設置后,復制出機器人的Webhook地址,可用於向這個群發送消息,格式如下:
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
2、上代碼
2.1 封裝
import base64 import hashlib import hmac import time import urllib.parse import requests from core.logger import Logger logger = Logger().logger Webhook_url = "https://oapi.dingtalk.com/robot/send" class DingTalk: def __init__(self, msg): self.msg = msg logger.info("開始發送釘釘消息") # 加密簽名並組合字段 def __spliceUrl(self): # 第一步,把timestamp+"\n"+密鑰當做簽名字符串,使用HmacSHA256算法計算簽名,然后進行Base64 encode,最后再把簽名參數再進行urlEncode,得到最終的簽名(需要使用UTF-8字符集)。 timestamp = str(round(time.time() * 1000)) secret = '**********' secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) # 第二步,把 timestamp和第一步得到的簽名值拼接到URL中。 payload = { 'access_token': '********', 'timestamp': timestamp, 'sign': sign } # print(payload) return payload # 發送釘釘消息 def send_text(self): headers = {'Content-Type': 'application/json; charset=utf-8'} res = requests.post(Webhook_url, params=self.__spliceUrl(), headers=headers, json=self.msg) # print(res.url) # print(res.text) if "ok" in res.text: logger.info("釘釘消息發送成功") else: logger.error("釘釘消息推送失敗!" + res.text) if __name__ == "__main__": pass
2.2 調用
# 發送釘釘推送消息 msg = { "msgtype": "markdown", "markdown": { "title": "APP接口自動化測試報告", "text": "#### 體檢寶APP接口測試報告 \n> 執行應用:{} \n> 用例總數:{}條 \n> 執行結果:通過{}條 ,失敗{}條 ,通過率{}%\n> \n> ###### 點擊查看報告詳情。[報告]({}) \n".format( '體檢寶APP', num_[0], num_[1], int(num_[0]) - int(num_[1]), num_[-1], 'http://' + IP + ':12345/report_tjb') }, "at": { "atMobiles": [ ], "isAtAll": True } } # logger.info("訪問的地址是:{}".format(IP+':12346'+'/report')) ding = DingTalk(msg=msg) ding.send_text()
OK
