【问题标题】:Azure DevOps API - Update Testcase Automation statusAzure DevOps API - 更新测试用例自动化状态
【发布时间】:2022-02-10 05:55:17
【问题描述】:

有没有办法使用 Azure DevOps API 将测试用例“自动化状态”更新为“自动化”?

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    您可以更新Microsoft.VSTS.TCM.AutomatedTestIdMicrosoft.VSTS.TCM.AutomatedTestStorageMicrosoft.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);
            }
        }
    }
    

    结果:

    1. 测试方法信息

    1. 自动化状态信息:

    【讨论】:

    • 谢谢!它对我有用。我也能找到这个解决方案。
    • @Andreykudin 很高兴知道 Shamrai 的 答案有助于解决您的问题,如果它是您问题的正确答案,请考虑 accepting it as answer。只是一个提醒;-)
    【解决方案2】:

    有没有办法将测试用例“自动化状态”更新为“自动化” 使用 Azure DevOps API?

    抱歉给您带来不便。据我所知,这是 Azure Devops Rest API 的一种不支持方案。

    Rest Api 确实提供了一个WorkItem-Update api 来更新一个工作项中的字段。我们可以使用它来将Automation status 更新为PlannedNot Automated

    但是Automated 状态是唯一的。与其他字段不同的是,除非有与之关联的测试,否则无法启用此选项。您可以在这里查看Andy's gif 以获得更好的理解。

    对于associate test with test case,我们必须使用 Visual Studio 来执行此操作。这无法从 Azure Devops 测试中心完成。这就是 Azure Devops Rest API 无法在您的方案中启用 Automated 状态的原因。 (只有我们用VS把test和在线测试用例关联起来,这个字段才能设置为Automated!)

    希望我的回答有助于解决你的困惑:)

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 2019-10-19
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多