TFS에서 VSTS로 테스트 사례를 이동하고 정의 및 코드를 빌드 할 계획입니다. 그러나 MTM에있는 테스트 사례의 매개 변수와 첨부 파일을 VSTS로 이동할 수없는 것으로 보입니다. 이 일을 처리 할 수있는 방법이 있습니까?매개 변수 및 첨부 파일과 함께 TFS에서 VSTS로 테스트 사례 마이그레이션
답변
매개 변수와 첨부 파일을 사용하여 테스트 사례를 TFS에서 VSTS로 개별적으로 마이그레이션하는 것은 어렵습니다.
시험 계획/스위트/케이스 밝혀졌다 Bulk Migrate Work Item Comments, Links and Attachments
테스트 케이스 마이그레이션하기 어려운 특히 일을 참조하십시오. 우리에게 이 가능할 수있는 툴링을 찾을 수 없었습니다. TFS SDK (온 - 프레미스)을 사용하여 테스트를 관리 할 수 있으며 VSTS를위한 편안한 API가 있으므로 시간이 허용되는 경우 맞춤 솔루션 을 생성 할 수 있습니다.
불행하게도 Excel은 테스트 계획 및 스위트가 평소와 같이 쿼리 될 수없고 테스트 스위트 및 테스트 세트가 게시 될 때 이 테스트 스위트 또는 계획에 링크 될 수 없기 때문에 질문에서 제외되었습니다. OpsHub Visual Studio Online Migration Utility
: 또한이 도구를 시도 할 수 있습니다 TFS 2017 Migration To VSTS with VSTS Sync Migrator
그러나이 문서에 언급 된 단계를 수행하여 VSTS Sync Migrator 도구를 시도 할 수 있습니다 전체 프로젝트를 TFS에서 VSTS로 마이그레이션하려는 경우 공식 TfsMigrator tool을 사용하여 가이드를 수행하면됩니다.
참고 : 먼저 지원되는 버전으로 TFS를 업그레이드해야.
또한 마이그레이션 기사 아래 referenc 수: 우리의 VSTS (그러나 매개 변수 및 첨부 파일에 TFS에서 테스트 케이스를 이동 할 수 있었다
테스트 사례가 마이그레이션되지 않았습니다.
@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]);
}
}
감사 앤디를 사용했다. 고마워요! – Coder