测试管理_利用python连接禅道数据库并自动统计bug数据到钉钉群

news/2024/7/24 11:49:21 标签: python, 数据库, bug, 自动化

pythonbug_0">测试管理_利用python连接禅道数据库并统计bug数据到钉钉

这篇不多赘述,直接上代码文件。

另文章基础参考博文:参考博文

加以我自己的需求优化而成。

统计的前提

以下代码统计的前提是禅道的提bug流程应规范化

  • bug未解决不删除
  • bug未关闭不删除

db_config.py

连接数据库的操作

python">#coding=utf-8
#!/usr/bin/python3

class mysql_config():
    '''def __init__(self,name):
        #print 'aaaa'
        self.name = name
        print name
    '''

    def get_config(self, name):#建立一个配置,后续通过这个配置和数据库建立连接,创建游标
        self.name = name
        config = {
            'zentao': {
                'host': '192.****.****.*',
                'user': '****',
                'passwd': '',
                'db': 'zentao',
                'port': ****,
                'charset': 'utf8'  # 这里是解决中文乱码情况
            },
        }
        return config[name]

mysql.py

连接禅道数据库并统计的操作

python">#coding=utf-8
#!/usr/bin/python3

#import MySQLdb
import re
import pymysql
import datetime
from db_config import mysql_config
m_config = mysql_config()#实例化mysql_config类


