月末总结中每月需要从Jira平台中统计各个项目的新增、关闭以及遗留bug数,人工去对各个项目进行条件筛选统计,耗时较长且容易出错,故计划做一个自动去筛选获取Jira平台各个项目每个月的数据

Jira请求

首先找到了Jira的API文档:https://docs.atlassian.com/jira/REST/latest/#api/2/search-search,其中的 api/2/search 接口为资源搜索API,包括POST和GET,使用JQL搜索问题且排序jql参数是一个完整的jql表达式,并包括ORDER BY子句。

试着使用http://jira.xxxx.com/rest/api/2/search?jql=project = REM AND resolution = Unresolved ORDER BY priority DESC, updated DESC
在网页端获取到返回的值,结果如下:

{"expand":"schema,names","startAt":0,"maxResults":50,"total":159,"issues":
[{"expand":"operations,editmeta,changelog,transitions,renderedFields",
"id":"27451","self":"http://.../rest/api/2/issue/27451","key":"REM-191","fields":
{"fixVersions":[],"resolution":null,"customfield_10510":null,"customfield_10500":null,
"customfield_10501":null,"customfield_10502":null,"customfield_10503":null,"customfield_10504":null,
"customfield_10505":null,"customfield_10506":null,"customfield_10507":null,"customfield_10508":null,
"customfield_10509":null,"lastViewed":"2016-03-12T08:50:42.732+0800","customfield_10460":null,
"customfield_10461":null,"priority":......

在返回值中,只需要"total":159 这个值,用JAVA去解析获取到的json格式的值:

import net.sf.json.JSONObject;
public class JsonDemo {public static void main(String[] args) {String str = "{\"expand\":\"schema,names\",\"startAt\":0,\"maxResults\":50,\"total\":159}";JSONObject jsonObject = JSONObject.fromObject(str);  int total = jsonObject.getInt("total");System.out.println("Get the total value :"+total);        }
}

运行后得到的结果为:
Get the total value :137

但是上面的请求是由于该网页已经记录我的Jira账号的登录信息,若没的话,返回的值为:

{"errorMessages":["'project' 字段中没有  'REM'","字段 'resolution'
不存在或这个字段不允许匿名用户查看。",
"无法对字段 'priority'进行排序"],"errors":{}}

故我们现在须先模拟登录Jira平台,先使用Fiddler清空浏览器缓存然后抓包看看登录请求

请求中Cookie包含的变量值:atlassian.xsrf.token、JSESSIONID、ca_uuid、pgv_pvi、pgv_si
尝试着使用Jmeter等工具模拟发包,返回值中无法获取Cookie中pgv_pvi、pgv_si这两个值。

现使用nodejs模拟Jira登录:
在使用前,先下载需要使用的module,如下面需要使用的’node-rest-client’和’mysql’模块,可以在http://npm.taobao.org/ 淘宝 NPM 镜像中下载,也可以直接cmd输入npm install node-rest-client 下载node-rest-client等模块

var Client = require('node-rest-client').Client;
client = new Client();
//提供用户凭据,将用于登录到JIRA
var loginArgs = {data: {"username": "******","password": "******"      },headers: {"Content-Type": "application/json"}
};client.post("http://.../rest/auth/1/session", loginArgs, function (data, response) {if (response.statusCode == 200) {console.log('succesfully logged in, session:', data.session);var session = data.session;//获得会话信息,并将其存储在cookie的一个headervar searchArgs = {headers: {//设置会话信息的Cookiecookie: session.name + '=' + session.value,"Content-Type": "application/json"},data: { xxxxxx }};

将Cookie的值传给search请求,在data中提供添加JIRA搜索附加数据,加入JQL JIRA查询语句,可以进行JQL搜索。
在Data中添加:

jql: "project = REM AND resolution = Unresolved ORDER BY priority DESC, updated DESC"

传递头信息(包括cookie)和附加的查询JQL模块,请求返回搜索结果:

client.post("http://.../rest/api/2/search", searchArgs, function (searchResult, response) {console.log('status code:', response.statusCode);console.log('searchResult:', searchResult);
});

在查询的结果searchResult中,只需要获取total(即bug数)的值,故提取total的值:

var bugsnum = searchResult.total;

现需要封装查询函数,将bugsnum的值return给JiraRequest函数:

function JiraRequest(){client.post("http://.../rest/auth/1/session",loginArgs, function (data, response) {var bugsnum = searchResult.total;return bugsnum}
}

此时调用JiraRequest:

var requestResult = JiraRequest();

得到requestResult的值为undefined
这里需要用到一个回调函数:

function JiraRequest(callback) {    // 请求返回搜索结果,通过头信息,包括cookieclient.post("http://.../rest/api/2/search", searchArgs, function (searchResult, response) {var num = searchResult.total;callback(num);});
}

此时调用JiraRequest函数

var callbackFn = function (num) {   console.log('num:'+num);
}
JiraRequest(callbackFn);

也可以这样调用

JiraRequest(function (num) {console.log(num);
});

【Jira数据自动化】Jira接口请求(一)相关推荐

  1. 如何实现高质量的系统数据对接/API接口整合集成方案?

    我们建立一个数字化系统可能会有跟别的系统进行数据对接的需要,而别人的数字化系统也有可能需要跟我们的系统进行数据对接,也可能我们开发了不同的网站,网站小应用之间需要进行数据对接.那么数据对接应该如何操作 ...

  2. Python快速使用jira模块调用Jira接口

    Python快速使用jira模块调用Jira接口 JIRA介绍: JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作 ...

  3. 大数据服务平台---接口自动化

    大数据服务平台接口自动化-实践 业务背景: 某大数据风险智能服务平台,海量的风险.舆情.情报.文书等工商信息.除了用户pc端.app端的应用,还有细分后台管理功能. 接口自动化背景分析: 1. 数据服 ...

  4. Selenium UI 自动化获取接口数据

    Selenium UI 自动化获取接口数据 1.前端向接口的传参: 2.捕获到接口返回的内容后,判断前端是否有按照接口返回的内容进行展示 针对第一点,我上家公司是做旅游的,旅客预订完人数.房间数后前端 ...

  5. 接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63

    接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63 参考文章: (1)接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63 (2)https://www.cnbl ...

  6. cvs数据导入工具 oracle_为中国企业打造的研发项目管理工具ONES Project已支持Jira数据导入...

    Jira作为2003年发布的项目管理软件,是很多团队多年前做项目管理的首选.ONES在中国推出项目管理工具ONES Project,之后又扩展开发了团队知识库.测试用例管理.项目集管理等多个产品,逐渐 ...

  7. 【转】Postman系列四:Postman接口请求设置环境变量和全局变量、测试沙箱和测试断言、测试集运行与导入数据文件

    一:Postman中接口请求设置环境变量和全局变量 全局变量和环境变量可以通过Pre-request Script和Tests设置,会在下面测试沙箱和测试断言中讲到. 全局变量的设置:官网参考http ...

  8. NodeJs本地搭建服务器,模拟接口请求,获取json数据

    最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...

  9. 技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?

    本文分享自华为云社区<如何解决异步接口请求快慢不均导致的数据错误问题?>,原文作者:Kagol . 引言 搜索功能,我想很多业务都会涉及,这个功能的特点是: 用户可以在输入框中输入一个关键 ...

最新文章

  1. AD采样不准解决措施
  2. ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
  3. OnClientClick和OnClick同时使用!
  4. Leetcode-1154 Ordinal Number Of Date(一年中的第几天)
  5. mono linux 运行机制,linux – Mono如何神奇?
  6. 刷新tabpanel中的子项目内容
  7. Docker 多模块打包启动(kitty-generator)
  8. Object-C学习(一)——类别的创建、实现及调用
  9. 使用代码辅助生成工具CodeSmith -- 生成NHibernate的映射文件
  10. respondsToSelector
  11. cad转图片格式后不清晰怎么办?三步即可解决
  12. 简述sqlite数据库的特点_sqlite数据库特点
  13. 高强度间歇训练(HIIT)
  14. 十几年稳坐“大哥”位,搞Java的程序员就是这么“牛x”!
  15. 朱小丹调研广东工业机器人产业有何深意?
  16. 一周上榜新书:强化学习、深度学习最受程序员关注
  17. Unity学习日常问题记录五--3dMax导入模型的一些问题
  18. HDU3687 National Day Parade
  19. 新手Python爬虫教学(Request+BeautifulSoup)
  20. 搭建:LVS+Keepalived高可用Web服务群集环境

热门文章

  1. android 头部折叠,Android 头像折叠效果
  2. 面试准备(常见问题)
  3. python爬虫爬出新高度
  4. 公司拖欠后端工资逼急了可以删库跑路,逼急了前端该如何何去何从?
  5. ES的安装使用(windows版)
  6. 《笨方法学 Python 3》43.基本的面向对象分析和设计
  7. 刘晓燕《不就是语法和长难句吗》第一章个人笔记
  8. 头像叠加android_Android开发头像挨着叠加效果
  9. 电脑使用cmd发送邮件——以QQ邮件为例
  10. Hololens远程视频通话与AR标注