コード例 #1
0
ファイル: ExportToQC.cs プロジェクト: svendster/Ginger
        public static bool ExportBusinessFlowToQC(BusinessFlow businessFlow, TestSet mappedTestSet, string uploadPath, ObservableList <ExternalItemFieldBase> testSetFields, ref string result)
        {
            TestSet testSet;
            ObservableList <ActivitiesGroup> existingActivitiesGroups = new ObservableList <ActivitiesGroup>();

            try
            {
                if (mappedTestSet == null)
                {
                    //##create new Test Set in QC
                    TestSetFactory TestSetF = (TestSetFactory)mTDConn.TestSetFactory;
                    testSet = (TestSet)TestSetF.AddItem(System.DBNull.Value);

                    //set the upload path
                    TestSetTreeManager treeM = (TestSetTreeManager)mTDConn.TestSetTreeManager;
                    ISysTreeNode       testSetParentFolder = (ISysTreeNode)treeM.get_NodeByPath(uploadPath);
                    testSet.TestSetFolder = testSetParentFolder.NodeID;
                }
                else
                {
                    //##update existing test set
                    //testSet = mappedTestSet;
                    testSet = ImportFromQC.GetQCTestSet(mappedTestSet.ID.ToString());

                    TSTestFactory testsF      = (TSTestFactory)testSet.TSTestFactory;
                    List          tsTestsList = testsF.NewList("");
                    foreach (TSTest tsTest in tsTestsList)
                    {
                        ActivitiesGroup ag = businessFlow.ActivitiesGroups.Where(x => (x.ExternalID == tsTest.TestId.ToString() && x.ExternalID2 == tsTest.ID.ToString())).FirstOrDefault();
                        if (ag == null)
                        {
                            testsF.RemoveItem(tsTest.ID);
                        }
                        else
                        {
                            existingActivitiesGroups.Add(ag);
                        }
                    }
                }

                //set item fields
                foreach (ExternalItemFieldBase field in testSetFields)
                {
                    if (field.ToUpdate || field.Mandatory)
                    {
                        if (string.IsNullOrEmpty(field.SelectedValue) == false && field.SelectedValue != "NA")
                        {
                            testSet[field.ID] = field.SelectedValue;
                        }
                        else
                        {
                            try { testSet[field.ID] = "NA"; }
                            catch { }
                        }
                    }
                }

                //post the test set
                testSet.Name = businessFlow.Name;

                try
                {
                    testSet.Post();
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("The Test Set already exists"))
                    {
                        result = "Cannot export " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + "- The Test Set already exists in the selected folder. ";
                        Reporter.ToLog(eLogLevel.ERROR, result, ex);
                        return(false);
                    }

                    //Searching for the testset in case it was created in ALM although getting exception
                    TestSetFactory     TSetFact            = mTDConn.TestSetFactory;
                    TDFilter           tsFilter            = TSetFact.Filter;
                    TestSetTreeManager treeM               = (TestSetTreeManager)mTDConn.TestSetTreeManager;
                    ISysTreeNode       testSetParentFolder = (ISysTreeNode)treeM.get_NodeByPath(uploadPath);

                    try
                    {
                        tsFilter["CY_FOLDER_ID"] = "" + testSetParentFolder.NodeID + "";
                    }
                    catch (Exception e)
                    {
                        tsFilter["CY_FOLDER_ID"] = "\"" + testSetParentFolder.Path.ToString() + "\"";
                        Reporter.ToLog(eLogLevel.ERROR, $"Method - {MethodBase.GetCurrentMethod().Name}, Error - {e.Message}", e);
                    }

                    List TestsetList = TSetFact.NewList(tsFilter.Text);
                    foreach (TestSet set in TestsetList)
                    {
                        if (set.Name == businessFlow.Name)
                        {
                            testSet = set;
                            break;
                        }
                    }
                }

                businessFlow.ExternalID = testSet.ID.ToString();

                //Add missing test cases
                TSTestFactory testCasesF = testSet.TSTestFactory;
                foreach (ActivitiesGroup ag in businessFlow.ActivitiesGroups)
                {
                    if (existingActivitiesGroups.Contains(ag) == false && string.IsNullOrEmpty(ag.ExternalID) == false && ImportFromQC.GetQCTest(ag.ExternalID) != null)
                    {
                        TSTest tsTest = testCasesF.AddItem(ag.ExternalID);
                        if (tsTest != null)
                        {
                            ag.ExternalID2 = tsTest.ID;//the test case instance ID in the test set- used for exporting the execution details
                        }
                    }
                    else
                    {
                        foreach (ActivityIdentifiers actIdent in ag.ActivitiesIdentifiers)
                        {
                            ExportActivityAsTestStep(ImportFromQC.GetQCTest(ag.ExternalID), (Activity)actIdent.IdentifiedActivity);
                        }
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                result = "Unexpected error occurred- " + ex.Message;
                Reporter.ToLog(eLogLevel.ERROR, "Failed to export the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " to QC/ALM", ex);
                return(false);
            }
        }
コード例 #2
0
        public int AddTest(
            int TestSetId,
            int TestConfigId,
            string[] Additional         = default(string[]),
            bool RemoveTestOnUpdateFail = default(bool))
        {
            int result = 0;

            try
            {
                if (!Connect(ServerUrl, Username, Password, Domain, Project))
                {
                    return(0);
                }

                //Get the test ID from the config factory
                TestConfigFactory TestConfigFact = tdc.TestConfigFactory;

                TestConfig TestConfig = TestConfigFact[TestConfigId];

                int TestId = TestConfig.TestId;

                //API provides no way to add a specific test configuration to the test set
                //Instead we will add the test to the test set then remove the unneeded instances

                TestSetFactory TSFact  = tdc.TestSetFactory;
                TestSet        TestSet = TSFact[TestSetId];

                TSTestFactory TSTestFact = TestSet.TSTestFactory;

                //Capture the starting list of tests in the test set
                List StartingTestList = TSTestFact.NewList("");
                System.Collections.Generic.List <int> StartingTestInstanceList = new List <int>();

                foreach (TSTest testInstance in StartingTestList)
                {
                    StartingTestInstanceList.Add(int.Parse(testInstance.ID));
                }

                //Add the test to the test set
                TSTestFact.AddItem(TestId);

                //Capture the new list of tests in the test set
                List EndingTestList = TSTestFact.NewList("");
                System.Collections.Generic.List <int> EndingTestInstanceList = new List <int>();

                foreach (TSTest testInstance in EndingTestList)
                {
                    EndingTestInstanceList.Add(int.Parse(testInstance.ID));
                }


                //Remove added tests that we don't want
                TSTest     tempInstance, addedTestInstance = null;
                TestConfig tempConfig;

                foreach (int testInstanceId in EndingTestInstanceList)
                {
                    if (!StartingTestInstanceList.Contains(testInstanceId))
                    {
                        tempInstance = TSTestFact[testInstanceId];
                        tempConfig   = tempInstance.TestConfiguration;
                        if (!TestConfigId.Equals(tempConfig.ID))
                        {
                            TSTestFact.RemoveItem(tempInstance.ID);
                        }
                        else
                        {
                            addedTestInstance = tempInstance;
                        }
                    }
                }

                result = int.Parse(addedTestInstance.ID);

                //Set additional field values
                if (Additional != default(string[]))
                {
                    foreach (string fieldPair in Additional)
                    {
                        string[] tempFieldArray = fieldPair.Split(new[] { ";;" }, StringSplitOptions.None);
                        addedTestInstance[tempFieldArray[0]] = tempFieldArray[1];
                    }

                    addedTestInstance.Post();
                }
            }
            catch (COMException ce)
            {
                rr.AddErrorLine(HandleException(ce));
                if (RemoveTestOnUpdateFail && result > 0)
                {
                    TSTestFactory fact = tdc.TSTestFactory;
                    fact.RemoveItem(result);
                    result = 0;
                }
            }

            Disconnect();
            return(result);
        }