(五)Jira Api对接:修改任务状态
项目迭代结束后我们需要把sprint下面的story、task任务状态修改到结束状态,如果手动修改会花费不少时间,本文就介绍如何通过jira api自动修改任务状态,提高工作效率。
一、查看任务工作流
1、想要查看任务工作流首先需要管理员权限,工作流路径:设置--问题--工作流,如下图:
2、点击查看或者编辑,可以通过图形或者文本的方式查看。如下图,我们主要使用文本的方式,这种方式比较容易知道每个工作流动作的ID、状态名称以及与上下节点的关系,这些信息在后面要使用到
二、修改任务代码
1、首先我们来看下jira上任务的体现,开发自测通过后需要开发把任务状态修改到待提测状态,如下图,后面的状态修改有自动化修改。
2、自动化修改后jira体现,如下图。
3、代码如下
public static void main(String[] args) {
//模拟调用
updateSpringTaskStatus("2609");
}
/**
* 修改spring下的所有task和story到完成状态
*
* @param springId
*/
public static void updateSpringTaskStatus(String springId) {
//获取spring下面任务
List<String> subTaskKeys = getSubTaskKey(springId);
//循环修改sub task,状态101=提测预演通过 81=测试通过 41=任务验收完成。这个值就是工作流动作ID
List<Integer> status = Arrays.asList(101, 81, 41);
for (String issueKey : subTaskKeys) {
for (int i = 0; i < status.size(); i++) {
//请求内容
String requestBody = "{\"transition\": {\n \"id\": \"" + status.get(i) + "\"\n }\n}";
//调用接口修改任务状态
httpClient("post", "http://you jira address:port/rest/api/2/issue/" +
issueKey + "/transitions", requestBody);
}
}
} /**
* 获取sprint下的subTask
* * @return
*/
public static List<String> getSubTaskKey(String sprintId) {
//定义
List<String> issueKeys = new ArrayList<>();
//获取第一页数据,
JSONObject jsonObject = getIssueKey(0, sprintId);
if (jsonObject != null) {
//解析出第一页任务
issueKeys = getSubTaskKey(jsonObject);
//sprint下issue总数
int total = jsonObject.getInt("total");
logger.info("spring上共有story" + total + "个");
if (total > 150) {
//默认一页150条数据,总数大于150计算页数,并循环调用获取数据
int page = total / 150;
if (total % 150 > 0) {
page = page + 1;
}
logger.info("spring上共有story" + page + "页");
for (int pageIndex = 1; pageIndex < page; pageIndex++) {
//调用每页数据
JSONObject object = getIssueKey(pageIndex * 150, sprintId);
if (object != null) {
issueKeys.addAll(getSubTaskKey(object));
}
}
}
}
return issueKeys;
} /**
* 解析出任务key
*
* @param jsonObject
* @return
*/
private static List<String> getSubTaskKey(JSONObject jsonObject) {
List<String> issueKeys = new ArrayList<>();
//获取issues
JSONArray issueArray = jsonObject.getJSONArray("issues");
for (int i = 0; i < issueArray.size(); i++) {
//获取fields
JSONObject issueObject = issueArray.getJSONObject(i);
JSONObject fields = issueObject.getJSONObject("fields");
//获取issuetype
JSONObject issuetype = fields.getJSONObject("issuetype");
if ("Story".equals(issuetype.getString("name"))) {
//如果是story,则获取story下面的subtask任务
JSONArray subtasks = fields.getJSONArray("subtasks");
if (subtasks != null && subtasks.size() > 0) {
for (int taskid = 0; taskid < subtasks.size(); taskid++) {
JSONObject subtask = subtasks.getJSONObject(taskid);
//获取任务字段
JSONObject taskFields = subtask.getJSONObject("fields");
//获取任务状态
JSONObject status = taskFields.getJSONObject("status");
//如果是待提测、任务测试、任务验收状态则返回
if ("待提测".equals(status.getString("name")) ||
"任务测试".equals(status.getString("name")) ||
"任务验收".equals(status.getString("name"))) {
issueKeys.add(subtask.getString("key"));
}
}
}
}
}
return issueKeys;
} /**
* 获取spring下的issue
*
* @param startAt
* @param springId
* @return
*/
private static JSONObject getIssueKey(int startAt, String springId) {
HttpClientResponse issueResponse = httpClient("get", "http://you jira address:port/rest/
agile/1.0/sprint/"+ springId + "/issue?maxResults=150&startAt=" + startAt, "");
if (issueResponse != null && "200".equals(issueResponse.getStateCode())
&& issueResponse.getResponseBody() != null) {
JSONObject jsonObject = JSONObject.fromObject(issueResponse.getResponseBody().toString());
return jsonObject;
}
return null;
}
本文只是介绍如何修改子任务的状态,当然也可以修改story、bug等状态,步骤都是一样的,只是需要修改流程动作ID和issue类型。
更多文章请关注公众号
(五)Jira Api对接:修改任务状态的更多相关文章
- (四)Jira Api对接:缺陷分析和任务分析
迭代进行期间或者结束后,在我们的测试日报或者测试报告中需要体现缺陷详细情况,甚至大家工作效率情况.本文就讨论下如何通过jira api获取缺陷信息并进行分析,同时获取需求子任务情况来了解测试和开发的工 ...
- JIRA API 对接
系统要跟JIRA对接,将本系统数据发送给jira. 开始一头雾水怎么让数据传过去已什么形式存在,是存数据库呢还是怎么显示呢.研究半天发现其实只要将原数据作为json数据提供给jira接口,jira接口 ...
- Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探
Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...
- 动手实现 Redux(一):优雅地修改共享状态
从这节起我们开始学习 Redux,一种新型的前端“架构模式”.经常和 React.js 一并提出,你要用 React.js 基本都要伴随着 Redux 和 React.js 结合的库 React-re ...
- Magento后台手动修改订单状态方法及手动修改方法php
订单详细内容页手动修改订单状态方法: 打开此文件:app\design\adminhtml\default\default\template\sales\order\view\history.phtm ...
- Unity 3D动态修改Shader状态,使物体透明等等
Unity动态改Shader状态透明 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- SM30 客户端 有“不可修改”的状态
SM30维护自定义数据表时,遇到提示信息,有“不可修改”的状态,无法修改数据. 查询详细信息,有一条:客户端特定对象不能在此客户端中进行更改. 检查了一下自定表设置,发现自定义表之前创建时,Deliv ...
- jira以及jira API简单介绍
最近需要预言:是否可以通过jira API实现用例管理,对jira的应用.API.扩展等进行了一定的了解. Jira介绍: jira是目前比较流行的基于Java架构的管理系统(Atlassian公司支 ...
- zencart批量表上传后 标题显示为网址 批量修改标题状态 SEO三要素
zencart批量表上传后 标题显示为网址,原因是导入批量表时,产品标题对应状态被重置为0导致的 批量修改标题状态 ', metatags_products_name_status ', metata ...
随机推荐
- 设计模式——从工厂方法模式到 IOC/DI思想
回顾简单工厂 回顾:从接口的角度去理解简单工厂模式 前面说到了简单工厂的本质是选择实现,说白了是由一个专门的类去负责生产我们所需要的对象,从而将对象的创建从代码中剥离出来,实现松耦合.我们来看一个例子 ...
- JAVA题目:正整数n若是其平方数的尾部,则称n为同构数 如:5*5=25, 25*25=625 问: 求1~99中的所有同构数
1 /*题目:正整数n若是其平方数的尾部,则称n为同构数 2 如:5*5=25, 25*25=625 3 问: 求1~99中的所有同构数 4 */ 5 //分析:将1-99分为1-9和10-99,用取 ...
- Qt信号槽源码剖析(一)
大家好,我是IT文艺男,来自一线大厂的一线程序员 大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道:也就是说大家只知道怎么使用,却不知道基于什么原 ...
- SpringBoot整合阿里云OSS对象存储实现文件上传
1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...
- 【Java】 5.0 判断与转换
[概述] 在if/条件语句中,我们已经谈及判断了,这次将详细讲讲一些逻辑判断 基本逻辑 &:且,And,需要二者均为True |:或,Or ,需要二者其一为False即可 ^:异或,XOE,两 ...
- python进阶(7)--文件与异常
一.文件读取二.文件写入三.异常四.存储数据 ---------------------------------------分割线:正文-------------------------------- ...
- Lucas(卢卡斯)定理
Lucas(卢卡斯)定理 定义 若 \(p\) 为质数,且\(a\ge b\ge1\),则有: \[C_{a}^{b}\equiv C_{a/p}^{b/p}\cdot C_{a (mod\,p)}^ ...
- 让你的Windows/Linux玩上Switch!
1 前言 某天在Github上面看到了两个Switch的模拟器: yuzu Ryujinx 于是就想动手想尝试一下在Linux上面玩上Switch. 本文首先简单介绍一下两个模拟器,接着是两个模拟器的 ...
- Floyd算法C++实现与模板题应用
简介 Floyd算法算是最简单的算法,没有之一. 其状态转移方程如下map[i , j] =min{ map[i , k] + map[k , j] , map[i , j] }: map[i , j ...
- Day07_33_链表
链表 单链表 双向链表 * 什么是双向链表? 双向链表是链表的一种,由节点组成,每个数据结点中都有两个指针,分别指向直接后继和直接前驱. ![](https://img2020.cnblogs.com ...