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 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); } }