python实现提取jira bug列表
生活随笔
收集整理的這篇文章主要介紹了
python实现提取jira bug列表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
公司要求內部每日整理jira bug發郵件,手動執行了一段時間,想著用自動化的方式實現,故用了3天的時間做出了此腳本。
第一版基礎版
# -*- coding:utf-8 -*- import requests import re from bs4 import BeautifulSoup as bs import time import osjql = "project = SDP and parent = SDP-13330 AND issuetype in (standardIssueTypes(), subTaskIssueTypes(), BUG) AND status in (新建, 解決中, 重新打開) AND priority in (P0, P1, P2) AND reporter in (membersOf(SDP_Tester)) ORDER BY priority DESC" username = "robin.li" password = "a12345678" tempfilepath = r"f:\bug_list.csv" outbuglist = r"f:\bug_out" + time.strftime("%Y%m%d", time.localtime()) + ".csv" parentid = "SDP-13330"bugs_list = []def findall_data(data,LB="",RB=""):''' 關聯函數左右邊界提取數取 '''rule=LB + r"(.+?)" + RBdatalist=re.findall(rule,data)return datalistdef get_bugs_list():'''根據規則提取bug列表'''if os.path.exists(outbuglist): # 如果文件存在os.remove(outbuglist)with open(r"f:\bug_list.csv", 'r') as f:content = str(f.readlines())[1:-1]bug = []soup = bs(content, features='html.parser')for tr in soup.select('tr'):for td in tr.select('td'):bug.append(str(td.text).strip(r''))bugs_list.append(bug)bug = []for bug in bugs_list:clear_list = str(bug[1:-2]).replace("\\n", "").replace("\'", "").replace(" ", "").replace("\,", "").replace("\\xa0", "").replace(parentid, "").replace("[", "").replace("]", "")print(clear_list)try:with open(outbuglist, 'a') as f:f.write(clear_list + "\n")except PermissionError:print("\033[31m請關閉已經打開的bug列表")return 0else:print("\n \033[31mbug列表輸出地址:" + outbuglist + "\n" + "-"*50 + "-----bug內容如上:--------\n")def login_bugwriter(username, password, jql, tempfilepath):"""login_bugwriter(username='str',password='str', jql='str')登錄jira提取bug列表寫入文件username:登錄Jira的帳號password:密碼jql:jira過濾的語法tempfilepath:過濾的bug文件臨時存儲目錄文件"""''''''data = {'os_username': username, 'os_password': password, 'login': '登錄'}res = requests.get("https://jira.clouddeep.cn/secure/Dashboard.jspa")if res.status_code == 200:print("可以訪問Jira,開始提取數據")jsession = requests.Session()cookie_jar = jsession.post("https://jira.clouddeep.cn/login.jsp",data=data).cookieslogin_cookie = requests.utils.dict_from_cookiejar(cookie_jar)print("登錄成功,整理列表")headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36","Sec-Fetch-Dest": "document","Sec-Fetch-Mode": "navigate","Sec-Fetch-Site": "none","Sec-Fetch-User": "?1","Upgrade-Insecure-Requests": "1",}r=requests.get("https://jira.clouddeep.cn/browse/SDP-13330",headers=headers, cookies=login_cookie)#print(r.text)jql_url="https://jira.clouddeep.cn/issues/SDP-13330/?jql=" + jqlprint("請確認過濾條件:==>" + jql_url + "\n" + "-"*30)bug_list = requests.get(jql_url ,headers=headers, cookies=login_cookie)with open(tempfilepath,'w') as f:f.write(bug_list.text)else:print("jira無法訪問,請檢查網絡。")if __name__ == '__main__':login_bugwriter(username, password, jql, tempfilepath)get_bugs_list()第二版基礎版添加日期相差功能
# -*- coding:utf-8 -*- import requests import re from bs4 import BeautifulSoup as bs import time import os from datetime import datetimejql = "project = SDP and parent = SDP-13330 AND issuetype in (standardIssueTypes(), subTaskIssueTypes(), BUG) AND status in (新建, 解決中, 重新打開) AND priority in (P0, P1, P2) AND reporter in (membersOf(SDP_Tester)) ORDER BY priority DESC" username = "a.li@rc.cn" password = "Rc123456" tempfilepath = r"f:\bug_list.csv" outbuglist = r"f:\bug_out" + time.strftime("%Y%m%d", time.localtime()) + ".csv" parentid = "SDP-13330"bugs_list = []def trans_month(date):ch_date_dict = {'一': '01', '二': '02', '三': '03', '四': '04', '五': '05', '六': '06', '七': '07', '八': '08', '九': '09', '十': '10', '十一': '11', '十二': '12', }old_date = date.split('/')ch_date = str(old_date[1])[0]if ch_date in ch_date_dict:old_date[1]=ch_date_dict[ch_date]new_date = "/".join(str(i) for i in old_date)return new_dateelse:print('日期格式錯誤')def diff_date(d1, d2):d1 = datetime.strptime(d1,'%d/%m/%y').date()return (d2 - d1).daysdef findall_data(data,LB="",RB=""):''' 關聯函數左右邊界提取數取 '''rule=LB + r"(.+?)" + RBdatalist=re.findall(rule,data)return datalistdef get_bugs_list():'''根據規則提取bug列表'''if os.path.exists(outbuglist): # 如果文件存在os.remove(outbuglist)with open(r"f:\bug_list.csv", 'r') as f:content = str(f.readlines())[1:-1]bug = []soup = bs(content, features='html.parser')for tr in soup.select('tr'):for td in tr.select('td'):if td.text != " \\n":print('2==',len(bug))bug.append(str(td.text).strip(""))if "<img" in str(td): #提取日期get_date = tr.time.text # 09:30:45'd1 = trans_month(get_date)d2 = datetime.now().date()diff_days = diff_date(d1, d2)s = str(td.img['alt'])print('1==',len(bug))bug.insert(len(bug),str(diff_days))bug.append(s) #print('1',bug) #print('2',bug) bugs_list.append(bug) #bugs_list = [i for i in bugs_list if i != ''] #print('3',bugs_list) bug = [] for bug in bugs_list: #ps = bug # print(len(bug)) # if len(bug) != 0: clear_list = str(bug[:-2]).replace("\\n", "").replace("\'", "").replace(" ", "").replace("\,", "").replace("\\xa0", "").replace(parentid, "").replace("[", "").replace("]", "") #print(clear_list) #clear_list = clear_list.split(",") #clear_list = [i for i in clear_list if i !=''] print(clear_list) try: with open(outbuglist, 'a') as f: f.write(str(clear_list) + "\n") except PermissionError: print("\033[31m請關閉已經打開的bug列表") return 0 else: print("\n \033[31mbug列表輸出地址:" + outbuglist + "\n" + "-"*50 + "-----bug內容如上:--------\n") def login_bugwriter(username, password, jql, tempfilepath): """ login_bugwriter(username='str',password='str', jql='str') 登錄jira提取bug列表寫入文件 username:登錄Jira的帳號 password:密碼 jql:jira過濾的語法 tempfilepath:過濾的bug文件臨時存儲目錄文件 """ '''''' data = {'os_username': username, 'os_password': password, 'login': '登錄'} res = requests.get("https://jira.clouddeep.cn/secure/Dashboard.jspa") if res.status_code == 200: print("可以訪問Jira,開始提取數據") jsession = requests.Session() cookie_jar = jsession.post("https://jira.clouddeep.cn/login.jsp",data=data).cookies login_cookie = requests.utils.dict_from_cookiejar(cookie_jar) print("登錄成功,整理列表") headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", "Upgrade-Insecure-Requests": "1", } r=requests.get("https://jira.clouddeep.cn/browse/SDP-13330",headers=headers, cookies=login_cookie) #print(r.text) jql_url="https://jira.clouddeep.cn/issues/SDP-13330/?jql=" + jql print("請確認過濾條件:==>" + jql_url + "\n" + "-"*30) bug_list = requests.get(jql_url ,headers=headers, cookies=login_cookie) with open(tempfilepath,'w') as f: f.write(bug_list.text) else: print("jira無法訪問,請檢查網絡。") if __name__ == '__main__': #login_bugwriter(username, password, jql, tempfilepath) get_bugs_list()第三版優化了提取器,實現一鍵提取bug
實現的代碼
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # -*- coding:utf-8 -*- import requests import re from bs4 import BeautifulSoup as bs import time import os from datetime import datetimeparentid = "SDP-15642" #bug匯總 jira號#查詢條件 jql = "project = SDP and parent = " + parentid +" AND issuetype in (standardIssueTypes(), subTaskIssueTypes(), BUG) AND status in (新建, 解決中, 重新打開,解決中) AND priority in (P0, P1, P2) AND reporter in (membersOf(SDP_Tester)) ORDER BY priority DESC"tr_title = "JIRA鏈接,詳細描述,BUG等級,經辦人,報告人,JIRA狀態,JIRA創建時間,bug持續時間"#["JIRA鏈接","詳細描述","BUG等級","經辦人","報告人","JIRA狀態","JIRA創建時間","bug持續時間"] username = "aa.li@ss.cn" password = "ss2018()" tempfilepath = r"./bug_list.csv" outbuglist = r"./bug_out" + time.strftime("%Y%m%d", time.localtime()) + ".csv" # orderbuglist = r"./order_bug_out" + time.strftime("%Y%m%d", time.localtime()) + ".csv"bugs_list = []def trans_month(date):ch_date_dict = {'一': '01', '二': '02', '三': '03', '四': '04', '五': '05', '六': '06', '七': '07', '八': '08', '九': '09', '十': '10', '十一': '11', '十二': '12', }old_date = date.split('/')ch_date = str(old_date[1])[0]if ch_date in ch_date_dict:old_date[1]=ch_date_dict[ch_date]new_date = "/".join(str(i) for i in old_date)return new_dateelse:print('日期格式錯誤')def diff_date(d1, d2):d1 = datetime.strptime(d1,'%d/%m/%y').date()return (d2 - d1).daysdef findall_data(data,LB="",RB=""):''' 關聯函數左右邊界提取數取 '''rule=LB + r"(.+?)" + RBdatalist=re.findall(rule,data)return datalistdef get_bugs_list():'''根據規則提取bug列表'''# if os.path.exists(outbuglist): # 如果文件存在# os.remove(outbuglist)with open(r"f:\bug_list.csv", 'r') as f:content = str(f.readlines())[1:-1]bug = []soup = bs(content, features='html.parser')for tr in soup.select('tr'):for td in tr.select('td'):str1 = re.sub(r"[\\n'\s]","",str(td.text))str2 = re.sub("[\s ,\r\n]{1,99}", ",", str1)if str2 != "":bug.append(str(str2).strip(""))if "<img" in str(td): #提取日期get_date = tr.time.text # 09:30:45'd1 = trans_month(get_date)d2 = datetime.now().date()diff_days = diff_date(d1, d2)s = str(td.img['alt'])bug.insert(len(bug),str(diff_days))bug.append(s)bugs_list.append(bug)bug = []else:print("\n \033[31mbug列表輸出地址:" + "\n" + "-"*50 + "-----bug內容如上:--------\n")return bugs_listdef login_bugwriter(username, password, jql, tempfilepath):"""login_bugwriter(username='str',password='str', jql='str')登錄jira提取bug列表寫入文件username:登錄Jira的帳號password:密碼jql:jira過濾的語法tempfilepath:過濾的bug文件臨時存儲目錄文件"""''''''data = {'os_username': username, 'os_password': password, 'login': '登錄'}res = requests.get("https://jira.clouddeep.cn/secure/Dashboard.jspa")if res.status_code == 200:print("可以訪問Jira,開始提取數據")jsession = requests.Session()cookie_jar = jsession.post("https://jira.clouddeep.cn/login.jsp",data=data).cookieslogin_cookie = requests.utils.dict_from_cookiejar(cookie_jar)print("登錄成功,整理列表")headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36","Sec-Fetch-Dest": "document","Sec-Fetch-Mode": "navigate","Sec-Fetch-Site": "none","Sec-Fetch-User": "?1","Upgrade-Insecure-Requests": "1",}r=requests.get("https://jira.clouddeep.cn/browse/" + parentid,headers=headers, cookies=login_cookie)jql_url="https://jira.clouddeep.cn/issues/" + parentid + "/?jql=" + jqlprint("請確認過濾條件:==>" + jql_url + "\n" + "-"*30)bug_list = requests.get(jql_url ,headers=headers, cookies=login_cookie)with open(tempfilepath,'w') as f:f.write(bug_list.text)else:print("jira無法訪問,請檢查網絡。")def order_buglist(buglist):with open(outbuglist,'w') as f:f.write(tr_title + '\n')print(tr_title)for l in buglist:if len(l) <= 1:print("列表長度小于1")else:s = l[3:4] + str(l[4:5]).split(",")[2:3] +l[2:3] + l[9:11] + l[5:6] + l[8:9] + l[1:2]s2 = re.sub(r"'","",str(s)[3:-1])s3 = re.sub(r"[, ]{1,8}",",",s2)f.write("https://jira.clouddeep.cn/browse/" + str(s3) + '\n')print('out>>',s3)print("bug列表輸出地址:\n",outbuglist)if os.path.exists(tempfilepath):os.remove(tempfilepath)else:print("no such file: %s" %tempfilepath) if __name__ == '__main__': login_bugwriter(username, password, jql, tempfilepath) bug = get_bugs_list() order_buglist(bug)實現一鍵提取:
編寫2個bat文件:
init_env.bat #初始化環境,安裝所需的庫
pip install requests pip install bs4get_jira_bugs.bat #調用主程序實現bug列表生成一個csv文件。
@ECHO OFF python ./jiraCollection.py echo run success! pause總結
以上是生活随笔為你收集整理的python实现提取jira bug列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python argparse模块基本用
- 下一篇: Python内置函数——eval、exe