Python 实现 Jira Bug 统计与自动邮件发送

林见深
林见深
发布时间:2026-10-15| 5人浏览过
原创

本文介绍如何使用 Python 自动从 Jira 获取 Bug 列表,统计新增与遗留问题,生成包含状态颜色的 HTML 表格,并通过 SMTP 协议自动发送邮件。涵盖环境配置、Jira 登录、JQL 查询、HTML 表格构建及邮件发送完整流程,适用于日常运维自动化场景。

环境配置与依赖安装

首先,在 PyCharm 开发环境中,通过 pip 命令安装所需的第三方库。

安装必要库

 pip install html-table
 pip install jira 

邮箱配置与初始化

接着,初始化发件人邮箱的相关配置信息,包括账号和密码。

设置发件人信息

# 发件人邮箱账号
my_sender = 'username@xxx.com.cn'
# user登录邮箱的用户名,password登录邮箱的密码(授权码,即客户端密码,非网页版登录密码),但用腾讯邮箱的登录密码也能登录成功
my_pass = 'xxxxx'
# 收件人邮箱账号
my_users=['username@xxx.com.cn']

Jira 系统登录

随后,编写代码以登录 Jira 系统,建立连接。

初始化 Jira 连接参数

class JiraTool:
#初始化
    def __init__(self):
        self.server = 'http://ip:5500' //连接Jira的Ip地址
        self.basic_auth = ('username', 'password') //连接Jira的账户和密码
        self.jiraClinet = None

确保 Jira 登录成功,以便后续获取数据。

执行登录验证

def login(self):
    self.jiraClinet = JIRA(server=self.server, basic_auth=self.basic_auth)
    if self.jiraClinet != None:
        print("登录成功!")
        return True
    else:
        return False

获取 Jira 问题列表

利用 JQL 语句从 Jira 获取问题列表,筛选特定的 Bug。

通过 JQL 查询 Issue

def get_issue_list_by_jql(self, jql):
    issue_list = []
    issue_key_list = self.jiraClinet.search_issues(jql_str=jql,startAt=0,maxResults=1000) //Jira默认统计50条,maxResults设置大小
    for key_list in issue_key_list:
        issue = self.jiraClinet.issue(key_list.key)
        issue_list.append(issue)
        # print(issue.key) #关键字
        # print(issue.fields.summary) #bug描述
        # print(issue.fields.status) bug状态
        # print(issue.fields.assignee) #经办人
        # print(issue.fields.components[0].name) #模块 
        # print(issue.fields.priority) #优先级
    return issue_list

构建统计表格

在获取数据后,创建一个表格对象用于展示统计结果。

生成 Bug 状态摘要

def gen_new_bug_caption_str(issue_list):
    dict = {}
    for issue in issue_list:
        dict[issue.fields.status.name] = dict.get(issue.fields.status.name, 0) + 1
        #dict[issue.key.split('-')[0]] = dict.get(issue.key.split('-')[0],0) + 1
    caption_str = '近一周共计新增bug' + str(len(issue_list)) + '个。 已关闭:' + str(dict.get('已关闭')) + '个。 已解决待关闭:' + str(dict.get('已解决')) + '个。 待处理:' +str(dict.get('待处理')) + '个'
    #print(caption_str)
    return caption_str

将表格数据转换为 HTML 格式,以便在邮件中直观展示。

设置表格样式与生成 HTML

 #标题样式
    # table.caption.set_style({'font-size':'15px','align':'left'})
    table.caption.set_style({'font-size':'15px'})
    # 表格样式,即<table>标签样式
    table.set_style({
        'border-collapse':'collapse',
        'word-break':'keep-all',
        'white-space':'nowrap',
        'font-size':'14px'
    })
  
    #设置每个单元格的样式,主要是规定边框样式:
    table.set_cell_style({
        'border-color':'#000',
        'border-width':'1px',
        'border-style':'solid',
        'padding':'5px',
    })
    #设置表头单元格样式,规定颜色,字体大小,以及填充大小:
    #表头样式
    table.set_header_row_style({
        'color':'#fff',
        'background-color':'#696969',
        'font-size':'18px',
    })
    #覆盖表单单元格字体样式
    table.set_header_cell_style({
        'padding':'15px',
    })
    #遍历数据行,根据不同状态设置背景颜色
    for row in table.iter_data_rows():
        if row[1].value in "待处理":
            row[1].set_style({
                'background-color': '#FFB6C1',
            })
        if row[1].value in "已解决":
            row[1].set_style({
                'background-color': '#E1FFFF',
            })
        if row[1].value in "已关闭":
            row[1].set_style({
                'background-color': '#90EE99',
            })
        if row[1].value in "重新打开":
            row[1].set_style({
                'background-color': '#DC143C',
            })
        if row[1].value in "开发中":
            row[1].set_style({
                'background-color': '#f7d7a7',
            })
    #生成HTML文本:
    html = table.to_html()
    # print(html)
    return html

发送邮件功能实现

配置邮件发送功能,将生成的 HTML 内容作为邮件正文发出。

配置 SMTP 发送逻辑

def sendmail(html):
    ret=True
    try:
        # 邮件内容
        msg=MIMEText(html,'html','utf-8')
        # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['From']=formataddr(["张三",my_sender])
        # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        #msg['To']=formataddr(["李四",my_user])
        # 邮件的主题
        msg['Subject']="bug情况统计"
        server=smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
        # 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码
        server.login(my_sender, my_pass)
        # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.sendmail(my_sender, my_users, msg.as_string())
        # 关闭连接
        server.quit()
        # 如果 try 中的语句没有执行,则会执行下面的 ret=False
    except Exception:
        ret=False
    return ret

代码调试与运行

对代码进行调试,确保各环节运行正常。

完整执行流程示例


new_bug_jql = "project in (AAA, BBB, CCC)  AND issuetype in (Bug, 缺陷) AND created >= -1w ORDER BY component ASC, assignee ASC, priority DESC, updated DESC"
old_bug_jql = "project in (AAA, BBB, CCC)  AND issuetype in (Bug, 缺陷) AND status in (待处理, 开发中, Reopened) AND created <= -1w ORDER BY component ASC, assignee ASC, priority DESC, updated DESC"
jiraTool = JiraTool()
jiraTool.login()
new_issue_list = jiraTool.get_issue_list_by_jql(new_bug_jql)
new_bug_caption_str = gen_new_bug_caption_str(new_issue_list)
new_bug_html = gen_html_table(new_issue_list,new_bug_caption_str)
# print(new_bug_html)
old_issue_list = jiraTool.get_issue_list_by_jql(old_bug_jql)
old_bug_html = gen_html_table(old_issue_list, "超过一周未关闭bug")
eamil_html = (new_bug_html + "<br/><br/><br/>" + old_bug_html).replace("&gt;", ">").replace("&quot;", "\"").replace("&lt;", "<")
# print(eamil_html)
ret=sendmail(eamil_html)
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")

至此,关于 Python 统计 Jira 的 bug 并发送邮件的功能介绍完毕,更多相关 Python 统计 Jira 的 bug 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。