摘要
用Jira Api获取缺陷信息,深入剖析,提高工作效率。同时获取每日任务状况,掌握施工时间,让检测和开发设计更加顺畅。
正文
(四)Jira Api连接:缺点剖析和任务分析
迭代更新开展期内或是完毕后,在大家的检测日报或是检测报告中必须反映缺点具体情况,乃至大伙儿工作效能状况。文中就探讨下怎样根据jira api获得缺点信息内容并开展剖析,另外获得要求子每日任务状况来掌握检测和开发设计的施工时间。
实际编码以下
//定义数组目标
@Data
public class ReportData {
String name;
int bugNum;
int taskNum;
double taskTime;
String bugTate;
}
/**
* 获得sprint下的开发设计每日任务、测试任务及其缺点
*
* @param springId
* @return
*/
public static Map<String, Map<String, ReportData>> getReportData(String springId) {
Map<String, Map<String, ReportData>> result = new HashMap<>();
//缺点比较多时大家开展分页查询,默认设置一页150条数据信息
JSONObject jsonObject = getIssueKey(0, springId);
if (!JSONNull.getInstance().equals(jsonObject)) {
//分析查看的数据信息
Map<String, ReportData> testerData = new HashMap<>();//测试任务
Map<String, ReportData> developData = new HashMap<>();//开发设计每日任务
Map<String, ReportData> bugDetail = new HashMap<>();//缺陷等级
Map<String, ReportData> bugReason = new HashMap<>();//缺点缘故
//分析数据信息
result = getReportData(jsonObject, testerData, developData, bugDetail, bugReason);
//获得插口回到的缺点数量
int total = jsonObject.getInt("total");
logger.info("spring上一共有story" total "个");
if (total > 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, springId);
if (!JSONNull.getInstance().equals(object)) {
//分析数据信息
result = getReportData(object, result.get("testerGeneral"), result.get("developGeneral"), result.get("bugDetail"), result.get("bugReason"));
}
}
}
}
return result;
}
/**
* 获得spring下的issue
*
* @param startAt
* @param springId
* @return
*/
private static JSONObject getIssueKey(int startAt, String springId) {
//启用jira API接口获得sprint下全部issue
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;
}
/**
* 分析数据信息 各自分析出测试工程师状况,开发者状况,缺陷等级概述及其缺点缘故概述
*
* @param jsonObject
* @param testerData
* @param developData
* @param bugDetail
* @param bugReason
* @return
*/
private static Map<String, Map<String, ReportData>> getReportData(JSONObject jsonObject, Map<String, ReportData> testerData, Map<String, ReportData> developData, Map<String, ReportData> bugDetail, Map<String, ReportData> bugReason) {
Map<String, Map<String, ReportData>> result = new HashMap<>();
JSONArray issueArray = jsonObject.getJSONArray("issues");
if (issueArray != null && issueArray.size() > 0) {
for (int i = 0; i < issueArray.size(); i ) {
JSONObject issueObject = issueArray.getJSONObject(i);
JSONObject fields = issueObject.getJSONObject("fields");
if (!JSONNull.getInstance().equals(fields)) { //获得issuetype
JSONObject issuetype = fields.getJSONObject("issuetype");
if (!JSONNull.getInstance().equals(issuetype)) {
//获得issue 类型
String issuetypeName = issuetype.getString("name");
//获得经办人员信息内容
JSONObject assignee = fields.getJSONObject("assignee");
if (!JSONNull.getInstance().equals(assignee)) {
//获得经办人员好听的花名
String displayName = assignee.getString("displayName");
//获得达到目标的预计時间的信息内容,这一字段名是自定字段名
double originalEstimate = 0;
JSONObject timetracking = fields.getJSONObject("timetracking");
if (!JSONNull.getInstance().equals(timetracking) && timetracking.size() > 0) {
//获得预计時间
originalEstimate = timetracking.getInt("originalEstimateSeconds") / 3600;
}
//依据每日任务类型开展不一样的解决
switch (issuetypeName) {
case "Story"://要求
break;
case "SubTask"://开发设计子每日任务
setReportData(developData, displayName, originalEstimate, false);
break;
case "检测子每日任务":检测子每日任务
setReportData(testerData, displayName, originalEstimate, false);
break;
case "缺点":
//获得处理結果
JSONObject resolution = fields.getJSONObject("resolution");
if (!JSONNull.getInstance().equals(resolution)) {
//过虑掉被否定的bug
if ("被否定".equals(resolution.getString("name"))) {
break;
}
}
setReportData(developData, displayName, 0, true);
//获得汇报人信息内容
JSONObject reporter = fields.getJSONObject("reporter");
if (!JSONNull.getInstance().equals(reporter)) {
//获得汇报人好听的花名
String reporterName = reporter.getString("displayName");
setReportData(testerData, reporterName, 0, true);
}
//bug级别开展归类
JSONObject priority = fields.getJSONObject("priority");
setReportData(bugDetail, priority, "name");
//bug缘故开展归类
JSONObject reason = fields.getJSONObject("customfield_11522");
setReportData(bugReason, reason, "value");
default:
break;
}
}
}
}
}
}
result.put("testerGeneral", testerData);
result.put("developGeneral", developData);
result.put("bugDetail", bugDetail);
result.put("bugReason", bugReason);
return result;
}
/**
* 统一设定汇报信息内容
*
* @param reportDataMap
* @param key
* @param originalEstimate
* @param isBug
*/
private static void setReportData(Map<String, ReportData> reportDataMap, String key, double originalEstimate, boolean isBug) {
DecimalFormat decimalFormat = new DecimalFormat("0.00");
if (reportDataMap.containsKey(key)) {
//假如包括key
ReportData temp = reportDataMap.get(key);
if (originalEstimate != 0) {
//设定任务时间,以小时计算
temp.setTaskTime(temp.getTaskTime() originalEstimate);
}
if (isBug) {
//缺点总数 1
temp.setBugNum(temp.getBugNum() 1);
} else {
//每日任务总数 1
temp.setTaskNum(temp.getTaskNum() 1);
}
//设定不合格率
String formatNum = decimalFormat
.format((float) temp.getBugNum()
/ (temp.getTaskTime() == 0 ? 1 : temp.getTaskTime()) * 100);
temp.setBugTate(formatNum "%");
} else {
ReportData reportData = new ReportData();
if (originalEstimate != 0) {
//设定任务时间,以小时计算
reportData.setTaskTime(originalEstimate);
}
if (isBug) {
//缺点总数 1
reportData.setBugNum(1);
} else {
//每日任务总数 1
reportData.setTaskNum(1);
}
//设定不合格率
String formatNum = decimalFormat
.format((float) reportData.getBugNum()
/ (reportData.getTaskTime() == 0 ? 1 : reportData.getTaskTime()) * 100);
reportData.setBugTate(formatNum "%");
reportData.setName(key);
reportDataMap.put(key, reportData);
}
}
/**
* 统一设定汇报信息内容
*
* @param dataMap
* @param jsonObject
* @param key
*/
private static void setReportData(Map<String, ReportData> dataMap, JSONObject jsonObject, String key) {
if (!JSONNull.getInstance().equals(jsonObject)) {
//获得key值
String priorityName = jsonObject.getString(key);
if (dataMap.containsKey(priorityName)) {
//总数 1
ReportData reportData = dataMap.get(priorityName);
reportData.setBugNum(reportData.getBugNum() 1);
} else {
//总数 1
ReportData reportData = new ReportData();
reportData.setBugNum(1);
reportData.setName(priorityName);
dataMap.put(priorityName, reportData);
}
}
}
//getReportData(String sprintId) 方式 回到結果实例,依照Map载入成自身的文件格式就可以了
{
bugReason={
作用不正确=ReportData(name=作用不正确,
bugNum=3,
taskNum=0,
taskTime=0.0,
bugTate=null),
要求难题=ReportData(name=要求难题,
bugNum=1,
taskNum=0,
taskTime=0.0,
bugTate=null)
},
developGeneral={
桑落=ReportData(name=桑落,
bugNum=3,
taskNum=7,
taskTime=28.0,
bugTate=10.71%),
白衫=ReportData(name=白衫,
bugNum=0,
taskNum=8,
taskTime=18.0,
bugTate=0.00%),
清远市=ReportData(name=清远市,
bugNum=1,
taskNum=0,
taskTime=0.0,
bugTate=100.00%)
},
testerGeneral={
黄台=ReportData(name=黄台,
bugNum=4,
taskNum=3,
taskTime=24.0,
bugTate=16.67%)
},
bugDetail={
Medium=ReportData(name=Medium,
bugNum=4,
taskNum=0,
taskTime=0.0,
bugTate=null)
}
}
//对結果提升后以标志表明如下图


大量文章内容请扫码关注

关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!

温馨提示:如果您访问和下载本站资源,表示您已同意只将下载文件用于研究、学习而非其他用途。

评论0