将测试用例从TFS迁移到VSTS以及参数和附件

时间:2017-11-22 10:59:00

标签: tfs azure-devops

我们计划将测试用例,构建定义和代码从TFS移植到VSTS。但似乎我们无法将MTM中存在的测试用例中的参数和附件移动到VSTS。我们有办法完成这项工作吗?

2 个答案:

答案 0 :(得分:3)

使用参数和附件将测试用例与TFS分开迁移到VSTS很困难。见Bulk Migrate Work Item Comments, Links and Attachments

  

测试用例

     

特别是测试计划/套件/案例   难以迁移。我们找不到任何可以使用的工具   为我们这样做。可以使用TFS SDK管理测试   内部部署,VSTS有一个安静的API,因此是一个自定义的解决方案   可以在时间允许的情况下制作。

     

不幸的是,Excel作为测试计划和套件是不可能的   不能像往常一样查询和发布的测试用例没有   可以链接到测试套件或计划。   的 Source Here

但是,您可以按照本文中提到的步骤尝试使用VSTS Sync Migrator工具: TFS 2017 Migration To VSTS with VSTS Sync Migrator

您也可以尝试使用此工具:OpsHub Visual Studio Online Migration Utility

如果您想将整个项目从TFS迁移到VSTS,那么您可以使用官方TfsMigrator tool并按照指南进行操作。

注意: 您需要先将TFS升级到支持的版本。

您还可以参考以下文章进行迁移:

答案 1 :(得分:1)

我们能够将测试用例从TFS移到VSTS(但是测试用例的参数和附件没有随之迁移)

感谢@Andy Li-MSFT(提供有用的链接和解释)和探索网络/头脑风暴,我们最终在C#中编写了一段代码,将旧测试用例中的参数和附件复制到VSTS中新移动的测试用例中。

使用名称空间

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.TeamFoundation.TestManagement.Client;
using System.Net;


 List<int> TestCaseIds_Old = new List<int> { 100, 102, 103 };
            List<int> TestCaseIds_New = new List<int> { 10023, 42102, 67103 };

            TfsTeamProjectCollection teamProjectCollection_Old = new TfsTeamProjectCollection(new Uri("OLD TFS Collection URL"));
            TfsTeamProjectCollection teamProjectCollection_New = new TfsTeamProjectCollection(new Uri("NEW TFS Collection URL"));

            ITestManagementService testManService_Old = teamProjectCollection_Old.GetService<ITestManagementService>();
            ITestManagementService testManService_New = teamProjectCollection_New.GetService<ITestManagementService>();

            var project_Old = testManService_Old.GetTeamProject("OLD Project");
            var project_New = testManService_New.GetTeamProject("NEW Project");

            for (int id = 0; id < TestCaseIds_New.Count; id++)
            {
                var testCase_Old = project_Old.TestCases.Find(TestCaseIds_Old[id]);
                var testCase_New = project_New.TestCases.Find(TestCaseIds_New[id]);
                for (int i = 0; i < testCase_Old.Data.Tables[0].Rows.Count; i++)
                {
                    var rowCollection = testCase_Old.Data.Tables[0].Rows[i].ItemArray;
                    testCase_New.Data.Tables[0].Rows.Add(rowCollection);
                }

                List<string> fileLocations = new List<string>();
                if (testCase_Old.Attachments.Count > 0)
                {
                    WorkItemStore workItemStore = teamProjectCollection_Old.GetService<WorkItemStore>();
                    WorkItem requiredWorkItem = workItemStore.GetWorkItem(TestCaseIds_Old[id]);
                    WebClient webClient = new WebClient();
                    webClient.Credentials = System.Net.CredentialCache.DefaultCredentials;
                    for (int i = 0; i < requiredWorkItem.Attachments.Count; i++)
                    {
                        webClient.DownloadFile(requiredWorkItem.Attachments[i].Uri, "D:\\Attachments\\" + requiredWorkItem.Attachments[i].Name);
                        testCase_New.Attachments.Add(testCase_New.CreateAttachment("D:\\Attachments\\" + requiredWorkItem.Attachments[i].Name, SourceFileAction.None));
                        fileLocations.Add("D:\\Attachments\\" + requiredWorkItem.Attachments[i].Name);
                    }

                }
                testCase_New.Save();
                for (int i = 0; i < fileLocations.Count; i++)
                {
                    File.Delete(fileLocations[0]);
                }

            }