在工作中,需要用到JIRA项目任务管理平台,对于某项问题划分为若干个子任务,各自分配给不同的人员。因为我们比较特殊,所有人员的任务进度的录入是固定专人录入的,所以单人的录入量相对也比较大。每人每天可能要录入几十个账号的任务日志,所以就有自动登录并提交任务日志并更新任务状态的需求了。
一、python是有第三方的可操作jira API的jira库的,只是我后来才知道,自己没用过,不做评价,有兴趣的可以参考这个哥们写的:
https://blog.csdn.net/weixin_43790276/article/details/89892699?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
二、再就是自己写的原生代码了,以下展开说:
由于任务日志是事先整理到了excel中的,格式如下:
先是理清下大致流程,编写了伪代码:
- 从excel读取账号、密码、日期、任务名称、日志内容
以下逐条日志循环(因为每个账号对应一条日志,所以即遍历每个账号):
2. 登录,获取cookie
3. 访问日志详情:
①查出所有问题列表,找到需要提交日志的问题,如果存在该问题:
②判断当天是否在该问题提交过日志,如果已经提交过则停止。
③如果是首次提交日志,则先 开始进行,然后 提交日志;
④如果是最后一次提交日志,则 提交日志后,然后 解决问题。
如果不是,则继续:
如果不存在该问题,提示需要创建
最终的代码:
main.py 主流程模块
getExcelIssue.py excel处理模块
login.py 登录模块
workLog.py 日志操作模块
issue.py 问题查询模块
getIssueId.py 反向匹配任务Id模块
util.py 工具模块
这里贴上main.py的代码:
# coding=utf8
from util import getStartdate
from getExcelIssue import GetExcelIssue
from getIssueId import GetIssueId
from login import Login
from workLog import WorkLog
# 参数
excelfilepath = "umpriqing.xlsx" # excel文件路径
sheet = 'HIGNS-4716' # excel中的sheet名称
urlhome = "http://192.168.176.141:8081" # JIRA地址
timeLogged = "1d" # 默认1d
startdate = getStartdate().decode('utf8') # 此处需要转换编码
excelissueinstance = GetExcelIssue(excelfilepath,sheet)
excelissues = excelissueinstance.get_excel_issues()
print(excelissues)
# 根据row最后一列的0/1判断是否是该子任务的最后一条:1代表最后一条日志
for row in excelissues:
if str(row[4]) == startdate:
username = row[1]
password = row[2]
issuename = row[3]
comment = row[6]
islastcomment = row[8]
if comment is not None:
# print("comment %s" % comment)
logininstance = Login(urlhome, username, password)
cookie, atl_token = logininstance.get_cookie()
if cookie is not None and atl_token is not None:
print(u"%s 登录成功" % username)
issueidinstance = GetIssueId(issuename, urlhome, cookie, atl_token)
issueid, issuekey = issueidinstance.getissueid()
if issueid != "":
# 判断该账号今天是否已经提交过该问题的日志,如果提交过则停止该账号的操作,继续下一个账号
workloginstance = WorkLog(urlhome,cookie,atl_token)
worklogdates = workloginstance.getWorkLogDate(issuekey)
print("worklogdates:",worklogdates)
if startdate not in worklogdates or worklogdates == []:
print(u"重复提交检查:%s : %s的日志今天没有提交过,可以提交..." % (username,issuekey))
startstatuslabel = workloginstance.getStartStatus(issuekey)
if startstatuslabel != u'开始进行':
print(u"开始状态检查:工作已开始" )
else:
print(u"开始状态检查:工作未开始,开始工作" )
resstatus = workloginstance.workstart(issueid)
workloginstance.commitWorkLog(issueid, comment, timeLogged)
print(u'账号:%s,项目:%s ,问题:%s,日志:%s 提交成功.' % (username, issuekey, issuename, comment))
# 判断是否是最后一条日志,如果是则 解决问题
if islastcomment == '1':
assignissuestatus = workloginstance.assignissue(issueid, username)
print(u'解决问题检查:是最后一条日志,执行 解决问题 操作')
if 'error' not in assignissuestatus:
print(u'已进行操作:解决问题 ')
else:
print(u'异常:解决问题')
else :
print(u'解决问题检查:不是最后一条日志,不需操作')
else:
print(u"重复提交检查:%s : %s的日志今天已经提交过,忽略..." % (username, issuekey))
continue
else:
print(u"请检查该子任务是否存在")
else:
print(u'%s 登录失败,请检查网络...' % username)
完整代码地址:https://github.com/wangnan229/jirapy