天行健,君子以自强不息;
地势坤,君子以厚德载物!

tapd 项目管理 ,tapd项目运营数据(python自动化统计TAPD缺陷)

市场需求:

工程项目插值操作过程,合作开发须要每晚处置遗留下来瑕疵,不光是轻微/毁灭性瑕疵,须要在正式发布前处置顺利完成。为的是及时处理并行瑕疵处置重大进展,须要每晚统计统计数据bug状况及复原情形并在工程认证工作(民营企业QQ工程项目群)里并行重要信息

标识符:

import requestsimport timeimport jsonimport pandas as pdfrom dateutil.parser import parseimport schedule# 瑕疵年纪统计统计数据def bugs_age(api_user,api_password,workspace_id,startime_endtime):          url = “https://api.tapd.cn/bugs” #以获取缺USB          try:        #============大部份待处置难题:新/再次关上/已化解/挂起/延后postponed/拒绝接受处置/已婉拒(状况:ALL)         send_bugs = []                  register_data = {            “workspace_id”:workspace_id,            “status”: “new|reopened|in_progress”,            “created”: startime_endtime,            “limit”: 200,             }                  result = requests.get(url,params=register_data,auth=(api_user,api_password))                 #print (回到结论:\n,json.dumps(result.json(),indent=4,ensure_ascii=False))                  all_bugs_num = len(result.json()[“data”])                 print (“待处置大部份难题:%s条”%all_bugs_num)         send_age_bugs = []        for i in result.json()[“data”]:             startdate = i[“Bug”][“modified”]             enddate = pd.to_datetime(startdate) + pd.DateOffset(days=7) # 未处置天数5个工作日+2天周末             nowdate = time.strftime(%Y-%m-%d %H:%M:%S,time.localtime())             start_date = parse(startdate)             end_date = parse(str(enddate))                       now_date = parse(nowdate)            if (now_date-end_date).days > -1:                 age = “%s天未处置且无评论”%(now_date-start_date).days                # 判断是否有评论标识符                                  bug_id=i[“Bug”][“id”]                                  comments_num = bugs_comments(api_user,api_password,workspace_id,bug_id)                if comments_num < 1:                    print (bug_id,age)                                          send_age_bugs.append([i[“Bug”][“title”],i[“Bug”][“status”],i[“Bug”][“current_owner”],i[“Bug”][“modified”],age])##                else:##                    pass##                    #print (bug_id,”有评论”)         print (“须要发送未处置bug重要信息:”,send_age_bugs)        return send_age_bugs    except Exception as e:        print (异常:,e)         # 判断bug是否有评论def bugs_comments(api_user,api_password,workspace_id,bug_id):          url = “https://api.tapd.cn/comments” #以获取缺USB          try:         send_bugs = []                  register_data = {            “workspace_id”:workspace_id,            “entry_id”:bug_id,            #”created”: startime_endtime,             “limit”: 1,             }                  result = requests.get(url,params=register_data,auth=(api_user,api_password))                 #print (回到结论:\n,json.dumps(result.json(),indent=4,ensure_ascii=False))                  all_bugs_num = len(result.json()[“data”])        return all_bugs_num                 #print (“待处置大部份难题:%s条”%all_bugs_num)     except Exception as e:         all_bugs_num = 0         print (异常:,e)  # 监控新/再次关上/拒绝接受处置/延后等bug状况,是否会被测试重启或合作开发婉拒def bugs_info(api_user,api_password,workspace_id,startime_endtime):          url = “https://api.tapd.cn/bugs” #以获取缺USB          try:        #============大部份待处置难题:新/再次关上/已化解/挂起/延后/拒绝接受处置/已拒绝(状况:ALL)                  register_data = {            “workspace_id”:workspace_id,            “status”: “reopened|rejected|postponed”,            “created”: startime_endtime,            “limit”: 200,             }                  result = requests.get(url,params=register_data,auth=(api_user,api_password))                 #print (回到结论:\n,json.dumps(result.json(),indent=4,ensure_ascii=False))                  all_bugs_num = len(result.json()[“data”])                 print (“待处置大部份难题:%s条”%all_bugs_num)         a = []         b = []         c = []        for i in result.json()[“data”]:            #print (i)                          if i[“Bug”][“status”] == “reopened”:                 i[“Bug”][“status”] = “再次关上”             elif i[“Bug”][“status”] == “rejected”:                 i[“Bug”][“status”] = “已婉拒”             bugs = [i[“Bug”][“title”],i[“Bug”][“status”],i[“Bug”][“current_owner”]]            #print (bugs)             if bugs[1] == “已婉拒”:                 a.append(bugs)            elif  bugs[1] == “再次关上”:                 b.append(bugs)            elif bugs[1] == “postponed”:                 c.append(bugs)        print (len(a),len(b),len(c))        print (“须要发送的已婉拒bug&再次关上bug&延后bug”,a,b,c)        return a,b,c    except Exception as e:        print (异常:,e)# 按轻微程度统计统计数据def bugs_info(api_user,api_password,workspace_id,startime_endtime):     url = “https://api.tapd.cn/bugs” #以获取缺USB        try:        #==============待处置轻微难题:新/再次关上/拒绝接受处置(状况:轻微/毁灭性)         all_data = []         register_data = {            “workspace_id”:workspace_id,            “status”: “new|reopened|in_progress”,            “severity”: “fatal|serious”,            “created”: startime_endtime,            “limit”: 200,             }         r = requests.get(url,params=register_data,auth=(api_user,api_password))        #print(以获取USB回到结论:,r.json())         bugs_num = len(r.json()[“data”])        print (“待处置轻微以上难题:%s条”%bugs_num)        for i in r.json()[“data”]:            if i[“Bug”][“severity”] == “serious”:                 i[“Bug”][“severity”] = “轻微”                              elif i[“Bug”][“severity”] == “fatal”:                 i[“Bug”][“severity”] = “毁灭性”             if i[“Bug”][“status”] == “new”:                 i[“Bug”][“status”] = “新”             elif i[“Bug”][“status”] == “reopened”:                 i[“Bug”][“status”] = “再次关上”             elif i[“Bug”][“status”] == “in_progress”:                 i[“Bug”][“status”] = “拒绝接受处置”             #a = “标题:%s,状况:%s,轻微程度:%s,处置人:%s,概率:%s”%(i[“Bug”][“title”],i[“Bug”][“status”],i[“Bug”][“severity”],i[“Bug”][“current_owner”],i[“Bug”][“custom_field_7”])             a = [i[“Bug”][“title”],i[“Bug”][“status”],i[“Bug”][“severity”],i[“Bug”][“current_owner”],i[“Bug”][“frequency”],i[“Bug”][“module”],i[“Bug”][“id”]]            #print (a)             all_data.append(a)        print (all_data)    except Exception as e:        print (异常:,e)    def send_markdown(webhook,content):     register_data = {    “msgtype”: “markdown”,#支持文本(text)、markdown(markdown)、图片(image)、图文(news)四种消息类型     “markdown”: {        “content”: “%s”%content         }     }     response = requests.post(url = webhook,json=register_data)    #print (response.text)     print (“send message sucess..”)def main():     api_user = 账号          api_password = 密码     # 工程项目ID     workspace_id = “工程项目ID,创建工程项目时生成”     # 统计统计数据bug时间段     startime_endtime = “2022-06-01~2022-08-30”     # 民营企业QQ群连接     webhook = “在民营企业QQ群,创建一个机器人,点击以获取此链接”     bugs_info(api_user,api_password,workspace_id,startime_endtime)    # 超时未处置的bug>5天(工作日)且无评论bug     age_bugs = bugs_age(api_user,api_password,workspace_id,startime_endtime)    if  0<len(age_bugs)<20:         send_age_bugs =” **<font color=\”warning\”>【超时未处置的bug>5天(工作日)且无评论:%s个,处置提醒】</font>**\n \n”%len(age_bugs)+str(age_bugs).replace(“],”,”],\n \n”)         send_markdown(webhook,send_age_bugs)    # 若统计数据大于20,只展示20个bug     elif len(age_bugs)>20:         send_age_bugs =” **<font color=\”warning\”>【超时未处置的bug>5天(工作日)且无评论:%s个,处置提醒】</font>**\n \n”%len(age_bugs)+str(age_bugs[0:20]).replace(“],”,”],\n \n”)         send_markdown(webhook,send_age_bugs)    # 婉拒&重开&延后bug     a,b,c = bugs_info(api_user,api_password,workspace_id,startime_endtime)     status_bugs = a+b    if len(status_bugs)>0:         send_status_bugs = ” **<font color=\”warning\”>【已婉拒:%s个,重开:%s个,延后:%s个,处置提醒】</font>**\n \n”%(len(a),len(b),len(c))+str(status_bugs).replace(“],”,”],\n \n”)                  send_markdown(webhook,send_status_bugs)    # 若统计数据大于20,只展示20个bug     elif len(age_bugs)>20:         send_status_bugs = ” **<font color=\”warning\”>【已婉拒:%s个,重开:%s个,延后:%s个,处置提醒】</font>**\n \n”%(len(a),len(b),len(c))+str(status_bugs[0:20]).replace(“],”,”],\n \n”)                  send_markdown(webhook,send_status_bugs)if __name__ == __main__:     main()    # 周一到周五的18:30执行     at_time = “18:30”     schedule.every().monday.at(at_time).do(main)     schedule.every().tuesday.at(at_time).do(main)     schedule.every().wednesday.at(at_time).do(main)     schedule.every().thursday.at(at_time).do(main)     schedule.every().friday.at(at_time).do(main)     print(“定时任务执行中,每晚%s(工作日)进行提醒”%at_time)    while True:         schedule.run_pending()         time.sleep(1)

执行:

测试结论:

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《tapd 项目管理 ,tapd项目运营数据(python自动化统计TAPD缺陷)》
文章链接:https://www.zazhiba.com.cn/46834.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址