class db_mysql():
    def __init__(self):
        print('class:db_mysql -import -true')
        # 离职人员u.deleted=1

    # 连接mysql
    def connect(self, name):
        # self.sql  = sql
        self.name = name
        config = m_config.get_config(name)  # 引用配置的获取链接方法
        db = pymysql.connect(**config)#建立连接
        cursor = db.cursor()#建立游标
        return cursor


    # 执行Sql语句
    def execute(self, cursor, sql):
        cursor.execute(sql)
        return cursor

    # 获取全部结果
    def fetchall(self, cursor):
        data = cursor.fetchall()
        # print("获取所有结果fetchall:"+data)
        return data

    # 获取一个结果
    def fetchone(self, cursor):
        data1=cursor.fetchone()
        # print("获取单个结果fetchall:" + data1)
        return data1



    # 查询bug汇总(年度)就只统计个总数,总新增bug总数包含已关闭的
    # 本年度新增bug总情况,如效果图1
    def bug_total(self, cursor, now,begin_day,total_day):
        """
        最近总的BUG情况统计统计
        :param: day 根据输入天数
        :return:
        """
     

        #在"%s" and "%s"期间 新增bug
        new_near_bug_sql = """SELECT COUNT(*) as new_near_bug from zt_bug where openedDate between "%s" and "%s" and deleted='0';""" % (begin_day, now)
        cursor.execute(new_near_bug_sql)
        new_near_bug = cursor.fetchone()
        # print("新增bug数")
        # print(new_near_bug)

        # 在"%s" and "%s"期间已解决bug
        close_bug_sql = """SELECT COUNT(*) as close_bug from zt_bug where status = "closed" and openedDate between "%s" and "%s" and deleted='0';""" % (begin_day, now)#"%s"表示这里将被替换成一个新的字符串,依次为recent_sevenday, now
        cursor.execute(close_bug_sql)
        close_bug = cursor.fetchone()
        # print("已解决bug数")
        # print(close_bug)

        # 在"%s" and "%s"期间未解决bug
        open_bug_sql = """SELECT COUNT(*) as open_bug from zt_bug where status = "active" and openedDate between "%s" and "%s" and deleted='0';""" % (begin_day, now)
        cursor.execute(open_bug_sql)
        open_bug = cursor.fetchone()
        # print("没解决bug数",)
        # print(open_bug)

        # 在"%s" and "%s"期间已解决待验证bug
        close_unbug_sql = """SELECT COUNT(*) as close_unbug from zt_bug where status = "resolved" and openedDate between "%s" and "%s" and deleted='0';""" % (begin_day, now)
        cursor.execute(close_unbug_sql)
        close_unbug = cursor.fetchone()
        # print("已解决待验证bug数", )
        # print(close_unbug)

        # 在"%s" and "%s"期间,研发人员发生bug数排行。条件:时间,不剔除已删除的bug,如效果图3
        dev_bug_sql = """SELECT COUNT(*) num,realname FROM zt_bug b INNER JOIN zt_user u ON u.account = b.resolvedBy
                            WHERE DATE_FORMAT(b.openedDate, '%%Y-%%m-%%d') between '%s' and '%s'
                            AND u.deleted='0' AND u.role='dev' 
                            GROUP BY b.resolvedBy ORDER BY num DESC;""" % (total_day, now)
        cursor.execute(dev_bug_sql)
        dev_bug = cursor.fetchall()
        print("研发人员发生bug数降序排行", )
        # print(dev_bug)
        add_str_dev_bug = ''  # 空字符串
        #让降序排行一行一人
        for _tuple in dev_bug:
            a = ' \n \n {0}'.format(
                _tuple)
            add_str_dev_bug += str(a)

        # print(add_str_dev_bug)

        # 在"%s" and "%s"期间研发人员BUG被激活次数(非一次性修复),不剔除已删除的bug,如效果图4
        activation_bug_sql = """SELECT SUM(激活次数) 激活次数,中文姓名 FROM (SELECT b.id,COUNT(*) 激活次数,u.realname 中文姓名 FROM
            zt_bug b INNER JOIN zt_action a ON a.objectID = b.id INNER JOIN zt_user u ON u.account = b.resolvedBy
            WHERE DATE_FORMAT(b.openedDate, '%%Y-%%m-%%d') between "%s" and "%s" AND a.objectType = 'bug' AND a.action = 'activated'
            AND u.deleted='0'  and u.role='dev'
            GROUP BY b.id ORDER BY 激活次数 DESC) tem GROUP BY tem.中文姓名 ORDER BY 激活次数 DESC;""" % (total_day, now)
        cursor.execute(activation_bug_sql)
        activation_bug = cursor.fetchall()
        print("研发人员BUG被激活次数(非一次性修复)", )
        print(activation_bug)
        add_str_activation_bug = ''  # 空字符串
        #让降序排行一行一人
        for _tuple in activation_bug:
            a = ' \n \n {0}'.format(
                _tuple)
            #(Decimal('19')中的(Decimal('')去掉
            a = re.sub('[(Decimal('')]', '', a)
            # print(a)
            add_str_activation_bug += str(a)

        # print("拆开元组,研发人员BUG被激活次数(非一次性修复)", )
        # print(add_str_activation_bug)


        # 提BUG、指派、转派【已解决待验证】、改BUG,=====================\n\n研发人员BUG被激活次数(非一次性修复):{5}\n\n
        statistics_bug = "本年度新增bug总情况({6}~{7}) \n\n 新增BUG数:{0} \n\n 未关闭BUG数:{1} \n\n 已关闭BUG数:{2} \n\n 已解决待验证BUG数:{3}\n\n =====================\n\n研发人员今年(2023)BUG数倒序:\n\n{4}\n\n =====================\n\n研发人员今年BUG被激活次数(非一次性修复):\n\n{5}\n\n".format(
            new_near_bug[0], open_bug[0], close_bug[0], close_unbug[0], add_str_dev_bug, add_str_activation_bug, total_day, now)
        # print("bug的统计汇总:"+statistics_bug)
        return statistics_bug

    # 查询bug汇总(本周),就只统计个总数,总新增bug总数包含已关闭的
    # 本周新增bug总情况
    def bug_total_week(self, cursor,  begin_day, now):
        """
        最近总的BUG情况统计统计
        :param: day 根据输入天数
        :return:
        """
        # 在"%s" and "%s"期间新增bug
        new_near_bug_sql = """SELECT COUNT(*) as new_near_bug from zt_bug where openedDate between "%s" and "%s" and deleted='0';""" % (
        begin_day, now)
        cursor.execute(new_near_bug_sql)
        new_near_bug = cursor.fetchone()
        # print("新增bug数")
        # print(new_near_bug)

        # 在"%s" and "%s"期间已解决bug
        close_bug_sql = """SELECT COUNT(*) as close_bug from zt_bug where status = "closed" and openedDate between "%s" and "%s" and deleted='0';""" % (
        begin_day, now)  # "%s"表示这里将被替换成一个新的字符串,依次为recent_sevenday, now
        cursor.execute(close_bug_sql)
        close_bug = cursor.fetchone()
        # print("已解决bug数")
        # print(close_bug)

        # 在"%s" and "%s"期间未解决bug
        open_bug_sql = """SELECT COUNT(*) as open_bug from zt_bug where status = "active" and openedDate between "%s" and "%s" and deleted='0';""" % (
        begin_day, now)
        cursor.execute(open_bug_sql)
        open_bug = cursor.fetchone()
        # print("没解决bug数",)
        # print(open_bug)

        # 在"%s" and "%s"期间已解决待验证bug
        close_unbug_sql = """SELECT COUNT(*) as close_unbug from zt_bug where status = "resolved" and openedDate between "%s" and "%s" and deleted='0';""" % (
        begin_day, now)
        cursor.execute(close_unbug_sql)
        close_unbug = cursor.fetchone()
        # print("已解决待验证bug数", )
        # print(close_unbug)


        # 提BUG、指派、转派、改BUG,=====================\n\n研发人员BUG被激活次数(非一次性修复):{5}\n\n
        # print("bug的统计汇总:"+statistics_bug)
        statistics_bug_week = "=====================\n\n本周新增bug总情况({4}~{5}) \n\n 新增BUG数:{0} \n\n 未关闭BUG数:{1} \n\n 已关闭BUG数:{2} \n\n 已解决待验证BUG数:{3}\n\n =====================\n\n".format(
            new_near_bug[0], open_bug[0], close_bug[0], close_unbug[0], begin_day, now)
        return statistics_bug_week



        # 查询bug明细,具体以人为维度,统计每个人的bug明细,以年为维度
    def bug_detail_year(self, cursor, this_year, now):
        """
        包含姓名的年度明细
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """

        cursor.execute(
            """select "%s" as 开始时间 ,"%s" as 结束时间,u.realname as 姓名 ,count(*) as 总bug数, sum(case when b.status="active" then 1 else 0  end) as 未解决bug数 from zt_bug b left join zt_user u on b.assignedTo = u.account AND u.deleted='0' and u.role='dev'  where  b.deleted='0' AND  b.status and b.openedDate BETWEEN "%s" and "%s" group by b.assignedTo order by 未解决bug数 desc;""" % (
                this_year, now, this_year, now))
        data = cursor.fetchall()  # 把sql执行的结果赋值给data,data的格式为元组,元组套元组
        data2 = data[1:]  # 取除列表第一个外的其他数据
        # print(data2)
        add_str_year = ''  # 空字符串
        for _tuple in data2:
            # print("_tuple:"+str(_tuple))
            if _tuple[2] is None:
                print("姓名为空不输出")

            elif _tuple[4]==0:
                print("累计未解决等于0,不输出")

            else:
                a = '\n \n 姓名:{0},累计未解决bug数:{1}'.format(_tuple[2], _tuple[4])

                add_str_year += a
        add_str_year="\n \n =====================\n \n历史遗留:未解决bug数统计 "+add_str_year
                # add_str_1="以下是研发人员现存bug统计明细 \n \n"+add_str
        # print("add_str--year,bug明细:" + add_str_year)
        return cursor, add_str_year

    # 查询bug明细,具体以人为维度,统计每个人的bug明细,如效果图2
    def bug_detail(self, cursor, recent_sevenday,now):
        """
        本周的带姓名明细
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """
        db = db_mysql()
        cursor.execute(
            """select "%s" as 开始时间 ,"%s" as 结束时间,u.realname as 姓名 ,count(*) as 总bug数, sum(case when b.status="active" then 1 else 0  end) as 未解决bug数,sum(case when b.status="resolved" then 1 else 0 end) as 已解决待验证bug数,sum(case when b.status="closed" then 1 else 0 end) as 已解决bug数 from zt_bug b left join zt_user u on b.assignedTo = u.account  AND u.deleted='0'  where  b.deleted='0' AND  b.status and b.openedDate BETWEEN "%s" and "%s" group by b.assignedTo order by 总bug数 desc;""" % (
                recent_sevenday, now, recent_sevenday, now))
        data = cursor.fetchall()#把sql执行的结果赋值给data,data的格式为元组,元组套元组
        # data2=data[1:]
        # print(data2)
        add_str = ''#空字符串
        for _tuple in data:
            # print("_tuple:"+str(_tuple))
            if _tuple[2] is None:

                print("空值不输出")
            else:
                name = _tuple[2]
            
                a = '\n \n =====================\n \n 姓名:{2}\n \n开始时间:{0}\n \n结束时间:{1}\n \n总bug数:{3}\n \n未解决bug数:{4}\n \n已解决待验证bug数:{5}\n \n'.format(
                _tuple[0], _tuple[1], name, _tuple[3], _tuple[4],_tuple[5]
            )

                add_str += a
            # add_str=add_str+db.bug_detail_year(db.connect('zentao'), "2018-01-01", "2023-04-13")[1]+a
            # add_str_1="以下是研发人员现存bug统计明细 \n \n"+add_str
        print("add_str:"+add_str)
        return cursor, add_str

