我们计划将测试用例,构建定义和代码从TFS移植到VSTS。但似乎我们无法将MTM中存在的测试用例中的参数和附件移动到VSTS。我们有办法完成这项工作吗?
答案 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]);
}
}