python实现发送钉钉消息

需求:企业部门本地部署的缺陷管理工具,企业内部使用钉钉进行工作交流,老板想让每天汇报项目的测试情况;


设计思路:

1、创建钉钉群机器人,每天发送项目测试信息(缺陷数量、关闭数量、修复数量、项目名称、新增缺陷数量、新增缺陷负责人);

2、使用python读取mysql数据库的表 构造成钉钉的消息内容

实现方式:python3


一、安装python开发环境以及相关依赖库

安装python3开发环境可以百度;安装好后按下windowds+R,打开cmd,使用 pip install命令安装python库(需要库如下:pymysql,requests, json,nnlog)

二、创建本地文件夹DingMsg,并在文件夹 创建mysql.py和DingMsg.py

三、编写读取mysql的代码

# coding: utf-8
#!/usr/bin/python
import requests, json
from pymysql import connect
import nnlog

log = nnlog.Logger('DingMsg.log',level='debug',backCount=5,when='D')
class Op_mysql:
    def __int__(self):
        print('aaaa')
#用于获取返回结果为单个的
    @classmethod
    def con_mysql(self,sql):
        conn = connect(
            host='',
            port=,
            user='',
            password='',
            db='',
            charset='utf8')
        cursor=conn.cursor()
#根据传入sql语句执行sql并将返回结果存入result
        cursor.execute(sql)
        results = cursor.fetchone()
        for result in results:
            pass
        log.info(result)
        conn.close()
        return result
#用于获取返回结果为多个的
    def con_mysql_list(self, list):
        conn = connect(
            host='',
            port=,
            user='',
            password='',
            db='',
            charset='utf8')
        cursor = conn.cursor()
        cursor.execute(list)
#根据传入sql语句执行sql并将返回结果存入listname
 
        listname=[]
        resultsList = cursor.fetchall()
        for r_List in resultsList:
            listname.append(r_List)
        log.info(listname)
        return listname

    @classmethod
    def getTodayNewbugs(self):
        # 获取今日新增缺陷数
        o = Op_mysql()
        news=o.con_mysql(sql = "SELECT COUNT(*) FROM  WHERE DATEDIFF(,NOW())=0")
        return news

    @classmethod
    def getAllbugs(self):
        # 获取总缺陷数
        o=Op_mysql()
        all_bugs=o.con_mysql(sql="")
        return all_bugs

    @classmethod
    def getProjectname(self):
        #获取项目名称
        o=Op_mysql()
        projectname = o.con_mysql_list(sql="")
        return projectname


    @classmethod
    # 获取今天新增bug的负责人
    def getassigned(self):
        o = Op_mysql()
        assigned = o.con_mysql_list(sql="")
        return assigned
    @classmethod
    def getWaitingBugs(self):
        o = Op_mysql()
        WaitingBugs=o.con_mysql(sql="")
        return WaitingBugs

    @classmethod
    #获取今日关闭的缺陷状态
    def getClosebugs(self):
        o = Op_mysql()
        CloseBugs = o.con_mysql(sql="")
        return CloseBugs
    @classmethod
    #今日修复缺陷数
    def getFixbugs(self):
        o = Op_mysql()
        fixbugs = o.con_mysql(sql="")
        return fixbugs

if __name__ == "__main__":
    op_mysql=Op_mysql
    op_mysql.getProjectname()
    op_mysql.getAllbugs()
    op_mysql.getWaitingBugs()
    op_mysql.getClosebugs()
    op_mysql.getassigned()

 四、编写DingMsg.py的代码

# coding: utf-8
#!/usr/bin/python
import requests, json
from pymysql import connect
import mysql
from mysql import Op_mysql
import nnlog

log = nnlog.Logger('DingMsg.log',level='info',backCount=5,when='D')
# 发送钉钉消息
def send_dingtalk_message(url,content,mobile_list):
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content":content
        },
        "at": {
            # 要@的人
            "atMobiles": mobile_list,
            # 是否@所有人
            "isAtAll": False
        }
    }
    r = requests.post(url, headers=headers, data=json.dumps(data))
    log.info(r.text)
    return r.text


if __name__ == "__main__":

    # 获取dingtalk token url
    access_token = ''
    op_mysql = Op_mysql
    # 获取总缺陷数
    all_bugs = op_mysql.getAllbugs()
    # 获取今日提交的缺陷数
    new_bugs = op_mysql.getTodayNewbugs()
    # 获取项目名称
    projectname=op_mysql.getProjectname()
    namelist=[]
    for name in projectname:
        for n in name:
            namelist.append(n)
    if len(namelist)<=0:
        namelist.append("中台")
    log.info(namelist)
    # 获取待解决缺陷数
    waitingbugs = op_mysql.getWaitingBugs()
    #今日修复缺陷数
    fixbugs=op_mysql.getFixbugs()
    #今日关闭缺陷数
    closebugs=op_mysql.getClosebugs()
    #获取手机号列表
    phonenumber_list = op_mysql.getassigned()
    # 钉钉消息内容,注意{测试日报}是自定义的关键字,需要在钉钉机器人设置中添加,这样才能接收到消息
    content = F"----测试日报----\n新增缺陷项目名称:{namelist}\n今日新增缺陷数:{new_bugs}\n今日关闭缺陷数:{closebugs}\n今日修复缺陷数:{fixbugs}\n待解决缺陷数:{waitingbugs}\n总缺陷数:{all_bugs}\n"
    # 要@的人的手机号,可以是多个,注意:钉钉机器人设置中需要添加这些人,否则不会接收到消息
    mobile_list = []
    #从列表中取出手机号
    for a in phonenumber_list:
        for b in a:
            mobile_list.append(b)
    log.info(mobile_list)
    # 发送钉钉消息
    try:
        if new_bugs >= 0:
            send_dingtalk_message(access_token, content, mobile_list)
    except Exception as e:
        log.error(e)


四、获取钉钉机器人的url

打开钉钉群,点击【群设置】-【智能群助手】添加机器人,选择自定义的机器人,选择自定义关键词,关键词填写 测试日报  。完成后将url填写到DingMsg.py的main方法的access_token值上

python实现发送钉钉消息_第1张图片

 python实现发送钉钉消息_第2张图片 五、执行DingMsg的main方法,验证消息能否发送成功

python实现发送钉钉消息_第3张图片

 

六、在服务器上设置定时任务、定时执行脚本(crontal)

linux服务器定时任务编辑命令 crontab -e 

你可能感兴趣的:(python脚本,python)