共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)