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


    案例故事:有时候一个测试报告发过来,发现这个测试报告的Bug,很多信息未提及,
    比如Bug严重级别(Proirity),指派给谁了(assginee),目前Bug状态(Status)等信息。

    其实我们可以借助Jira的Jql(Jira Query Language)查询语句,实现批量查询这些Bug。


    准备阶段
    1. 由于使用的是Jira Bug管理系统,点击Advanced就可以进入Jql高级搜索,

      输入类似:issuekey in (QTBUG-51184, QTBUG-53341)的Jql预计即可实现搜索,

    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运行,当然也可以双击运行。
    运行效果如下:

    本案例练手素材下载

    跳转到官网下载
    武散人出品,请放心下载并使用。

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

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

    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=446a26a9677248878d46162be2bc62e6
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    作用域链及作用域面试题
    this在js中的作用
    dom对象
    作用域问题
    逻辑运算
    socket.io 的使用
    mongoDB 的使用
    使用 usb 调试的时候,连接上电脑没反应
    uni-app 的更新及碰到的问题
    WebSocket 的使用
  • 原文地址:https://www.cnblogs.com/zipython/p/12722447.html
Copyright © 2020-2023  润新知