#统计bug明细详情title
    def bug_detail_title_delay(self, cursor, now):
        """
        包含姓名的年度明细,bug明细详情,bug标题
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """
        cursor.execute(
                      """SELECT u.realname as 姓名 ,b.title AS 已延期bug标题
                      FROM zt_bug b left join zt_user u on b.assignedTo = u.account WHERE DATEDIFF(b.deadline,"%s") 
                      <=0 and b.status="active" and u.deleted="0" and u.role="dev" and  b.deleted="0";"""% (now))

        data = cursor.fetchall()  # 把sql执行的结果赋值给data,data的格式为元组,元组套元组
        # # data2 = data[1:]  # 取除列表第一个外的其他数据
        data2 = data[0:]
        print(data2)
        add_str_year = ''  # 空字符串
        for _tuple in data2:
            print("_tuple:"+str(_tuple))
            a = '\n \n 姓名:{0},bug标题:{1} \n '.format(_tuple[0], _tuple[1])
            add_str_year += a
        add_str_year="\n \n =====================\n \n =====================\n \n =====================\n \n 延期未处理bug明细如下: "+add_str_year
        print(add_str_year)
        return add_str_year

    # 统计延期bug明细详情title
    def bug_detail_title_year(self, cursor, this_year, now):
        """
        包含姓名的年度明细,bug明细详情,bug标题
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """

        cursor.execute(

            """select "%s" as 开始时间 ,"%s" as 结束时间,u.realname as 姓名 ,b.title AS bug标题 from zt_bug b left join zt_user u on b.assignedTo = u.account where u.deleted='0' AND b.deleted='0' AND b.`status`='active' 

            and b.openedDate BETWEEN "%s" and "%s"  order by 姓名 desc;""" % (
                this_year, now,
                # now,
                this_year, now))
        # '''
        data = cursor.fetchall()  # 把sql执行的结果赋值给data,data的格式为元组,元组套元组
        # # data2 = data[1:]  # 取除列表第一个外的其他数据
        data2 = data[0:]
        # print("data2~~~")
        # print(data2)
        add_str_year = ''  # 空字符串
        for _tuple in data2:
            print("_tuple:" + str(_tuple))
            if _tuple[2] is None:
                print("姓名为空不输出")
            #     elif _tuple[4]==0:
            #         print("累计未解决等于0,不输出")
            else:
                #         # a = '\n \n 姓名:{0},累计未解决bug数:{1}'.format(_tuple[2], _tuple[4])
                a = '\n \n \n \n 姓名:{0},标题:{1}'.format(_tuple[2], _tuple[3])
                #
                add_str_year += a
        add_str_year = "\n \n =====================\n \n历史遗留:bug明细 " + add_str_year
        # add_str_1="以下是研发人员现存bug统计明细 \n \n"+add_str
        print("add_str--year:" + add_str_year)
        print("历史bug_title" + str(data))
        return add_str_year

