private static void CreateTestSuites(ITestManagementTeamProject testProject, ITestPlan newTestPlan, Node node, IStaticTestSuite parentSuite, string parentAreaPath) { NodeCollection childNodes = node.ChildNodes; foreach (Node childNode in childNodes) { IStaticTestSuite newsuite = null; newsuite = (IStaticTestSuite)testProject.TestSuites.Find(68227); newsuite = testProject.TestSuites.CreateStatic(); newsuite.Title = childNode.Name; parentSuite.Entries.Add(newsuite); newTestPlan.Save(); try { //find tc's based on areapath IEnumerable <ITestCase> tcs = testProject.TestCases.Query(string.Format("SELECT [System.Id], [System.Title] FROM WorkItems WHERE [System.TeamProject]='{0}' AND [System.AreaPath]='{1}' AND [System.WorkItemType]='Test Case'", testProject.TeamProjectName, parentAreaPath + "\\" + childNode.Name)); //Add the above entries to the static test suite. foreach (ITestCase tc in tcs) { newsuite.Entries.Add(tc); } } catch { MyLogger.Log("Error while adding tcs for node : " + childNode.Name + " whose parent area path is : " + parentAreaPath); } newTestPlan.Save(); if (childNode.HasChildNodes) { CreateTestSuites(testProject, newTestPlan, childNode, newsuite, parentAreaPath + "\\" + childNode.Name); } } }
public static void CreateAreaPath(string areaPath, string uri, Guid projectGUID, string PAT) { try { var node = new Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemClassificationNode(); node.StructureType = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.TreeNodeStructureType.Area; string areaName = areaPath.Substring(areaPath.LastIndexOf('\\') + 1); string pathToParentNode = areaPath.Substring(areaPath.IndexOf('\\') + 1, areaPath.LastIndexOf('\\') - areaPath.IndexOf('\\')); node.Name = areaName; VssConnection connection = new VssConnection(new Uri(uri), new VssBasicCredential(string.Empty, PAT)); var client = connection.GetClient <WorkItemTrackingHttpClient>(); var result = client.CreateOrUpdateClassificationNodeAsync(node, projectGUID, Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.TreeStructureGroup.Areas, pathToParentNode).Result; } catch (AggregateException ex) { } catch (Exception ex) { MyLogger.Log("Error in AreaPath Creation : " + areaPath); throw; } }
static void Main(string[] args) { string uri = ConfigurationManager.AppSettings["Uri"]; string projectName = ConfigurationManager.AppSettings["ProjectName"]; string productName = ConfigurationManager.AppSettings["ProductName"]; string assignee = ConfigurationManager.AppSettings["Assignee"]; string PAT = ConfigurationManager.AppSettings["PAT"]; string baseDirectory = ConfigurationManager.AppSettings["BaseDirectory"]; string tcFileName = ConfigurationManager.AppSettings["TestCasesFile"]; bool createAreaPaths = Convert.ToBoolean(ConfigurationManager.AppSettings["CreateAreaPaths"]); bool createWorkItems = Convert.ToBoolean(ConfigurationManager.AppSettings["CreateWorkItems"]); bool createTestPlan = Convert.ToBoolean(ConfigurationManager.AppSettings["CreateTestPlan"]); string areaPathSuffix = ConfigurationManager.AppSettings["AreaPathSuffix"]; var project = VSTSOperations.GetTeamProject(uri, projectName); int logFileStartIndex = baseDirectory.LastIndexOf('\\', baseDirectory.Length - 2) + 1; MyLogger.FileName = AppDomain.CurrentDomain.BaseDirectory + baseDirectory.Substring(logFileStartIndex, baseDirectory.Length - logFileStartIndex - 1) + DateTime.Now.ToString("yyMMddHHmmss") + ".txt"; //MyLogger.Log("abbcddd"); if (createTestPlan) { VSTSOperations.ManageTestPlans(uri, project, ConfigurationManager.AppSettings["TestPlanName"]); } //Use this code to delete workitems //List<int> ids = new List<int>(); //for (int i = 63804; i <= 63804; i++) //{ // ids.Add(i); //} //VSTSOperations.DeleteWorkItemsOneByOne(uri, ids); //VSTSOperations.DeleteWorkItems(uri, ids); if (createWorkItems) { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(baseDirectory + tcFileName); Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[2]; Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; Stack <string> areaPathStack = new Stack <string>(); areaPathStack.Push(projectName + "\\" + productName + areaPathSuffix); if (createAreaPaths) { for (int i = 2; i <= rowCount; i++) { try { string suiteName = string.Empty; int depth = 0; if (xlRange.Cells[i, 1] != null && xlRange.Cells[i, 1].Value2 != null) { depth = Convert.ToInt32(xlRange.Cells[i, 1].Value2.ToString()); if (depth == -1) { break; } if (xlRange.Cells[i, 2] == null || xlRange.Cells[i, 2].Value2 == null) { throw new Exception("excel is not formatted correctly."); } suiteName = xlRange.Cells[i, 2].Value2.ToString(); suiteName = suiteName.Substring(suiteName.IndexOf(' ') + 1).Trim(); suiteName = Helpers.ReplaceReservedChars(suiteName); suiteName = Helpers.ReplaceExtraChars(suiteName); while (depth <= areaPathStack.Count - 1) { areaPathStack.Pop(); } areaPathStack.Push(areaPathStack.Peek() + "\\" + suiteName); VSTSOperations.CreateAreaPath(areaPathStack.Peek(), uri, project.Guid, PAT); project = VSTSOperations.GetTeamProject(uri, projectName); } } catch (Exception ex) { MyLogger.Log("Error while creating area path : " + areaPathStack.Peek() + " on row : " + i.ToString()); MyLogger.Log(ex.Message); } Console.WriteLine("Area Path Processed Row : " + i.ToString() + " of " + rowCount.ToString()); } } while (areaPathStack.Count != 0) { areaPathStack.Pop(); } areaPathStack.Push(projectName + "\\" + productName + areaPathSuffix); for (int i = 2; i <= rowCount; i++) { try { string suiteName = string.Empty; int depth = 0; if (xlRange.Cells[i, 1] != null && xlRange.Cells[i, 1].Value2 != null) { depth = Convert.ToInt32(xlRange.Cells[i, 1].Value2.ToString()); if (depth == -1) { break; } if (xlRange.Cells[i, 2] == null || xlRange.Cells[i, 2].Value2 == null) { throw new Exception("excel is not formatted correctly."); } suiteName = xlRange.Cells[i, 2].Value2.ToString(); suiteName = suiteName.Substring(suiteName.IndexOf(' ') + 1).Trim(); suiteName = Helpers.ReplaceReservedChars(suiteName); suiteName = Helpers.ReplaceExtraChars(suiteName); while (depth <= areaPathStack.Count - 1) { areaPathStack.Pop(); } areaPathStack.Push(areaPathStack.Peek() + "\\" + suiteName); //VSTSOperations.CreateAreaPath(areaPathStack.Peek(), uri, project.Guid, PAT); //project = VSTSOperations.GetTeamProject(uri, projectName); } Tuple <string, string>[] steps = new Tuple <string, string> [1]; string title = string.Empty; string description = string.Empty; string precondition = string.Empty; string Product = string.Empty; string Component = string.Empty; string SubComponent = string.Empty; string Priority = string.Empty; string Release = string.Empty; string AutomationStatus = string.Empty; string AutomationClassName = string.Empty; string AutomationID = string.Empty; string ReasonforNotAutomating = string.Empty; string TestCategory = string.Empty; string DeploymentMode = string.Empty; string PAMTags = string.Empty; string Test_Data = string.Empty; string SolutionName = string.Empty; string Applicable = string.Empty; string EpicIds = string.Empty; string NonWfmMode = string.Empty; string SsoMode = string.Empty; List <Tuple <string, string> > extraFields = new List <Tuple <string, string> >(); List <string> attachments = new List <string>(); if (xlRange.Cells[i, 3] != null && xlRange.Cells[i, 3].Value2 != null) { if (xlRange.Cells[i, 9] != null && xlRange.Cells[i, 9].Value2 != null) { precondition = "preconditions \r\n" + xlRange.Cells[i, 9].Value2.ToString() + "\r\n\r\n\r\n"; } string allsteps = precondition; string allexpectedresults = string.Empty; int iBeforeSteps = i; int iAfterSteps = i; if (xlRange.Cells[i, 11] != null && xlRange.Cells[i, 11].Value2 != null) { do { allsteps += xlRange.Cells[i, 11].Value2.ToString(); allexpectedresults += xlRange.Cells[i, 12].Value2.ToString(); i++; } while ((xlRange.Cells[i, 3] == null || xlRange.Cells[i, 3].Value2 == null) && (xlRange.Cells[i, 11] != null && xlRange.Cells[i, 11].Value2 != null)); iAfterSteps = i - 1; i = iBeforeSteps; } steps[0] = new Tuple <string, string>(allsteps, allexpectedresults); //if (xlRange.Cells[i, 11] != null && xlRange.Cells[i, 11].Value2 != null && xlRange.Cells[i, 12] != null && xlRange.Cells[i, 12].Value2 != null) //{ // steps[0] = new Tuple<string, string>(precondition + xlRange.Cells[i, 11].Value2.ToString(), xlRange.Cells[i, 12].Value2.ToString()); //} //else if (xlRange.Cells[i, 11] == null || xlRange.Cells[i, 11].Value2 == null) //{ // steps[0] = new Tuple<string, string>(precondition, xlRange.Cells[i, 12].Value2.ToString()); //} //else if (xlRange.Cells[i, 12] == null || xlRange.Cells[i, 12].Value2 == null) //{ // steps[0] = new Tuple<string, string>(precondition + xlRange.Cells[i, 11].Value2.ToString(), string.Empty); //} if (xlRange.Cells[i, 4] != null && xlRange.Cells[i, 4].Value2 != null) { title = xlRange.Cells[i, 4].Value2.ToString(); title = Helpers.ReplaceReservedChars(title); title = (title.Length > 255) ? title.Substring(0, 255) : title; } if (xlRange.Cells[i, 8] != null && xlRange.Cells[i, 8].Value2 != null) { description = xlRange.Cells[i, 8].Value2.ToString(); description = Helpers.ReplaceReservedChars(description); } if (xlRange.Cells[i, 15] != null && xlRange.Cells[i, 15].Value2 != null) { Component = xlRange.Cells[i, 15].Value2.ToString(); Component = Helpers.ReplaceReservedChars(Component); } if (xlRange.Cells[i, 16] != null && xlRange.Cells[i, 16].Value2 != null) { SubComponent = xlRange.Cells[i, 16].Value2.ToString(); SubComponent = Helpers.ReplaceReservedChars(SubComponent); } if (productName.Equals("foundation", StringComparison.InvariantCultureIgnoreCase)) { if (xlRange.Cells[i, 14] != null && xlRange.Cells[i, 14].Value2 != null) { Product = xlRange.Cells[i, 14].Value2.ToString(); Product = Helpers.ReplaceReservedChars(Product); } if (xlRange.Cells[i, 17] != null && xlRange.Cells[i, 17].Value2 != null) { Priority = xlRange.Cells[i, 17].Value2.ToString(); Priority = Helpers.ReplaceReservedChars(Priority); } if (xlRange.Cells[i, 18] != null && xlRange.Cells[i, 18].Value2 != null) { Release = xlRange.Cells[i, 18].Value2.ToString(); Release = Helpers.ReplaceReservedChars(Release); } if (xlRange.Cells[i, 19] != null && xlRange.Cells[i, 19].Value2 != null) { AutomationStatus = xlRange.Cells[i, 19].Value2.ToString(); AutomationStatus = Helpers.ReplaceReservedChars(AutomationStatus); } if (xlRange.Cells[i, 20] != null && xlRange.Cells[i, 20].Value2 != null) { AutomationClassName = xlRange.Cells[i, 20].Value2.ToString(); AutomationClassName = Helpers.ReplaceReservedChars(AutomationClassName); } if (xlRange.Cells[i, 21] != null && xlRange.Cells[i, 21].Value2 != null) { AutomationID = xlRange.Cells[i, 21].Value2.ToString(); AutomationID = Helpers.ReplaceReservedChars(AutomationID); } if (xlRange.Cells[i, 22] != null && xlRange.Cells[i, 22].Value2 != null) { ReasonforNotAutomating = xlRange.Cells[i, 22].Value2.ToString(); ReasonforNotAutomating = Helpers.ReplaceReservedChars(ReasonforNotAutomating); } if (xlRange.Cells[i, 23] != null && xlRange.Cells[i, 23].Value2 != null) { TestCategory = xlRange.Cells[i, 23].Value2.ToString(); TestCategory = Helpers.ReplaceReservedChars(TestCategory); } if (xlRange.Cells[i, 24] != null && xlRange.Cells[i, 24].Value2 != null) { DeploymentMode = xlRange.Cells[i, 24].Value2.ToString(); DeploymentMode = Helpers.ReplaceReservedChars(DeploymentMode); } if (xlRange.Cells[i, 25] != null && xlRange.Cells[i, 25].Value2 != null) { PAMTags = xlRange.Cells[i, 25].Value2.ToString(); PAMTags = Helpers.ReplaceReservedChars(PAMTags); } if (xlRange.Cells[i, 26] != null && xlRange.Cells[i, 26].Value2 != null) { Test_Data = xlRange.Cells[i, 26].Value2.ToString(); Test_Data = Helpers.ReplaceReservedChars(Test_Data); } if (xlRange.Cells[i, 27] != null && xlRange.Cells[i, 27].Value2 != null) { SolutionName = xlRange.Cells[i, 27].Value2.ToString(); SolutionName = Helpers.ReplaceReservedChars(SolutionName); } if (xlRange.Cells[i, 28] != null && xlRange.Cells[i, 28].Value2 != null) { Applicable = xlRange.Cells[i, 28].Value2.ToString(); Applicable = Helpers.ReplaceReservedChars(Applicable); } if (xlRange.Cells[i, 29] != null && xlRange.Cells[i, 29].Value2 != null) { EpicIds = xlRange.Cells[i, 29].Value2.ToString(); EpicIds = Helpers.ReplaceReservedChars(EpicIds); } } else if (productName.Equals("studio", StringComparison.InvariantCultureIgnoreCase)) { if (xlRange.Cells[i, 14] != null && xlRange.Cells[i, 14].Value2 != null) { Priority = xlRange.Cells[i, 14].Value2.ToString(); Priority = Helpers.ReplaceReservedChars(Priority); } if (xlRange.Cells[i, 17] != null && xlRange.Cells[i, 17].Value2 != null) { Release = xlRange.Cells[i, 17].Value2.ToString(); Release = Helpers.ReplaceReservedChars(Release); } if (xlRange.Cells[i, 18] != null && xlRange.Cells[i, 18].Value2 != null) { DeploymentMode = xlRange.Cells[i, 18].Value2.ToString(); DeploymentMode = Helpers.ReplaceReservedChars(DeploymentMode); } if (xlRange.Cells[i, 19] != null && xlRange.Cells[i, 19].Value2 != null) { PAMTags = xlRange.Cells[i, 19].Value2.ToString(); PAMTags = Helpers.ReplaceReservedChars(PAMTags); } if (xlRange.Cells[i, 20] != null && xlRange.Cells[i, 20].Value2 != null) { TestCategory = xlRange.Cells[i, 20].Value2.ToString(); TestCategory = Helpers.ReplaceReservedChars(TestCategory); } if (xlRange.Cells[i, 21] != null && xlRange.Cells[i, 21].Value2 != null) { AutomationStatus = xlRange.Cells[i, 21].Value2.ToString(); AutomationStatus = Helpers.ReplaceReservedChars(AutomationStatus); } if (xlRange.Cells[i, 22] != null && xlRange.Cells[i, 22].Value2 != null) { AutomationClassName = xlRange.Cells[i, 22].Value2.ToString(); AutomationClassName = Helpers.ReplaceReservedChars(AutomationClassName); } if (xlRange.Cells[i, 23] != null && xlRange.Cells[i, 23].Value2 != null) { AutomationID = xlRange.Cells[i, 23].Value2.ToString(); AutomationID = Helpers.ReplaceReservedChars(AutomationID); } if (xlRange.Cells[i, 24] != null && xlRange.Cells[i, 24].Value2 != null) { Test_Data = xlRange.Cells[i, 24].Value2.ToString(); Test_Data = Helpers.ReplaceReservedChars(Test_Data); } if (xlRange.Cells[i, 25] != null && xlRange.Cells[i, 25].Value2 != null) { ReasonforNotAutomating = xlRange.Cells[i, 25].Value2.ToString(); ReasonforNotAutomating = Helpers.ReplaceReservedChars(ReasonforNotAutomating); } if (xlRange.Cells[i, 26] != null && xlRange.Cells[i, 26].Value2 != null) { EpicIds = xlRange.Cells[i, 26].Value2.ToString(); EpicIds = Helpers.ReplaceReservedChars(EpicIds); } if (xlRange.Cells[i, 27] != null && xlRange.Cells[i, 27].Value2 != null) { NonWfmMode = xlRange.Cells[i, 27].Value2.ToString(); NonWfmMode = Helpers.ReplaceReservedChars(NonWfmMode); } if (xlRange.Cells[i, 28] != null && xlRange.Cells[i, 28].Value2 != null) { SsoMode = xlRange.Cells[i, 28].Value2.ToString(); SsoMode = Helpers.ReplaceReservedChars(SsoMode); } } else { if (xlRange.Cells[i, 14] != null && xlRange.Cells[i, 14].Value2 != null) { Priority = xlRange.Cells[i, 14].Value2.ToString(); Priority = Helpers.ReplaceReservedChars(Priority); } if (xlRange.Cells[i, 17] != null && xlRange.Cells[i, 17].Value2 != null) { Release = xlRange.Cells[i, 17].Value2.ToString(); Release = Helpers.ReplaceReservedChars(Release); } if (xlRange.Cells[i, 18] != null && xlRange.Cells[i, 18].Value2 != null) { AutomationStatus = xlRange.Cells[i, 18].Value2.ToString(); AutomationStatus = Helpers.ReplaceReservedChars(AutomationStatus); } if (xlRange.Cells[i, 21] != null && xlRange.Cells[i, 21].Value2 != null) { TestCategory = xlRange.Cells[i, 21].Value2.ToString(); TestCategory = Helpers.ReplaceReservedChars(TestCategory); } } if (productName.Equals("foundation", StringComparison.InvariantCultureIgnoreCase)) { extraFields.Add(new Tuple <string, string>("Product", Product)); extraFields.Add(new Tuple <string, string>("Solution Name", SolutionName)); extraFields.Add(new Tuple <string, string>("Applicable", Applicable)); } else if (productName.Equals("studio", StringComparison.InvariantCultureIgnoreCase)) { extraFields.Add(new Tuple <string, string>("NON WFM Mode", NonWfmMode)); extraFields.Add(new Tuple <string, string>("SSO Mode", SsoMode)); } extraFields.Add(new Tuple <string, string>("Component", Component)); extraFields.Add(new Tuple <string, string>("Sub Component", SubComponent)); extraFields.Add(new Tuple <string, string>("qtestPriority", Priority)); extraFields.Add(new Tuple <string, string>("Release", Release)); extraFields.Add(new Tuple <string, string>("qTestAutomation Status", AutomationStatus)); extraFields.Add(new Tuple <string, string>("AutomationClassName", AutomationClassName)); extraFields.Add(new Tuple <string, string>("Automation ID", AutomationID)); extraFields.Add(new Tuple <string, string>("Reason for Not Automating", ReasonforNotAutomating)); extraFields.Add(new Tuple <string, string>("Test Category", TestCategory)); extraFields.Add(new Tuple <string, string>("Deployment Mode", DeploymentMode)); extraFields.Add(new Tuple <string, string>("PAM Tags", PAMTags)); extraFields.Add(new Tuple <string, string>("Test_Data", Test_Data)); extraFields.Add(new Tuple <string, string>("EPIC_IDs", EpicIds)); if (xlRange.Cells[i, 5] != null && xlRange.Cells[i, 5].Value2 != null) { do { string attachmentUrl = ((Excel.Range)xlRange.Cells[i, 5]).Cells.Hyperlinks[1].Address; attachments.Add(baseDirectory + attachmentUrl); i++; } while ((xlRange.Cells[i, 3] == null || xlRange.Cells[i, 3].Value2 == null) && (xlRange.Cells[i, 5] != null && xlRange.Cells[i, 5].Value2 != null)); i--; i = (i > iAfterSteps) ? i : iAfterSteps; } VSTSOperations.CreateNewTestCase(uri, project, title, areaPathStack.Peek(), projectName, description, assignee, steps, extraFields, attachments); } Console.WriteLine("Processed Row : " + i.ToString() + " of " + rowCount.ToString()); } catch (Exception ex) { MyLogger.Log("Error while processing row : " + i.ToString()); MyLogger.Log(ex.Message); } } //cleanup GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.ReleaseComObject(xlRange); Marshal.ReleaseComObject(xlWorksheet); xlWorkbook.Close(); Marshal.ReleaseComObject(xlWorkbook); xlApp.Quit(); Marshal.ReleaseComObject(xlApp); } }