在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目录,找到其中的 ...
随机推荐
- Iterator——迭代接口
迭代对于JAVA的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator.ha ...
- asp.net core mvc剖析:处理管道构建
在启动流程文章中提到,在WebHost类中,通过BuildApplication完成http请求处理管道的构建.在来看一下代码: ...... //这个调用的就是Startup.cs类中的Config ...
- java集合框架04——LinkedList和源码分析
上一章学习了ArrayList,并分析了其源码,这一章我们将对LinkedList的具体实现进行详细的学习.依然遵循上一章的步骤,先对LinkedList有个整体的认识,然后学习它的源码,深入剖析Li ...
- Radis安装
基本知识 1.Redis的数据类型: 字符串.列表(lists).集合(sets).有序集合(sorts sets).哈希表(hashs) 2.Redis和memcache相比的独特之处: (1)re ...
- 基于vue2.0+vuex+localStorage开发的本地记事本
本文采用vue2.0+vuex+localStorage+sass+webpack,实现一个本地存储的记事本.兼容PC端和移动端.在线预览地址:DEMO github地址:https://github ...
- centos7搭建nexus maven私服
前置条件: 1.安装jdk,可参考 http://www.cnblogs.com/grey-wolf/p/6480489.html 2.nexus仓库管理器,分为两个版本,Nexus Reposito ...
- gstunnel---一个网络安全管道
项目简介: gstunnel 是 基于go 语言开发的一个安全网络管道,支持tcp协议. gstunnel分为client和server两部分. gstunnel 基于aes进行数据加密. 流程示意: ...
- .Net软件开发面试技巧
2016.11.20日,我们毕业了!到了大家各奔东西的日子了,有留在家里的,有另求出路的,有留在哈尔滨的,有去北京的!去北京的一共有11个同学,我就是这11个人里的一个! 大学刚毕业的时候,在济南上班 ...
- MySQL两种引擎的区别
Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL ...
- nginx新手入门
nginx的应用 官网(nginx.org) nginx可以做1.web服务(http服务)2.http代理服务3负载均衡在官网(nginx.org)如下图处下载先点击 跳转下一页点击(nginx/w ...