python实现禅道bug定时通知钉钉群

共5个py文件搞定每天5点禅道状态通知给项目群,告知项目相关进度

1、数据库

"""
-*- coding: utf-8 -*-
开发人员   :咸鱼
文件名称   :DB.PY
开发工具   :PyCharm
联系方式   :[email protected]
脚本说明   :数据库链接封装,无需修改,这里连接的是禅道的数据库
"""
'''
读取数据库数方法封装
'''''
import pymysql
from pymysql.cursors import DictCursor
# from common.yamlHandler import YamlHandler
# from config.config import config
from collections import Counter


class DBHandler():
    # 把项目相关数据放到配置文件进行管理,把数据库配置项设置成变量
    def __init__(self,host,port,user,password,charset,database,cursorclass=DictCursor):

        # 初始化,连接数据库
        self.conn = pymysql.Connect(host=host,
                    port=port,
                    user=user,
                    password=password,
                    charset=charset,
                    database=database,
                    cursorclass=cursorclass) # DictCursor要导入,将查询的数据类型转化成字典类型
        #建立游标
        self.cursor = self.conn.cursor()


    def query(self,sql,args=None,one=False):  # one=False 只查询一条数据
        # 查询数据库,sql语句,agrs查询条件
        self.cursor.execute(sql,args)
        self.conn.commit()   # 提交事务,就不用每次都创建游标,后面连接都是最新的数据
        if one:
            print("_________")
            return self.cursor.fetchone()
        data = (self.cursor.fetchall())
        # counts = len(data)
        return data


    def close(self):
        # 关闭连接
        self.conn.close()
        self.cursor.close()