#关于年度未解决bug数的html表,效果如下图:点击查看历史遗留bug详情效
    def bug_detail_title_year2(self, cursor, this_year, now):
        """
        包含姓名的年度明细,bug明细详情,bug标题
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """

        cursor.execute(
"""
select p.name AS 项目名称 ,"%s" as 开始时间 ,"%s" as 结束时间,u.realname as 姓名 ,b.title AS bug标题,b.id AS bug_id
from zt_bug b 
left join zt_user u on b.assignedTo = u.account
left join zt_project p on p.id = b.project
where u.deleted='0' AND b.deleted='0' AND b.`status`='active' 
and b.openedDate BETWEEN "%s" and "%s"  order by 姓名 desc;
"""
   
% (
                this_year, now,
                # now,
                this_year, now))
        data = cursor.fetchall()

        return data


# 关于延期未解决bug数的html表
    def bug_delay_bug_year(self, cursor, now):
        """
        包含姓名的年度明细,bug明细详情,bug标题
        最近总的BUG情况统计明细数据
        :param: day 根据输入天数
        :return:
        """

        cursor.execute(
"""
 SELECT p.name AS 项目名称  ,u.realname as 姓名 ,b.title AS 已延期bug标题, b.keywords AS 原因
FROM zt_bug b left join zt_user u on b.assignedTo = u.account 
left join zt_project p on p.id = b.project
WHERE DATEDIFF(b.deadline,"%s")  <=0 and b.status="active" and u.deleted="0"  
and u.role="dev" and  b.deleted="0" group by 已延期bug标题 order by 项目名称 desc;
"""% (now))

        data = cursor.fetchall()

        return data

