public QtestTestSuite GetQtestTestSuite(string testSuiteID) { QtestTestSuite testSuite = new QtestTestSuite(); testSuite.ID = testSuiteID; return(ImportTestSetData(testSuite)); }
public QtestTestSuite ImportTestSetData(QtestTestSuite TS) { ConnectALMServer(); testrunApi = new QTestApi.TestrunApi(connObj.Configuration); testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); QTestApiModel.ParameterPostQueryResponse existedParameters = null; try { QTestApi.ParametersApi parametersApi = new QTestApi.ParametersApi(ALMCore.DefaultAlmConfig.ALMUserName, ALMCore.DefaultAlmConfig.ALMPassword, connObj.Configuration); existedParameters = parametersApi.GetAllParameters((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey)); } catch (Exception ex) { Reporter.ToLog(eLogLevel.ERROR, $"Method - {MethodBase.GetCurrentMethod().Name}, Error - {ex.Message}", ex); } List <QTestApiModel.TestRunWithCustomFieldResource> testRunList = testrunApi.GetOf((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(TS.ID), "test-suite"); foreach (QTestApiModel.TestRunWithCustomFieldResource testRun in testRunList) { QTestApiModel.TestRunWithCustomFieldResource testRunCurrent = testrunApi.Get((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testRun.Id, "testcase.teststep"); QtestTest test = GetQtestTest(testRun.TestCase.Id, existedParameters, testRunCurrent.TestCase); test.Runs = new List <QtestTestRun>(); test.Runs.Add(new QtestTestRun(testRun.Id.ToString(), testRun.Name, testRun.Properties[0].ToString(), testRun.CreatorId.ToString())); TS.Tests.Add(test); } return(TS); }
public override bool ExportBusinessFlowToALM(BusinessFlow businessFlow, bool performSaveAfterExport = false, eALMConnectType almConectStyle = eALMConnectType.Silence, string parentObjectId = null, string testCaseParentObjectId = null) { if (businessFlow == null) { return(false); } if (businessFlow.ActivitiesGroups.Count == 0) { Reporter.ToUser(eUserMsgKey.StaticInfoMessage, "The " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " do not include " + GingerDicser.GetTermResValue(eTermResKey.ActivitiesGroups) + " which supposed to be mapped to ALM Test Cases, please add at least one " + GingerDicser.GetTermResValue(eTermResKey.ActivitiesGroup) + " before doing export."); return(false); } QtestTestSuite matchingTS = null; eUserMsgSelection userSelec = eUserMsgSelection.None; //check if the businessFlow already mapped to QC Test Set if (!String.IsNullOrEmpty(businessFlow.ExternalID)) { matchingTS = ((QtestCore)ALMIntegration.Instance.AlmCore).GetQtestTestSuite(businessFlow.ExternalID); if (matchingTS != null) { //ask user if want to continue userSelec = Reporter.ToUser(eUserMsgKey.BusinessFlowAlreadyMappedToTC, businessFlow.Name, matchingTS.Name); if (userSelec == eUserMsgSelection.Cancel) { return(false); } else if (userSelec == eUserMsgSelection.No) { matchingTS = null; } } } //check if all of the business flow activities groups already exported to QC and export the ones which not foreach (ActivitiesGroup ag in businessFlow.ActivitiesGroups) { //check if the ActivitiesGroup already mapped to Qtest Test Case matchingTC = null; if (!String.IsNullOrEmpty(ag.ExternalID)) { matchingTC = ((QtestCore)ALMIntegration.Instance.AlmCore).GetQtestTest((long)Convert.ToInt32(ag.ExternalID)); if (matchingTC != null) { //ask user if want to continue eUserMsgSelection userSelect = Reporter.ToUser(eUserMsgKey.ActivitiesGroupAlreadyMappedToTC, ag.Name, matchingTC.TestName); if (userSelect == eUserMsgSelection.Cancel) { return(false); } else if (userSelect == eUserMsgSelection.No) { matchingTC = null; } else { parentObjectId = matchingTC.TestID; } } } //if user selected No and want to create new testplans to selected folder path if (matchingTC == null && String.IsNullOrEmpty(parentObjectId)) { //get the QC Test Plan path to upload the activities group to testCaseParentObjectId = SelectALMTestPlanPath(); if (String.IsNullOrEmpty(testCaseParentObjectId)) { //no path to upload to return(false); } } ExportActivitiesGroupToALM(ag, testCaseParentObjectId); } if (matchingTS == null && string.IsNullOrEmpty(parentObjectId)) { if (userSelec == eUserMsgSelection.No) { Reporter.ToUser(eUserMsgKey.ExportQCNewTestSetSelectDiffFolder); } parentObjectId = SelectALMTestLabPath(); if (String.IsNullOrEmpty(parentObjectId)) { //no path to upload to return(false); } } //upload the business flow Reporter.ToStatus(eStatusMsgKey.ExportItemToALM, null, businessFlow.Name); string res = string.Empty; //TODO : need to update to retrieve only Test Set Item Fields -->DONE ObservableList <ExternalItemFieldBase> testSetFields = WorkSpace.Instance.Solution.ExternalItemsFields; // ALMIntegration.Instance.RefreshALMItemFields(testSetFields, true, null); // Arvind to merge it from here var filterTestSetFields = testSetFields.Where(tc => tc.ItemType == eQCItemType.TestSet.ToString()).ToList(); bool exportRes = ((QtestCore)ALMIntegration.Instance.AlmCore).ExportBusinessFlowToALM(businessFlow, matchingTS, parentObjectId, new ObservableList <ExternalItemFieldBase> (filterTestSetFields), ref res); Reporter.HideStatusMessage(); if (exportRes) { if (performSaveAfterExport) { Reporter.ToStatus(eStatusMsgKey.SaveItem, null, businessFlow.Name, GingerDicser.GetTermResValue(eTermResKey.BusinessFlow)); WorkSpace.Instance.SolutionRepository.SaveRepositoryItem(businessFlow); Reporter.HideStatusMessage(); } if (almConectStyle != eALMConnectType.Auto) { Reporter.ToUser(eUserMsgKey.ExportItemToALMSucceed); } return(true); } else { if (almConectStyle != eALMConnectType.Auto) { Reporter.ToUser(eUserMsgKey.ExportItemToALMFailed, GingerDicser.GetTermResValue(eTermResKey.BusinessFlow), businessFlow.Name, res); } } return(false); }
public override bool ImportSelectedTests(string importDestinationPath, IEnumerable <Object> selectedTestSuites) { if (selectedTestSuites != null && selectedTestSuites.Count() > 0) { ObservableList <QtestSuiteTreeItem> testSuitesItemsToImport = new ObservableList <QtestSuiteTreeItem>(); foreach (QtestSuiteTreeItem testSuiteItem in selectedTestSuites) { //check if some of the Test Set was already imported if (testSuiteItem.AlreadyImported) { Amdocs.Ginger.Common.eUserMsgSelection userSelection = Reporter.ToUser(eUserMsgKey.TestSetExists, testSuiteItem.Name); if (userSelection == Amdocs.Ginger.Common.eUserMsgSelection.Yes) { //Delete the mapped BF File.Delete(testSuiteItem.MappedBusinessFlow.FileName); testSuitesItemsToImport.Add(testSuiteItem); } } else { testSuitesItemsToImport.Add(testSuiteItem); } } if (testSuitesItemsToImport.Count == 0) { return(false); //noting to import } //Refresh Ginger repository and allow GingerQC to use it ALMIntegration.Instance.AlmCore.InitCoreObjs(); foreach (QtestSuiteTreeItem testSetItemtoImport in testSuitesItemsToImport) { try { Reporter.ToStatus(eStatusMsgKey.ALMTestSetImport, null, testSetItemtoImport.Name); QtestTestSuite TS = new QtestTestSuite(); TS.ID = testSetItemtoImport.ID; TS.Name = testSetItemtoImport.Name; TS = ((QtestCore)ALMIntegration.Instance.AlmCore).ImportTestSetData(TS); //convert test set into BF BusinessFlow tsBusFlow = ((QtestCore)ALMIntegration.Instance.AlmCore).ConvertQCTestSetToBF(TS); if (WorkSpace.Instance.Solution.MainApplication != null) { //add the applications mapped to the Activities foreach (Activity activ in tsBusFlow.Activities) { if (!string.IsNullOrEmpty(activ.TargetApplication)) { if (tsBusFlow.TargetApplications.Where(x => x.Name == activ.TargetApplication).FirstOrDefault() == null) { ApplicationPlatform appAgent = WorkSpace.Instance.Solution.ApplicationPlatforms.Where(x => x.AppName == activ.TargetApplication).FirstOrDefault(); if (appAgent != null) { tsBusFlow.TargetApplications.Add(new TargetApplication() { AppName = appAgent.AppName }); } } } } //handle non mapped Activities if (tsBusFlow.TargetApplications.Count == 0) { tsBusFlow.TargetApplications.Add(new TargetApplication() { AppName = WorkSpace.Instance.Solution.MainApplication }); } foreach (Activity activ in tsBusFlow.Activities) { if (string.IsNullOrEmpty(activ.TargetApplication)) { activ.TargetApplication = tsBusFlow.MainApplication; } activ.Active = true; } } else { foreach (Activity activ in tsBusFlow.Activities) { activ.TargetApplication = null; // no app configured on solution level } } //save bf AddTestSetFlowToFolder(tsBusFlow, importDestinationPath); Reporter.HideStatusMessage(); } catch (Exception ex) { Reporter.ToUser(eUserMsgKey.ErrorInTestsetImport, testSetItemtoImport.Name, ex.Message); Reporter.ToLog(eLogLevel.ERROR, "Error importing from QC", ex); } } Reporter.ToUser(eUserMsgKey.TestSetsImportedSuccessfully); Reporter.ToLog(eLogLevel.DEBUG, "Imported from QC successfully"); return(true); } Reporter.ToLog(eLogLevel.ERROR, "Error importing from QC"); return(false); }
public BusinessFlow ConvertQCTestSetToBF(QtestTestSuite TS) { return(ImportFromQtest.ConvertQtestTestSuiteToBF(TS)); }
public bool ExportBusinessFlowToALM(BusinessFlow businessFlow, QtestTestSuite mappedTestSuite, string parentObjectId, ObservableList <ExternalItemFieldBase> testSetFields, ref string result) { ConnectALMServer(); testrunApi = new QTestApi.TestrunApi(connObj.Configuration); testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); QTestApi.TestsuiteApi testsuiteApi = new QTestApi.TestsuiteApi(connObj.Configuration); ObservableList <ActivitiesGroup> existingActivitiesGroups = new ObservableList <ActivitiesGroup>(); try { QTestApiModel.TestSuiteWithCustomFieldResource testSuite = null; if (mappedTestSuite == null) { testSuite = new QTestApiModel.TestSuiteWithCustomFieldResource(null, null, null, null, businessFlow.Name, new List <QTestApiModel.PropertyResource>()); testSuite = testsuiteApi.CreateTestSuite((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testSuite, (long)Convert.ToInt32(parentObjectId), "test-cycle"); foreach (ActivitiesGroup ag in businessFlow.ActivitiesGroups) { QTestApiModel.TestRunWithCustomFieldResource testRun = new QTestApiModel.TestRunWithCustomFieldResource(null, null, null, null, ag.Name, new List <QTestApiModel.PropertyResource>(), testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(ag.ExternalID))); testrunApi.Create((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testRun, testSuite.Id, "test-suite"); } } else { //update test-suite testSuite = new QTestApiModel.TestSuiteWithCustomFieldResource(null, null, null, null, businessFlow.Name, new List <QTestApiModel.PropertyResource>()); testSuite = testsuiteApi.UpdateTestSuite((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(mappedTestSuite.ID), testSuite); //##update existing TestSuite -> TestRun foreach (QtestTest test in mappedTestSuite.Tests) { QTestApiModel.TestRunWithCustomFieldResource testRun = testrunApi.Get((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(test.Runs[0].RunID), "descendents"); QTestApiModel.TestCaseWithCustomFieldResource testCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testRun.TestCase.Id); ActivitiesGroup ag = businessFlow.ActivitiesGroups.Where(x => (x.ExternalID == test.TestID.ToString())).FirstOrDefault(); if (ag != null) { foreach (ActivityIdentifiers actIdent in ag.ActivitiesIdentifiers) { if ((actIdent.IdentifiedActivity.ExternalID == null) && (actIdent.IdentifiedActivity.ExternalID2 == null)) { QTestApiModel.TestCaseWithCustomFieldResource newTestCase = new QTestApiModel.TestCaseWithCustomFieldResource(null, null, null, new List <QTestApiModel.PropertyResource>()); newTestCase.Description = actIdent.ActivityDescription; newTestCase.Name = actIdent.ActivityName; testcaseApi.CreateTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), newTestCase); string stepNameWithDesc = ((Activity)actIdent.IdentifiedActivity).ActivityName + "=>" + ((Activity)actIdent.IdentifiedActivity).Description; QTestApiModel.TestStepResource stepResource = new QTestApiModel.TestStepResource(null, null, stepNameWithDesc, ((Activity)actIdent.IdentifiedActivity).Expected == null ? string.Empty : ((Activity)actIdent.IdentifiedActivity).Expected); stepResource.PlainValueText = ((Activity)actIdent.IdentifiedActivity).ActivityName; testcaseApi.AddTestStep((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), newTestCase.Id, stepResource); stepResource = new QTestApiModel.TestStepResource(null, null, string.Empty, string.Empty, null, null, null, null, null, newTestCase.Id); stepResource = testcaseApi.AddTestStep((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id, stepResource); actIdent.IdentifiedActivity.ExternalID = newTestCase.Id.ToString(); actIdent.IdentifiedActivity.ExternalID2 = stepResource.Id.ToString(); } } } } } businessFlow.ExternalID = testSuite != null?testSuite.Id.ToString() : string.Empty; WorkSpace.Instance.SolutionRepository.SaveRepositoryItem(businessFlow); return(true); } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " to qTest", ex); return(false); } }
public override bool ExportExecutionDetailsToALM(BusinessFlow bizFlow, ref string result, bool exectutedFromAutomateTab = false, PublishToALMConfig publishToALMConfig = null) { result = string.Empty; if (bizFlow.ExternalID == "0" || String.IsNullOrEmpty(bizFlow.ExternalID)) { result = GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + ": " + bizFlow.Name + " is missing ExternalID, cannot locate QC TestSet without External ID"; return(false); } try { //get the BF matching test set ConnectALMServer(); testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); testrunApi = new QTestApi.TestrunApi(connObj.Configuration); QTestApi.TestlogApi testlogApi = new QTestApi.TestlogApi(connObj.Configuration); QTestApi.AttachmentApi attachmentApi = new QTestApi.AttachmentApi(connObj.Configuration); QtestTestSuite testSuite = GetQtestTestSuite(bizFlow.ExternalID); if (testSuite != null) { //get all BF Activities groups ObservableList <ActivitiesGroup> activGroups = bizFlow.ActivitiesGroups; if (activGroups.Count > 0) { foreach (ActivitiesGroup activGroup in activGroups) { if ((publishToALMConfig.FilterStatus == FilterByStatus.OnlyPassed && activGroup.RunStatus == eActivitiesGroupRunStatus.Passed) || (publishToALMConfig.FilterStatus == FilterByStatus.OnlyFailed && activGroup.RunStatus == eActivitiesGroupRunStatus.Failed) || publishToALMConfig.FilterStatus == FilterByStatus.All) { QtestTest tsTest = null; //go by TC ID = TC Instance ID tsTest = testSuite.Tests.Where(x => x.TestID == activGroup.ExternalID).FirstOrDefault(); if (tsTest != null) { //get activities in group List <Activity> activities = (bizFlow.Activities.Where(x => x.ActivitiesGroupID == activGroup.Name)).Select(a => a).ToList(); string TestCaseName = PathHelper.CleanInValidPathChars(tsTest.TestName); if ((publishToALMConfig.VariableForTCRunName == null) || (publishToALMConfig.VariableForTCRunName == string.Empty)) { String timeStamp = DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss"); publishToALMConfig.VariableForTCRunName = "GingerRun_" + timeStamp; } if (tsTest.Runs[0] != null) { List <QTestApiModel.StatusResource> statuses = testrunApi.GetStatusValuable((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey)); List <QTestApiModel.StatusResource> stepsStatuses = new List <QTestApiModel.StatusResource>(); QTestApiModel.StatusResource testCaseStatus; QTestApiModel.TestRunWithCustomFieldResource testRun = testrunApi.Get((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(tsTest.Runs[0].RunID), "descendents"); List <QTestApiModel.TestStepLogResource> testStepLogs = new List <QTestApiModel.TestStepLogResource>(); QTestApiModel.TestCaseWithCustomFieldResource testCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testRun.TestCase.Id); int testStepsCount = 0; foreach (QTestApiModel.TestStepResource step in testCase.TestSteps) { if (step.CalledTestCaseId != null) { QTestApiModel.TestCaseWithCustomFieldResource calledTestCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), step.CalledTestCaseId); foreach (QTestApiModel.TestStepResource nestedStep in calledTestCase.TestSteps) { Activity matchingActivity = activities.Where(x => x.ExternalID == nestedStep.Id.ToString()).FirstOrDefault(); if (matchingActivity != null) { QTestApiModel.TestStepLogResource testStepLog = new QTestApiModel.TestStepLogResource(null, nestedStep.Id); testStepLog.CalledTestCaseId = step.CalledTestCaseId; testStepLog.ParentTestStepId = step.Id; testStepLog.ActualResult = string.Empty; SetTestStepLogStatus(matchingActivity, ref testStepLog, statuses); stepsStatuses.Add(testStepLog.Status); testStepLogs.Add(testStepLog); testStepsCount++; } } } else { Activity matchingActivity = activities.Where(x => x.ExternalID == step.Id.ToString()).FirstOrDefault(); if (matchingActivity != null) { QTestApiModel.TestStepLogResource testStepLog = new QTestApiModel.TestStepLogResource(null, step.Id); testStepLog.ActualResult = string.Empty; SetTestStepLogStatus(matchingActivity, ref testStepLog, statuses); stepsStatuses.Add(testStepLog.Status); testStepLogs.Add(testStepLog); testStepsCount++; } } } //update the TC general status based on the activities status collection. if (stepsStatuses.Where(x => x.Name == "Failed").Count() > 0) { testCaseStatus = statuses.Where(z => z.Name == "Failed").FirstOrDefault(); } else if (stepsStatuses.Where(x => x.Name == "No Run").Count() == testStepsCount || stepsStatuses.Where(x => x.Name == "Not Applicable").Count() == testStepsCount) { testCaseStatus = statuses.Where(z => z.Name == "Unexecuted").FirstOrDefault(); } else if (stepsStatuses.Where(x => x.Name == "Passed").Count() == testStepsCount || (stepsStatuses.Where(x => x.Name == "Passed").Count() + stepsStatuses.Where(x => x.Name == "Unexecuted").Count()) == testStepsCount) { testCaseStatus = statuses.Where(z => z.Name == "Passed").FirstOrDefault(); } else { testCaseStatus = statuses.Where(z => z.Name == "Unexecuted").FirstOrDefault(); } QTestApiModel.ManualTestLogResource automationTestLog = new QTestApiModel.ManualTestLogResource(null, null, DateTime.Parse(bizFlow.StartTimeStamp.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:sszz:00")), DateTime.Parse(bizFlow.EndTimeStamp.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:sszz:00")), null, null, tsTest.TestName + " - execution", null, null, null, null, null, testCaseStatus, null, testStepLogs); QTestApiModel.TestLogResource testLog = testlogApi.SubmitTestLog((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), automationTestLog, (long)Convert.ToInt32(tsTest.Runs[0].RunID)); // Attach ActivityGroup Report if needed if (publishToALMConfig.ToAttachActivitiesGroupReport) { if ((activGroup.TempReportFolder != null) && (activGroup.TempReportFolder != string.Empty) && (System.IO.Directory.Exists(activGroup.TempReportFolder))) { //Creating the Zip file - start string targetZipPath = System.IO.Directory.GetParent(activGroup.TempReportFolder).ToString(); string zipFileName = targetZipPath + "\\" + TestCaseName + "_GingerHTMLReport.zip"; if (!System.IO.File.Exists(zipFileName)) { ZipFile.CreateFromDirectory(activGroup.TempReportFolder, zipFileName); } else { System.IO.File.Delete(zipFileName); ZipFile.CreateFromDirectory(activGroup.TempReportFolder, zipFileName); } System.IO.Directory.Delete(activGroup.TempReportFolder, true); // to discuss an issue attachmentApi.Upload((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), "test-logs", testLog.Id, "GingerExecutionHTMLReport.zip", "application/x-zip-compressed", File.ReadAllBytes(zipFileName)); System.IO.File.Delete(zipFileName); } } } } else { //No matching TC was found for the ActivitiesGroup in QC result = "Matching TC's were not found for all " + GingerDicser.GetTermResValue(eTermResKey.ActivitiesGroups) + " in qTest."; } } } } else { //No matching Test Set was found for the BF in QC result = "No matching Test Set was found in qTest."; } } if (result == string.Empty) { result = "Export performed successfully."; return(true); } else { return(false); } } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export execution details to Qtest", ex); return(false); } }