if __name__=='__main__':
    db = DBHandler(host='xxx',
                   port=xxx,
                   user='xxx',
                   password='xxx',
                   charset='utf8',
                   database='xxx',
                   )
    # 执行查询语句
    query_result_resolved = db.query('sql语句')
    
    """
    print(query_result_resolved)
    print("""
    【xxx】项目bug情况如下总bug数为:{0}.详情详情如下:
    1、今日新增bug数:{1}
    2、已解决待关闭bug数:{2}个
    3、激活bug数:{3}个
    请各位负责人及时关注进度
    """    .format(len(query_result_all),len(query_result_today_add),len(query_result_resolved),len(query_result_active)),)

2、钉钉

"""
-*- coding: utf-8 -*-
开发人员   :咸鱼
文件名称   :DD.PY
开发工具   :PyCharm
联系方式   :[email protected]
脚本说明   :钉钉发送消息封装,需要修改的参数【钉钉token 和 项目在禅道的名称】
"""
import requests, json
import schedule
import time
import GET_bugdata
from GET_bugdata import Get_date
import logging
from pymysql import connect



# 发送钉钉消息
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)
    print("*******************",r.json())
    return r.text

3、获取数据库数据

"""
-*- coding: utf-8 -*-
开发人员   :xxx
文件名称   :3.PY
开发工具   :PyCharm
联系方式   :[email protected]
脚本说明   :封装的获取禅道数据库bug相关数据脚本,可以根据需要扩展获取的数据
"""
from DB import DBHandler
from Time_Handler import Get_time
db = DBHandler(host='xxx',
                          port=xxx
                          user='xxx',
                          password='xxx',
                          charset='utf8',
                          database='xxx',
                          )


class Get_date:

    def getTodayNewbugs(self, product_name):
        new_bug = db.query(
        'select * from zt_bug where openedDate BETWEEN %s AND %s and zt_bug.product in (select id from zt_product where name=%s);',args=[Get_time()[0],Get_time()[1],product_name])
        return new_bug

    def getAllbugs(self, product_name):
        all_bug = db.query('select * from zt_bug where zt_bug.product in (select id from zt_product where name=%s);', args=[product_name])
        return all_bug

    def getActivebugs(self, product_name):
        active_bug = db.query('select * from zt_bug where status="active" and zt_bug.product in (select id from zt_product where name=%s);', args=[product_name])
        return active_bug

    def getResolvedbugs(self, product_name):
        resolved_bugs = db.query('select * from zt_bug where status="resolved" and zt_bug.product in (select id from zt_product where name=%s);', args=[product_name])
        return resolved_bugs


    def getTodaylatebugs(self, product_name):
        todaylatebugs = db.query('select * from zt_bug where openedDate<%s and status="active" and zt_bug.product in (select id from zt_product where name=%s)', args=[Get_time()[0],product_name])
        return todaylatebugs


if __name__=="__main__":
    # print(Get_date().getAllbugs('禅道产品名称'))
    print(Get_date().getTodaylatebugs('禅道产品名称'))

4、各种时间格式库

"""
-*- coding: utf-8 -*-
开发人员   :咸鱼
文件名称   :Time_Handler.PY
开发工具   :PyCharm
联系方式   :[email protected]
脚本说明   : 各种时间格式库,根据需要可自行扩展
"""
import datetime


def Get_time():

    # 获取当前时间,日期形式
    now = datetime.datetime.now()
    now_today = now.strftime('%Y-%m-%d')

    # 获取当天0点时间
    zeroToday = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,
                                         microseconds=now.microsecond)
    # 获取当天23点59分59秒
    lastToday = zeroToday + datetime.timedelta(hours=23, minutes=59, seconds=59)


    return zeroToday,lastToday,now_today

if __name__=="__main__":
    print(Get_time()[0])
    print(Get_time()[2])

5、run文件

"""
-*- coding: utf-8 -*-
开发人员   :咸鱼
文件名称   :run.PY
开发工具   :PyCharm
联系方式   :[email protected]
脚本说明   :
"""

import schedule
from DD import send_dingtalk_message
from GET_bugdata import Get_date
from Time_Handler import Get_time
import time

# 获取dingtalk token url,复制自己想通知的群的机器人的token
access_token = 'xxx'

get_data = Get_date()
# 这里要填写自己的项目名称,禅道的产品名称
product_name = 'xxx'

# 获取项目总缺陷数
all_bug = get_data.getAllbugs(product_name)

# 获取今日提交的缺陷数
new_bug = get_data.getTodayNewbugs(product_name)

# 获取激活缺陷数
active_bug = get_data.getActivebugs(product_name)

# 获取今天之前未解决的缺陷数
todaylatebugs = get_data.getTodaylatebugs(product_name)

# 获取手机号列表
# phonenumber_list = op_mysql.getassigned()

# 钉钉消息内容,注意{测试日报}是自定义的关键字,需要在钉钉机器人设置中添加,这样才能接收到消息
content = F"""
------项目测试日报------
日期:{Get_time()[2]}
项目名称:{product_name}
项目缺陷概况:
-项目总缺陷数:{len(all_bug)}个
-今日新增缺陷数:{len(new_bug)}个
-待解决缺陷总数:{len(active_bug)}个
-今日之前未解决缺陷数:{len(todaylatebugs)}个
项目进度就快完成啦,小伙伴们一起冲鸭!
"""
print("_____________________",content)
# 要@的人的手机号,可以是多个,注意:钉钉机器人设置中需要添加这些人,否则不会接收到消息
# mobile_list = []
# 从列表中取出手机号
# for a in phonenumber_list:
#     for b in a:
#         mobile_list.append(b)
# log.info(mobile_list)

# 发送钉钉消息
schedule.every().day.at("14:02").do(send_dingtalk_message,url=access_token,content=content)
while True:
    # run_pending:运行所有可以运行的任务
    schedule.run_pending()
    time.sleep(1)

# try:
#     if len(all_bug) >= 0:
#         send_dingtalk_message(access_token, content)
# except Exception as e:
#     print(e)

你可能感兴趣的:(python,bug,钉钉)