#以下为加入参数测试上述sql统计
now = datetime.datetime.now().strftime("%Y-%m-%d")
db=db_mysql()
# db.bug_detail_year(db.connect('zentao'),  "2020-04-07", "2023-08-25")
#禅道bug标题明细
# db.bug_detail_title_year(db.connect('zentao'),  "2023-01-01", now)
#禅道延期bug明细
# db.bug_detail_title_delay(db.connect('zentao'),  now)
# db.bug_detail(db.connect('zentao'),  "2023-09-18", "2023-09-25")
# db.bug_total(db.connect('zentao'),now,"2023-01-01", "2023-01-01")

一周统计
效果图1
每个开发维度的统计
效果图2

所有开发bug总数的倒序
效果图3
所有开发bug激活数的倒序
效果图4

dingtalk.py

统计结果发送到钉钉的操作

python">#coding=utf-8
#!/usr/bin/python3

import json
import urllib.request
import datetime
from dingtalkchatbot.chatbot import DingtalkChatbot, FeedLink

class ding_talk():
    def send_bug(self,url, data_file,sign_mark):#设置发送的信息样式,效果如下截图
        '''

        :param url: 钉钉机器人的webhook
        :param data_file: 查看详情中的markdown信息
        :param sign_mark: 用户而可以自定义为本周、还是本月的禅道BUG情况统计
        :return:
        '''
        xiaoding = DingtalkChatbot(url)
        # Markdown消息@所有人
        now = datetime.datetime.now().strftime("%Y%m%d")
        # print(now)
       
        xiaoding.send_markdown(title='BUG统计%s' % (now),
                               text='**禅道BUG情况统计**\n\n 各位同事,以下是禅道BUG情况统计。统计结果供各组组长参考,烦请做好督促,尽快处理bug!\n\n=====================\n\n {0} \n\n[查看详情](http://192.****.****.*/zentao/html/bug_detail_{1}.html) \n'.format(
                                   data_file,now), is_at_all=False)

    def bug_html(self, lis, html_file):
        """
        对查询bug明细转html文件
        :param lis
        :param html_file
        """

        conten_title = []
        for key in lis.description:
            conten_title.append(key[0])
        a = "</th><th>".join(conten_title)
        con_title = "<tr><th>" + a + "</th></tr>"
        conten_val = ""
        con = ""
        lis_arr = lis.fetchall()
        for i in range(0, len(lis_arr)):
            for index, v in enumerate(lis_arr[i]):
                if index == 0:
                    conten_val = "<tr><td>" + lis_arr[i][index] + "</td><td>"
                    con = con + conten_val;
                    continue
                con = con + str(lis_arr[i][index]) + "</td><td>"
            con = con[0:-2] + "r>"
            con = con + "\n"
        head = """<meta charset="utf-8">
                <style type="text/css">
                table.tftable {font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #9dcc7a;border-collapse: collapse;}
                table.tftable th {font-size:12px;background-color:#abd28e;border-width: 1px;padding: 8px;border-style: solid;border-color: #9dcc7a;text-align:left;}
                table.tftable tr {background-color:#ffffff;}
                table.tftable td {font-size:12px;border-width: 1px;padding: 8px;border-style: solid;border-color: #9dcc7a;}
                </style>\n<table id="tfhover" class="tftable" border="1">\n"""
        last = "</table>"
        htm = head + con_title + con + last
        with open(html_file, "w", encoding="utf-8") as f:
            f.write(htm)

       

