excel&jira同步
背景:
第三方测试会以excel形式提交buglist,这个buglist需要同步到jira中,在jira进行跟踪,并将处理结果反馈给第三方;以往都是复制粘贴,为了减轻繁琐的操作,提高工作效率,这次要使用脚本通过jira的接口进行同步
因开发时间有限,不能完全实现自动化,本文仅解决将指定excel中的数据导入jira,后续有时间再做优化:
1.将jira.bug的解决状态同步到excel中
2.将第三方回归结果同步到jira中
3.将第三方提供的bug相关附件同步到共享目录中,并在bug.Description中增加链接
4.定期自动扫描buglist文件夹,发现新文件后,同步excel和jira数据,下载bug相关附件并共享
涉及的模块: jira、xlrd、re
基本环境:py34 win32
核心代码块:
#通过比较当天和前一天的bug表,实现将新增的bug导入jira
#buglist要按编号升序排列
#获取前一天的buglist的最大行号
#获取当天的buglist的最大行号
#获取数据行并转化成jira的数据格式
#将新增的bug导入jira
import xlrd
import re
from jira import JIRA
fileLast = 'D:\python\pjexcel2jira\Buglist0701.xls'
fileCurr = 'D:\python\pjexcel2jira\Buglist0702.xls'
lastData = xlrd.open_workbook (fileLast)
currData = xlrd.open_workbook (fileCurr)
lastTable=lastData.sheet_by_name(u'buglist')
currTable=currData.sheet_by_name(u'buglist')
i = lastTable.nrows
jira = JIRA('http://localhost/jira/',basic_auth=('username', 'password'))
#create bug
while i
#将标题行和数据行转换为dict,以方便检索
ibug=dict(zip(currTable.row_values(1),currTable.row_values(i)))
#不是空行则转换为jira格式
if ibug['No.'] != '':
ijirabug = format2Jira(ibug)
#创建jira.bug
new_issue = jira.create_issue(fields=ijirabug)
i=i+11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
361
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
格式转换函数:
def format2Jira(bug=None):
jirabug={}
if bug['No.'] == '':
return jirabug
else:
summary = convert2JiraSummary(bug)
description = convert2JiraDescription(bug)
components = convert2JiraComponents(bug)
priority = convert2JiraPriority(bug)
versions = convert2JiraVersions(bug)
jirabug = {
"project": {"id": "11108"},
"summary": summary,
"description": description,
"issuetype": {"name": "Bug"},
"timetracking": {
"originalEstimate": "1h",
"remainingEstimate": "1h",
},
"components":components,
"priority":priority,
"versions":versions,
"labels":["【第三方测试】"],
}
return jirabug1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
331
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def convert2JiraSummary(bug=None):
#截取bug内容的操作和现象,拼为summary
summary = "【第三方No:"+'%d' %bug['No.']+"】" + bug['Bug内容'][bug['Bug内容'].index("操作"):bug['Bug内容'].index("期待值")]
summary = summary.replace('\n',' ')
return summary1
2
3
4
5
61
2
3
4
5
6
def convert2JiraDescription(bug=None):
description='编号:' + '%d' %bug['No.'] + '\n' + bug['Bug内容'] + '\n\n' + bug['补充说明'] + '\n\n' + '评价担当者:' + bug['评价担当者']
return description1
2
3
41
2
3
4
def convert2JiraComponents(bug=None):
#jira中要预先设置好component,并设好开发负责人,这样创建issue时可以自动指派assignee
#'components':[{'name': '模块一'}]
component_dict={
'component 1':'模块一',
'component 2':'模块二',
'component 3':'模块三',
}
p={}
p['name']=component_dict[bug['测试机能']]
components=[]
components.append(p)
return components1
2
3
4
5
6
7
8
9
10
11
12
13
141
2
3
4
5
6
7
8
9
10
11
12
13
14
def convert2JiraPriority(bug=None):
#'Priority': {'name': 'Major'}
priority_dict={
'S':'Blocker',
'A':'Critical',
'B':'Major',
'C':'Minor',
}
priority={}
priority['name']= priority_dict[bug['错误等级']]
return priority1
2
3
4
5
6
7
8
9
10
11
121
2
3
4
5
6
7
8
9
10
11
12
def convert2JiraVersions(bug=None):
#issue.update(versions=[{"name":'V4.0.0.2'}])
r= re.compile('V+.*.*.*')
v = r.findall(bug['测试Version'])
p={}
p['name']= v[0]
versions=[]
versions.append(p)
return versions1
2
3
4
5
6
7
8
91
2
3
4
5
6
7
8
9
附:buglist样式,该sheet的名称为“buglist”