《自拍教程58》Python 批量生成Jira Bug查询语句
案例故事:有时候一个测试报告发过来,发现这个测试报告的bug,很多信息未提及,
比如bug严重级别(proirity),指派给谁了(assginee),目前bug状态(status)等信息。
其实我们可以借助jira的jql(jira query language)查询语句,实现批量查询这些bug。
准备阶段
-
由于使用的是jira bug管理系统,点击advanced就可以进入jql高级搜索,
输入类似:issuekey in (qtbug-51184, qtbug-53341)的jql预计即可实现搜索, -
可以将邮件内容存储到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数据库查询语句也可以参考此方法实现批量生成。
更多更好的原创文章,请访问官方网站:
自拍教程(自动化测试python教程,武散人编著)
原文链接:
也可关注“武散人”微信订阅号,随时接受文章推送。