【发布时间】:2022-02-10 05:55:17
【问题描述】:
有没有办法使用 Azure DevOps API 将测试用例“自动化状态”更新为“自动化”?
【问题讨论】:
标签: azure-devops
有没有办法使用 Azure DevOps API 将测试用例“自动化状态”更新为“自动化”?
【问题讨论】:
标签: azure-devops
您可以更新Microsoft.VSTS.TCM.AutomatedTestId、Microsoft.VSTS.TCM.AutomatedTestStorage 和Microsoft.VSTS.TCM.AutomatedTestName 字段。然后 Azure DevOps 会将自动化状态更新为自动化。这是Microsoft.TeamFoundationServer.Client 的示例:
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.TestManagement.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.VisualStudio.Services.WebApi.Patch;
using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static readonly string TFUrl = "https://dev.azure.com/<your_org>/";
static readonly string UserAccount = "";
static readonly string UserPassword = "";
static readonly string UserPAT = "<your_pat>"; //https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops
static WorkItemTrackingHttpClient WitClient;
static BuildHttpClient BuildClient;
static ProjectHttpClient ProjectClient;
static GitHttpClient GitClient;
static TfvcHttpClient TfvsClient;
static TestManagementHttpClient TestManagementClient;
static TeamHttpClient TeamClient;
static void Main(string[] args)
{
try
{
ConnectWithPAT(TFUrl, UserPAT);
Dictionary<string, object> fields = new Dictionary<string, object>();
fields.Add("Microsoft.VSTS.TCM.AutomatedTestId", "123");
fields.Add("Microsoft.VSTS.TCM.AutomatedTestStorage", "MyClassName");
fields.Add("Microsoft.VSTS.TCM.AutomatedTestName", "NameOfAutomatedTest");
UpdateWorkItem(test_case_id, fields);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
if (ex.InnerException != null) Console.WriteLine("Detailed Info: " + ex.InnerException.Message);
Console.WriteLine("Stack:\n" + ex.StackTrace);
}
}
static WorkItem UpdateWorkItem(int WIId, Dictionary<string, object> Fields)
{
JsonPatchDocument patchDocument = new JsonPatchDocument();
foreach (var key in Fields.Keys)
patchDocument.Add(new JsonPatchOperation()
{
Operation = Operation.Add,
Path = "/fields/" + key,
Value = Fields[key]
});
return WitClient.UpdateWorkItemAsync(patchDocument, WIId).Result;
}
static void InitClients(VssConnection Connection)
{
WitClient = Connection.GetClient<WorkItemTrackingHttpClient>();
BuildClient = Connection.GetClient<BuildHttpClient>();
ProjectClient = Connection.GetClient<ProjectHttpClient>();
TeamClient = Connection.GetClient<TeamHttpClient>();
GitClient = Connection.GetClient<GitHttpClient>();
TfvsClient = Connection.GetClient<TfvcHttpClient>();
TestManagementClient = Connection.GetClient<TestManagementHttpClient>();
}
static void ConnectWithDefaultCreds(string ServiceURL)
{
VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssCredentials());
InitClients(connection);
}
static void ConnectWithCustomCreds(string ServiceURL, string User, string Password)
{
VssConnection connection = new VssConnection(new Uri(ServiceURL), new WindowsCredential(new NetworkCredential(User, Password)));
InitClients(connection);
}
static void ConnectWithPAT(string ServiceURL, string PAT)
{
VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssBasicCredential(string.Empty, PAT));
InitClients(connection);
}
}
}
结果:
【讨论】:
有没有办法将测试用例“自动化状态”更新为“自动化” 使用 Azure DevOps API?
抱歉给您带来不便。据我所知,这是 Azure Devops Rest API 的一种不支持方案。
Rest Api 确实提供了一个WorkItem-Update api 来更新一个工作项中的字段。我们可以使用它来将Automation status 更新为Planned 或Not Automated。
但是Automated 状态是唯一的。与其他字段不同的是,除非有与之关联的测试,否则无法启用此选项。您可以在这里查看Andy's gif 以获得更好的理解。
对于associate test with test case,我们必须使用 Visual Studio 来执行此操作。这无法从 Azure Devops 测试中心完成。这就是 Azure Devops Rest API 无法在您的方案中启用 Automated 状态的原因。 (只有我们用VS把test和在线测试用例关联起来,这个字段才能设置为Automated!)
希望我的回答有助于解决你的困惑:)
【讨论】: