public QtestTest GetQtestTest(long?testID, QTestApiModel.ParameterPostQueryResponse existedParameters = null, QTestApiModel.TestCaseWithCustomFieldResource testCase = null) { testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); if (testCase == null) { testCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testID); } QtestTest test = new QtestTest(); test.Description = testCase.Description; test.TestName = testCase.Name; test.TestID = testCase.Id.ToString(); foreach (QTestApiModel.TestStepResource testStep in testCase.TestSteps) { if (testStep.CalledTestCaseId != null) { QTestApiModel.TestCaseWithCustomFieldResource calledTestCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testStep.CalledTestCaseId); calledTestCase.TestSteps.ForEach(z => test.Steps.Add(new QtestTestStep(z.Id.ToString(), StripHTML(z.Description), StripHTML(z.Expected), testStep.CalledTestCaseId.ToString()))); } else { string stepName = testStep.Description; string stepDesc = testStep.Description; if (testStep.Description.Contains("=>")) { string[] activityData = testStep.Description.Split(new[] { "=>" }, StringSplitOptions.None); stepName = activityData[0]; stepDesc = activityData[1]; } QtestTestStep newStep = new QtestTestStep(testStep.Id.ToString(), stepDesc, testStep.Expected, null, stepName); if ((testStep.ParameterValues != null) && (testStep.ParameterValues.Count > 0) && (testStep.ParameterValues[0] != null)) { if (existedParameters != null) { if (testStep.RootCalledTestCaseId != null) { QTestApiModel.ParameterModel currentParameter = existedParameters.Items.Where(z => z.TcIds.Contains(testStep.RootCalledTestCaseId) && z.Values.Contains(testStep.ParameterValues[0])).FirstOrDefault(); newStep.Params = new QtestTestParameter(); newStep.Params.Value = testStep.ParameterValues[0]; newStep.Params.Values = currentParameter.Values.Split(',').ToList(); newStep.Params.Name = currentParameter.Description; } } } test.Steps.Add(newStep); } } return(test); }
public bool ExportActivitiesGroupToALM(ActivitiesGroup activitiesGroup, QtestTest mappedTest, string parentObjectId, ObservableList <ExternalItemFieldBase> testCaseFields, ref string result) { ConnectALMServer(); testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); try { if (mappedTest == null) // Create new test case { QTestApiModel.TestCaseWithCustomFieldResource testCase = new QTestApiModel.TestCaseWithCustomFieldResource(null, null, null, new List <QTestApiModel.PropertyResource>()); testCase.Description = activitiesGroup.Description; testCase.Name = activitiesGroup.Name; testCase = testcaseApi.CreateTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase); foreach (ActivityIdentifiers actIdent in activitiesGroup.ActivitiesIdentifiers) { QTestApiModel.TestStepResource stepResource = new QTestApiModel.TestStepResource(null, null, ((Activity)actIdent.IdentifiedActivity).Description == null ? string.Empty : ((Activity)actIdent.IdentifiedActivity).Description, ((Activity)actIdent.IdentifiedActivity).Expected == null ? string.Empty : ((Activity)actIdent.IdentifiedActivity).Expected); stepResource.PlainValueText = ((Activity)actIdent.IdentifiedActivity).ActivityName; stepResource = testcaseApi.AddTestStep((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id, stepResource); ((Activity)actIdent.IdentifiedActivity).ExternalID = stepResource.Id.ToString(); ((Activity)actIdent.IdentifiedActivity).ExternalID2 = stepResource.Id.ToString(); } activitiesGroup.ExternalID = testCase.Id.ToString(); activitiesGroup.ExternalID2 = testCase.Id.ToString(); } else { // update existing test case } return(true); } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export the " + GingerDicser.GetTermResValue(eTermResKey.ActivitiesGroup) + " to qTest", ex); return(false); } }
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 bool ExportActivitiesGroupToALM(ActivitiesGroup activitiesGroup, QtestTest mappedTest, string parentObjectId, ObservableList <ExternalItemFieldBase> testCaseFields, ref string result) { ConnectALMServer(); testcaseApi = new QTestApi.TestcaseApi(connObj.Configuration); try { if (mappedTest == null) // Create new test case { QTestApiModel.TestCaseWithCustomFieldResource testCase = new QTestApiModel.TestCaseWithCustomFieldResource(null, null, null, new List <QTestApiModel.PropertyResource>()); testCase.Description = activitiesGroup.Description; testCase.Name = activitiesGroup.Name; testCase.ParentId = (long)Convert.ToInt32(parentObjectId); //create testCase testCase = testcaseApi.CreateTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase); //add testSteps foreach (ActivityIdentifiers actIdent in activitiesGroup.ActivitiesIdentifiers) { 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; stepResource = testcaseApi.AddTestStep((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id, stepResource); ((Activity)actIdent.IdentifiedActivity).ExternalID = stepResource.Id.ToString(); ((Activity)actIdent.IdentifiedActivity).ExternalID2 = stepResource.Id.ToString(); } //approve testCase - it needs to be called each time whenever testCase is updated testcaseApi.ApproveTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id); activitiesGroup.ExternalID = testCase.Id.ToString(); activitiesGroup.ExternalID2 = testCase.Id.ToString(); } else { // update existing test case QTestApiModel.TestCaseWithCustomFieldResource testCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(mappedTest.TestID));; //update testCase testCase.Description = activitiesGroup.Description; testCase.Name = activitiesGroup.Name; testCase = testcaseApi.UpdateTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id, testCase); //update steps int counter = 0; foreach (ActivityIdentifiers actIdent in activitiesGroup.ActivitiesIdentifiers) { //get testCase each time because update step changes the ids of the steps testCase = testcaseApi.GetTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), (long)Convert.ToInt32(mappedTest.TestID)); 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; stepResource = testcaseApi.UpdateTestStep((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id, testCase.TestSteps[counter].Id, stepResource); ((Activity)actIdent.IdentifiedActivity).ExternalID = stepResource.Id.ToString(); ((Activity)actIdent.IdentifiedActivity).ExternalID2 = stepResource.Id.ToString(); counter++; } //approve testCase - it needs to be called each time whenever testCase is updated testcaseApi.ApproveTestCase((long)Convert.ToInt32(ALMCore.DefaultAlmConfig.ALMProjectKey), testCase.Id); } return(true); } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export the " + GingerDicser.GetTermResValue(eTermResKey.ActivitiesGroup) + " 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); } }