zoukankan      html  css  js  c++  java
  • 《自拍教程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
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    my first android test
    VVVVVVVVVV
    my first android test
    my first android test
    my first android test
    ini文件
    ZZZZ
    Standard Exception Classes in Python 1.5
    Python Module of the Week Python Module of the Week
    my first android test
  • 原文地址:https://www.cnblogs.com/zipython/p/12722447.html
Copyright © 2011-2022 走看看