在TFS中通过程序动态创建Bug并感知Bug解决状态
为便于跟踪问题解决情况,预警引擎产生的比较严重的预警日志,需要在TFS中登记Bug,通过TFS的状态流转,利用TFS Bug的Web挂钩功能,动态感知Bug解决状态,从而跟踪预警问题的解决状态,
整体解决方案如下:

微软提供了很好的文档支持:
https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#create-bug
创建Bug示例代码如下:
public void CreateBug()
{
string _userName = "userName";
string _userPwd = "userPwd";
string _credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", _userName , _userPwd))); Object[] patchDocument = new Object[]; patchDocument[] = new { op = "add", path = "/fields/System.Title", value = "Authorization Errors" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.TCM.ReproSteps", value = "ReproSteps" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.Common.Priority", value = "" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.Common.Severity", value = "2 - High" }; //use the httpclient
using (var client = new HttpClient())
{
//set our headers
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials); //serialize the fields array into a json string
var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json"); var method = new HttpMethod("PATCH");
var request = new HttpRequestMessage(method, "TFS Bug URL") { Content = patchValue };
var response = client.SendAsync(request).Result; //if the response is successfull, set the result to the workitem object
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
}
}
}
返回的result是一个Json串,形如:
{
"id": ,
"rev": ,
"fields": {
"System.AreaPath": "Bugs",
"System.TeamProject": "Bugs",
"System.IterationPath": "Bugs",
"System.WorkItemType": "Bug",
"System.State": "新建",
"System.Reason": "新建",
"System.AssignedTo": "用户 <TELD\\user>",
"System.CreatedDate": "",
"System.CreatedBy": "用户 <TELD\\user>",
"System.ChangedDate": "",
"System.ChangedBy": "用户 <TELD\\user>",
"System.Title": "测试新增",
"System.BoardColumn": "新建",
"System.BoardColumnDone": false,
"Microsoft.VSTS.Common.StateChangeDate": "",
"Microsoft.VSTS.Common.Priority": ,
"Microsoft.VSTS.Common.Severity": "3 - 中",
"Microsoft.VSTS.Common.ValueArea": "业务",
"Teld.Bug.Source": "预警引入",
"Teld.Bug.DetectionMode": "集成测试",
"Teld.Bug.ifCausedByModification": "否",
"Teld.Bug.Type": "程序错误",
"Teld.Bug.IfAgreeResultState": "初始",
"Teld.Bug.Client": "WebPC",
"Teld.Bug.FunctionMenu": "预警中心--预警日志",
"WEF_794F3BA7F8DF460D97A964BF78CEC582_Kanban.Column": "新建",
"WEF_794F3BA7F8DF460D97A964BF78CEC582_Kanban.Column.Done": false,
"Microsoft.VSTS.TCM.ReproSteps": "重现步骤"
},
"_links": {
"self": {
"href": ""
},
"workItemUpdates": {
"href": ""
},
"workItemRevisions": {
"href": ""
},
"workItemHistory": {
"href": ""
},
"html": {
"href": ""
},
"workItemType": {
"href": ""
},
"fields": {
"href": ""
}
},
"url": ""
}
以前只用过Http协议中的Get、Post、Put等,这个Patch方法,还是第一次用。
在TFS中通过程序动态创建Bug并感知Bug解决状态的更多相关文章
- .Net 中的反射(动态创建类型实例) - Part.4
动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...
- .Net 中的反射(动态创建类型实例)
动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...
- js中几种动态创建元素并设置文本内容的比较,及性能测试。
内容 1 appendChild (都兼容) 2.insertAdjacentHTML (都兼容) 3.innerHTML (都兼容) 4.createDocumentFragment (都兼容) 动 ...
- vue+el-element中根据文件名动态创建dialog的方法
背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定.如下: ...
- [UE4]C++中SpawnActor用法(动态创建Actor)
转自:http://aigo.iteye.com/blog/2270177 C++中创建一个Level并添加的Runtime当中 C++中Spawn一个基于蓝图的Actor https://answe ...
- elk搜集日志,实现logstash根据message中结构不同动态创建索引并扩展功能,区分message中json和非json数据简单方式
搜集日志,但是框架本身也会打印很多日志是字符串的.我们自己希望的日志用json,但是又需要json字段可以扩展,logstash收集日志后都放在了message字段中,我们自定义打印的是json串,s ...
- macOS 中使用 phpize 动态添加 PHP 扩展的错误解决方法
使用 phpize 动态添加 PHP 扩展是开发中经常需要做的事情,但是在 macOS 中,首次使用该功能必然会碰到一些错误,本文列出了这些错误的解决方法. 问题一: 执行 phpize 报错如下: ...
- Ubuntu中wine程序安装windows软件中文乱码如何解决
1.安装wine sudo apt install wine 2.安装中文程序方法 下载exe文件 在命令行执行 wine 文件名.exe 3.中文乱码原因分析 查看/home/用户名/.wine/d ...
- photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法
1.关闭防火墙和杀毒软件 2.删除注册表 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager目录,找到其中的 ...
随机推荐
- php抽奖概率算法(刮刮卡,大转盘)
两种方法:①概率随着抽的奖项的变少而时刻变化 经典的概率算法函数:如下 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(20, ...
- 众人拾柴火焰高之Tomcat集群
一人拾柴火不旺,众人拾柴火焰高.Tomcat服务器也是一样,一台服务器再强大能承受的访问也是有限的.要提供高并发.高可用的服务,就必须横向扩展,多台Tomcat组成一个集群,根据实际的访问量动态增减服 ...
- java多线程安全问题-同步修饰符于函数
上一篇文章通过卖票使用同步代码块的方法解决安全问题本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数synchronized修饰)解决安全问题 /* 需求: 银行有一个公共账号金库 ...
- Flash、Ajax各自的优缺点,在使用中如何取舍?
1.Flash ajax对比 Flash适合处理多媒体.矢量图形.访问机器:对CSS.处理文本上不足,不容易被搜索. Ajax对CSS.文本支持很好,支持搜索:多媒体.矢量图形.机器访问不足. 共同点 ...
- js移动端向左滑动出现删除按钮
最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因为之前实现相同的功能时用过这个插件,当时还挺好用的,直接使用 ...
- DEV下拉框LookUpEdit使用技巧
1,首先设置LookUpEdit要绑定的列,并配置隐藏列 2,设置下拉框是否显示表头,底部 3.设置下拉框宽度 4.设置显示的列与值列 5.设置初始值 6,绑定数据 7,取值
- http服务搭建
http服务器搭建 主配置文件在 /etc/httpd/conf/httpd.conf 安装http yum install httpd -y 启动http服务器 systemctl start ...
- PostgreSQL指南
PostgreSQL指南 历史简介 最近几年Postgres的关注度变得越来越高. 它加快了Postgres的发展步伐, 与此同时其他 的关系数据库系统的发展放缓. 在数据库领域中 Postgre S ...
- Kettle 4.4.2源码分析
一.获取并编译源码 1.1.获取源码 SVN:svn://source.pentaho.org/svnkettleroot/archive/Kettle/branches GitHub:https:/ ...
- Swift_字符串详解(String)
Swift_字符串详解(String) 类型别名 //类型别名 fileprivate func testTypeAliases() { let index = String.Index.self p ...