我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python实现提取jira bug列表的方法示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python实现提取jira bug列表的方法示例

公司要求内部每日整理jira bug发邮件,手动执行了一段时间,想着用自动化的方式实现,故用了3天的时间做出了此脚本。

第一版基础版


# -*- coding:utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
import time
import os

jql = "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"(.+?)" + RB
    datalist=re.findall(rule,data)
    return  datalist


def 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 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()

第二版基础版添加日期相差功能


# -*- coding:utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
import time
import os
from datetime import datetime

jql = "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_date
    else:
        print('日期格式错误')

def diff_date(d1, d2):
    d1 = datetime.strptime(d1,'%d/%m/%y').date()
    return (d2 - d1).days

def findall_data(data,LB="",RB=""):
    '''    关联函数左右边界提取数取    '''
    rule=LB + r"(.+?)" + RB
    datalist=re.findall(rule,data)
    return  datalist

def 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

实现的代码


# -*- coding:utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
import time
import os
from datetime import datetime

parentid = "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_date
    else:
        print('日期格式错误')

def diff_date(d1, d2):
    d1 = datetime.strptime(d1,'%d/%m/%y').date()
    return (d2 - d1).days

def findall_data(data,LB="",RB=""):
    '''    关联函数左右边界提取数取    '''
    rule=LB + r"(.+?)" + RB
    datalist=re.findall(rule,data)
    return  datalist


def 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_list


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/" + parentid,headers=headers, cookies=login_cookie)
        jql_url="https://jira.clouddeep.cn/issues/" + parentid + "/?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无法访问,请检查网络。")

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  bs4 

get_jira_bugs.bat #调用主程序实现bug列表生成一个csv文件。


@ECHO OFF
python ./jiraCollection.py
echo  run success!
pause

到此这篇关于python实现提取jira bug列表的方法示例的文章就介绍到这了,更多相关python提取jira bug列表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python实现提取jira bug列表的方法示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python分割列表(list)的方法示例

前言 在日常开发中,有些API接口会限制请求的元素个数,这时就需要把一个大列表分割为固定的小列表,再进行相关处理,本文搜集了几个简单的方法,分享出来供大家参考学习,下面来看看详细的介绍: 方法示例#1.分割大列表为三个元素的小列表,不够三个
2022-06-04

python实现斐波那契数列的方法示例

介绍 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下递归的方法定义: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*) 。1.
2022-06-04

Python中创建对象列表的实现示例

本文主要介绍了Python中创建对象列表的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-14

Python实现获取乱序列表排序后的新下标的示例

本文主要介绍了Python实现获取乱序列表排序后的新下标的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

Python编程实现双链表,栈,队列及二叉树的方法示例

本文实例讲述了Python编程实现双链表,栈,队列及二叉树的方法。分享给大家供大家参考,具体如下: 1.双链表class Node(object):def __init__(self, value=None):self._prev = No
2022-06-04

AJAX+JSP实现读取XML内容并按排列显示输出的方法示例

这篇文章给大家分享的是有关AJAX+JSP实现读取XML内容并按排列显示输出的方法示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现功能:点击按扭,显示出JSP页面中通过out.println传过来的xml信
2023-06-08

Python实现嵌套列表的方法有哪些

这篇文章主要讲解了“Python实现嵌套列表的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python实现嵌套列表的方法有哪些”吧!模拟数据data = [[1,2,3],[4]
2023-07-05

Python 列表(List) 的三种遍历方法实例 详解

Python 遍历 最近学习python这门语言,感觉到其对自己的工作效率有很大的提升,下面废话不多说,直接贴代码#!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '_
2022-06-04

C#实现从PDF中提取表格的方法详解

PDF是办公中比较常见的一种文件格式,在工作中应用也越来越普遍。今天为大家介绍一种通过C#/VB.NET代码从PDF中提取表格内容的方法,感兴趣的可以动手尝试一下
2022-11-13

Python实现基本数据结构中队列的操作方法示例

本文实例讲述了Python实现基本数据结构中队列的操作方法。分享给大家供大家参考,具体如下:#! /usr/bin/env python #coding=utf-8 class Queue(object):def __init__(self
2022-06-04

python实现逻辑回归的方法示例

本文实现的原理很简单,优化方法是用的梯度下降。后面有测试结果。 先来看看实现的示例代码:# coding=utf-8 from math import expimport matplotlib.pyplot as plt import nu
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录