钉钉通知效果

python">禅道BUG情况统计

各位同事,以下是禅道BUG情况统计。统计结果供各组组长参考,烦请做好督促,尽快处理bug=====================

=====================

本周新增bug总情况(2023-01-28~2023-02-04)

新增BUG数:19

未关闭BUG数:1

已关闭BUG数:17

已解决待验证BUG数:1

=====================

本年度新增bug总情况(2023-01-01~2023-02-04)

新增BUG数:2231

未关闭BUG数:3

已关闭BUG数:2210

已解决待验证BUG数:18

=====================

研发人员今年(2023)BUG数倒序:
    
'27', '周**'

'24', '吴**'

'18', '郑**'

'12', '王**'

=====================

研发人员今年BUG被激活次数(非一次性修复):

'27', '周**'

'24', '吴**'

'18', '郑**'

'12', '王**'


=====================

姓名:周**

开始时间:2023-01-28

结束时间:2023-02-04bug数:1

未解决bug数:0

已解决待验证bug数:1

=====================

姓名:吴**

开始时间:2023-01-28

结束时间:2023-02-04bug数:1

未解决bug数:1

已解决待验证bug数:0

=====================

历史遗留:未解决bug数统计

姓名:吴**,累计未解决bug数:1

查看历史遗留bug详情


点击查看历史遗留bug详情效果如下
图5

run.py

所有代码文件执行入口

python">#coding=utf-8
#!/usr/bin/python3

import datetime

from mysql import db_mysql
from dingtalk import ding_talk
ding_ding = ding_talk()
mysql_obj = db_mysql()

#获取时间:
now = datetime.datetime.now().strftime("%Y-%m-%d")

