欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《自拍教程58》Python 批量生成Jira Bug查询语句

程序员文章站 2022-06-28 18:39:09
案例故事 :有时候一个测试报告发过来,发现这个测试报告的Bug,很多信息未提及, 比如Bug严重级别(Proirity),指派给谁了(assginee),目前Bug状态(Status)等信息。 其实我们可以借助Jira的Jql(Jira Query Language)查询语句,实现批量查询这些Bug ......

案例故事:有时候一个测试报告发过来,发现这个测试报告的bug,很多信息未提及,
比如bug严重级别(proirity),指派给谁了(assginee),目前bug状态(status)等信息。
《自拍教程58》Python 批量生成Jira Bug查询语句
其实我们可以借助jira的jql(jira query language)查询语句,实现批量查询这些bug。


准备阶段
  1. 由于使用的是jira bug管理系统,点击advanced就可以进入jql高级搜索,
    《自拍教程58》Python 批量生成Jira Bug查询语句
    输入类似:issuekey in (qtbug-51184, qtbug-53341)的jql预计即可实现搜索,
    《自拍教程58》Python 批量生成Jira Bug查询语句

  2. 可以将邮件内容存储到input.txt文件里,python遍历该文本,过滤出qtbug-开头的bug列表,生成正确的jql后,自动保存到output.txt。

python批处理脚本形式

记住批处理脚本的精髓: 批量顺序执行语句

# coding=utf-8

import os
import re

# 第一步:读取input.txt, 并匹配所有qtbug-多个数字的bugid
hf1 = open("input.txt", "r")
bug_list = re.findall(r'qtbug-\d+', str(hf1.readlines()))
bug_list = sorted(list(set(bug_list)))  # 可去重, 可排序

# 第二步: 列表转字符串并生成jql查询语句
bug_str = ",".join(bug_list)
jql_str = "issuekey in (" + bug_str + ")"
print("jql: %s" % jql_str)

# 第三步: 将jql查询语句写入output.txt文本里边。
hf2 = open("output.txt", "w")
hf2.write(jql_str)

# 第四步: 关闭文件句柄hf(handle file)
hf1.close()
hf2.close()

# 暂停,等待查看脚本运行结果,避免运行完毕后直接关闭运行界面
os.system("pause")

python面向过程函数形式

面向过程函数的编程思维应该是这样的:
你需要多少个功能(函数),才能做成这个事。
把功能(函数)都尽量封装好,只暴露一些的参数接口即可。

# coding=utf-8

import os
import re


def get_buglist(input_file):
    '''读取input_file,过滤出qtbug-多个数字的bug列表'''
    with open(input_file, "r") as hf:
        bug_list = re.findall(r'qtbug-\d+', str(hf.readlines()))
        return bug_list


def save_jql(output_file, jql_str):
    '''将jql_str这个字符串,写入指定的output_file输出文件'''
    with open(output_file, "w") as hf:
        hf.write(jql_str)


# 第一步:读取input.txt, 并匹配所有qtbug-多个数字的bugid
bug_list = get_buglist("input.txt")

# 第二步:列表转字符串并生成jql查询语句
bug_str = ",".join(bug_list)
jql_str = "issuekey in (" + bug_str + ")"
print("jql: %s" % jql_str)

# 第三步: 将jql查询语句写入output.txt文本里边。
save_jql("output.txt", jql_str)

os.system("pause")

python面向对象类形式

面向对象类的编程思维应该是这样的:
如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
这些种类的事物都具备哪些共有的属性与方法,
这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。

# coding=utf-8

import os
import re


class jqlgenerator(object):
    '''jql查询语句生成器'''
    def __init__(self, input_file):
        self.input_file = input_file
        self.jql_str = none

    def generate_jql(self):
        '''生成jql并返回jql查询语句字符串'''
        with open(self.input_file, "r") as hf:
            bug_list = re.findall(r'qtbug-\d+', str(hf.readlines()))
            bug_str = ",".join(bug_list)
            self.jql_str = "issuekey in (" + bug_str + ")"
            print("jql: %s" % self.jql_str)
            return self.jql_str


def save_jql(output_file, jql_str):
    '''将jql_str这个字符串,写入指定的output_file输出文件'''
    with open(output_file, "w") as hf:
        hf.write(jql_str)


if __name__ == '__main__':
    # 第一步:初始化一个j_obj对象, 初始化的时候传入一个input.txt文件
    j_obj = jqlgenerator("input.txt")

    # 第二步: 调用对象的generate_jql()函数
    jql_str = j_obj.generate_jql()

    # 第三步,将jql查询语句保存到output.txt
    save_jql("output.txt", jql_str)

os.system("pause")

运行方式与效果

以上代码的3种实现形式都可以直接运行,比如保存为generate_jql.py与input.txt放在同一个目录,
建议python generate_jql.py运行,当然也可以双击运行。
运行效果如下:
《自拍教程58》Python 批量生成Jira Bug查询语句
《自拍教程58》Python 批量生成Jira Bug查询语句

本案例练手素材下载


武散人出品,请放心下载并使用。

小提示: 为什么我要取名input.txt, output.txt,
因为武散人觉得不管是脚本代码,还是函数,其主要功能都是数据处理,
对输入(input.txt)进行数据处理后,获得输出(output.txt)的过程,
后面武散人的案例很多都这么命名,请理解并适应!

扩展阅读:作为一名python爱好者,要有敏锐的嗅觉,一看到这种需要大批量,或需要长时间执行,
就要想着如何用python脚本来实现之, 这样才能把python运用到时间工作中去,
又岂止jql, 还有sql数据库查询语句也可以参考此方法实现批量生成。

更多更好的原创文章,请访问官方网站:
自拍教程(自动化测试python教程,武散人编著)
原文链接:
也可关注“武散人”微信订阅号,随时接受文章推送。
《自拍教程58》Python 批量生成Jira Bug查询语句