now1=(datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y-%m-%d")#当前时间加一天,并展示为2023-01-01形式;如果只获取当前时间,则只统计到当前时间凌晨0点
print("~~~now1的,时间"+now1)
recent_sevenday = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime("%Y-%m-%d")
print("~~~一周开始的时间"+recent_sevenday)
this_year = "2023-01-01"
print("~~~今年的时间"+this_year)


#bug明细写入html
cursor_connect = mysql_obj.connect('zentao')#先连接数据库
sign_mark="本周"
#因为bug_detail有两个返回值,所以要赋值给两个变量。如果只取一个就用索引recent_sevenday,

#查询延期未处理bug明细,姓名+标题
# add_str_delay = mysql_obj.bug_detail_title_delay(cursor_connect, now)
#查询本周bug明细,具体到每个人有多少未处理
cursor_execute, add_str = mysql_obj.bug_detail(cursor_connect, recent_sevenday,  now)
#查询历史bug明细,只显示姓名和bug
cursor_execute_year, add_str_year = mysql_obj.bug_detail_year(cursor_connect,  "2015-01-01", now)
#以下详细的明细。统计开发人员未解决bug数,已关闭bug数,已解决待关闭bug数的统计时间,bug总数降序和bug被激活的时间,print("seven_count:"+seven_count)
seven_count = mysql_obj.bug_total(cursor_connect, now, this_year, this_year)#最近总的BUG情况统计,第一个是连接数据库;第二个是当日时间;
#以下简单的数量统计。统计本周新增bug总情况,print("seven_count_week:"+seven_count_week)
seven_count_week=mysql_obj.bug_total_week(cursor_connect, recent_sevenday, now)

#统计历史bug的标题明细
# 生成html
seven_count_title2 = mysql_obj.bug_detail_title_year2(cursor_connect, this_year, now)
# 不生成html + seven_count_title历史bug的标题明细
# seven_count_title = mysql_obj.bug_detail_title_year(cursor_connect, this_year, now)
#全部都展示出来
seven_count=seven_count_week + seven_count + add_str + add_str_year
            # +add_str_delay+seven_count_title


#只展示
# seven_count=add_str_delay+add_str

#将统计生成的html放在windows的路径,如要换在服务器上,要换对应路径
# html = r"D:\03code\zentao -git版本 - 增加bug明细\test.html"
#将统计生成的html放在 服务器的指定路径,上传git版本
html = "/home/tomcat/tomcat7/webapps/test/bugdetail.html".format(now)
ding_ding.bug_html2(seven_count_title2, html)


print("run_week的输出~~~~~~~~~~~~~~~~~~~~"+seven_count)
#测试组1
# url="https://oapi.dingtalk.com/robot/send?access_token=****"
#研发组
url="https://oapi.dingtalk.com/robot/send?access_token=****"
ding_ding.send_bug(url, seven_count, sign_mark)#ding_talk的send_bug方法,发送send_markdown;def send_bug(self,url, data_file,sign_mark)


           # +add_str_delay+seven_count_title


#只展示
# seven_count=add_str_delay+add_str

#将统计生成的html放在windows的路径,如要换在服务器上,要换对应路径
# html = r"D:\03code\zentao -git版本 - 增加bug明细\test.html"
#将统计生成的html放在 服务器的指定路径,上传git版本
html = "/home/tomcat/tomcat7/webapps/test/bugdetail.html".format(now)
ding_ding.bug_html2(seven_count_title2, html)


print("run_week的输出~~~~~~~~~~~~~~~~~~~~"+seven_count)
#测试组1
# url="https://oapi.dingtalk.com/robot/send?access_token=****"
#研发组
url="https://oapi.dingtalk.com/robot/send?access_token=****"
ding_ding.send_bug(url, seven_count, sign_mark)#ding_talk的send_bug方法,发送send_markdown;def send_bug(self,url, data_file,sign_mark)



http://www.niftyadmin.cn/n/5370762.html

相关文章

Flink从入门到实践(一):Flink入门、Flink部署

文章目录 系列文章索引一、快速上手1、导包2、求词频demo&#xff08;1&#xff09;要读取的数据&#xff08;2&#xff09;demo1&#xff1a;批处理&#xff08;离线处理&#xff09;&#xff08;3&#xff09;demo2 - lambda优化&#xff1a;批处理&#xff08;离线处理&…

flutter 国内源

Flutter 在中国由于网络原因&#xff0c;从官方默认的国外源下载Dart包和Flutter SDK可能会比较慢或者不稳定。为了加速依赖包的获取与Flutter SDK的安装&#xff0c;可以使用国内镜像源。以下是一些国内常用的Flutter和Dart包镜像源&#xff1a; 清华大学开源软件镜像站 Flu…

react中的diff算法

diff算法 对于React团队发现在日常开发中对于更新组件的频率&#xff0c;会比新增和删除的频率更高&#xff0c;所以在diff算法里&#xff0c;判断更新的优先级会更高。对于Vue2的diff算法使用了双指针&#xff0c;React的diff算法没有使用双指针&#xff0c;是因为更新的jsx对…

图形学:Transform矩阵(3维 2维) 平移,旋转,缩放

0. 简介 在图形学领域中&#xff0c;Transform矩阵&#xff08;变换矩阵&#xff09;是一种表示图形对象在二维或三维空间中的位置、方向和大小变化的数学工具。它们用于执行各种图形变换&#xff0c;如平移、旋转、缩放。Transform矩阵通常表示为一个二维或三维矩阵&#xff…

C#面:什么是Code-Behind技术

Code-Behind技术是一种在Web开发中常用的技术&#xff0c;它将前端页面与后端代码分离&#xff0c;使得前端页面的设计和后端代码的逻辑处理可以分别进行。在Code-Behind模式下&#xff0c;前端页面通常是一个标记语言&#xff08;如HTML或ASPX&#xff09;&#xff0c;而后端代…

寒假作业7

sql语句 创建表格 create table 表名 &#xff08;字段名 数据类型&#xff0c;字段名 数据类型&#xff09; create table if not exists 表名 &#xff08;字段名 数据类型&#xff0c; 字段名 数据类型&#xff09; 删除表格 drop table 表名&#xff1b; 插入记录 全字…

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年&#xff0c;法国工程学院院士Mallat教授深受深度学习结构框架思想的启发&#xff0c;提出了基于小波变换的小波时间散射网络&#xff0c;并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络&#xff0c;不同的是其滤波器是预先确定好的小波…