public bool Run(TDConnectionClass tdConn, TestSet RunSet, string configPath)
        {
            try
              {
              //Console.WriteLine("Test run from Interface of IRunTest!");
              Debug.Print("PAS: Test run from Interface of IRunTest!");
              TestConfigFile tConfig = new TestConfigFile();
              TestUtility.LoadConfigFile(ref tConfig, configPath);

              // invoke the test execution
              TSTestFactory TSTestFact = RunSet.TSTestFactory as TSTestFactory;
              List runList = new List();
              runList = TSTestFact.NewList("") as List;
              foreach (TSTest instance in runList)
              {
            //generate the run first
            RunFactory runFact = instance.RunFactory as RunFactory;
            DateTime now = DateTime.Now;
            Run instanceRun = runFact.AddItem("Run_" + now.ToShortDateString() +
                                        "_" + now.ToShortTimeString()) as Run;

            QCOperation.QCInformation info = new QCOperation.QCInformation();
            // string runID = instanceRun.ID as string;
            //Initial the start status
            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Not Completed");
            //Add the run steps
            //info.SetTestRunStep(tdConn, runID, "Step 1", "Passed");
            //info.SetTestRunStep(tdConn, runID, "Step 2", "Failed");
            //Update the end status
            //info.SetTestRunStatus(tdConn, runID, "Failed");

            //Download test case attachments
            string caseID = instance.TestId as string;
            ArrayList attachments = new ArrayList();
            QCOperation.QCAttachment taa = new QCOperation.QCAttachment();
            foreach (string downfile in tConfig.RunParameter.DownloadFile)
            {
              attachments.Add(taa.DownloadAttachment(tdConn, "TEST", caseID, downfile, @"C:\CSAutoTest\Temp"));
            }

            //When finish the test, record the summary in instance of testset
            string instanceID = instance.ID as string;
            string scriptFilename = null;
            string dataFilename = null;
            for (int i = 0; i < attachments.Count; i++)
            {
              ArrayList downList = attachments[i] as ArrayList;
              if (downList.Count > 0)
              {
            foreach (Object fileObj in downList)
            {
              string tempFilePath = fileObj as string;
              if (tempFilePath != null && tempFilePath.EndsWith("cod"))
              {
                scriptFilename = tempFilePath;
              }
              if (tempFilePath != null && tempFilePath.EndsWith("iod"))
              {
                dataFilename = tempFilePath;
              }
            }
              }
            }
            if (scriptFilename != null)
            {
              PAS.AutoTest.ScriptRunner.ScriptRunner sr = new PAS.AutoTest.ScriptRunner.ScriptRunner();
              PAS.AutoTest.ScriptRunner.ExecuteResult er;
            Debug.Print("PAS: Script file name: {0}", scriptFilename);
            Debug.Print("PAS: Data file name: {0}", dataFilename);
              if (dataFilename != null)
            { er = sr.Run(scriptFilename, dataFilename, 1200); }
              else
            { er = sr.Run(scriptFilename, string.Empty, 1200); }
            switch (er.Result)
              {
              case PAS.AutoTest.TestData.TestResult.Done:
                info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Passed");
                break;
            case PAS.AutoTest.TestData.TestResult.Pass:
              info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Passed");
              break;
            case PAS.AutoTest.TestData.TestResult.Fail:
              info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Failed");
              break;
              case PAS.AutoTest.TestData.TestResult.Incomplete:
              info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Not Completed");
              break;
                //default:
              case PAS.AutoTest.TestData.TestResult.Warning:
                info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "N/A");
                break;

              }
            if (er.Result != PAS.AutoTest.TestData.TestResult.Incomplete)
            {
              info.SetTestInstanceSummary(tdConn, instanceID, tConfig.RunParameter.NumOfPassed, er.Output.Summary.Passed.ToString());
              info.SetTestInstanceSummary(tdConn, instanceID, tConfig.RunParameter.NumOfTotal, er.Output.Summary.TotalRun.ToString());

              string fileLog = ".log";
              fileLog = "TEST_" + caseID + "_" + now.ToShortDateString() + "_" + now.ToShortTimeString() + ".log";
              fileLog = ConvertChar(fileLog);
              er.Output.ConvertToXml(".\\Temp\\" + fileLog);
              bool uploadSuccess = false;
              uploadSuccess = taa.UploadAttachment(tdConn, "RUN", instanceRun.ID.ToString(), fileLog, GetCurrentRunDir() + "\\Temp\\");
              if (uploadSuccess)
              {
            Debug.Print("PAS: Upload test log sucess!");
              }
              else
              {
            Debug.Print("PAS: Upload test log fail!");
              }
            }
              }
            }
              }
              catch
              {
            Debug.Print("PAS: Run test case error!");
              }

              return true;
        }
示例#2
0
        public bool Run(TDConnectionClass tdConn, TestSet RunSet, string configPath)
        {
            try
            {
                //Console.WriteLine("Test run from Interface of IRunTest!");
                AutoLog.Info("[CP Run]Test run from IRunTest: " + RunSet.Name);
                //Debug.Print("PAS: Test run from Interface of IRunTest!");
                //Console.Out.WriteLine("----------[CP Run]Test run from IRunTest: " + RunSet.Name);
                TestConfigFile tConfig = new TestConfigFile();
                bool           success = false;
                //AutoLog.Info("[CP Run]Configuration file path: " + configPath);
                success = TestUtility.LoadConfigFile(ref tConfig, configPath);
                if (!success)
                {
                    AutoLog.Info("[CP Run]Load Configuration file failed.");
                    return(true);
                }

                // invoke the test execution
                TSTestFactory TSTestFact = RunSet.TSTestFactory as TSTestFactory;
                List          runList    = new List();
                runList = TSTestFact.NewList("") as List;
                foreach (TSTest instance in runList)
                {
                    //generate the run first
                    RunFactory runFact     = instance.RunFactory as RunFactory;
                    DateTime   now         = DateTime.Now;
                    Run        instanceRun = runFact.AddItem("Run_" + now.ToShortDateString() +
                                                             "_" + now.ToShortTimeString()) as Run;

                    QCOperation.QCInformation info = new QCOperation.QCInformation();
                    // string runID = instanceRun.ID as string;
                    //Initial the start status
                    info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Not Completed");
                    //Add the run steps
                    //info.SetTestRunStep(tdConn, runID, "Step 1", "Passed");
                    //info.SetTestRunStep(tdConn, runID, "Step 2", "Failed");
                    //Update the end status
                    //info.SetTestRunStatus(tdConn, runID, "Failed");

                    //Download test case attachments
                    string    caseID             = instance.TestId as string;
                    ArrayList attachments        = new ArrayList();
                    QCOperation.QCAttachment taa = new QCOperation.QCAttachment();
                    foreach (string downfile in tConfig.RunParameter.DownloadFile)
                    {
                        attachments.Add(taa.DownloadAttachment(tdConn, "TEST", caseID, downfile, @"C:\CSAutoTest\Temp"));
                    }

                    //When finish the test, record the summary in instance of testset
                    string instanceID     = instance.ID as string;
                    string scriptFilename = null;
                    string dataFilename   = null;
                    for (int i = 0; i < attachments.Count; i++)
                    {
                        ArrayList downList = attachments[i] as ArrayList;
                        if (downList.Count > 0)
                        {
                            foreach (Object fileObj in downList)
                            {
                                string tempFilePath = fileObj as string;
                                if (tempFilePath != null && tempFilePath.EndsWith("cod"))
                                {
                                    scriptFilename = tempFilePath;
                                }
                                if (tempFilePath != null && tempFilePath.EndsWith("iod"))
                                {
                                    dataFilename = tempFilePath;
                                }
                            }
                        }
                    }
                    //AutoLog.Info("[CP Run]Config value of MacPath: " + tConfig.RunParameter.RemotePath);
                    //AutoLog.Info("[CP Run]Config value of RunMac: " + tConfig.RunParameter.RunRemote.ToString());
                    if (tConfig.RunParameter.RunRemote)
                    {
                        dataFilename = ReplaceStringInFile(dataFilename, tConfig.RunParameter.RemotePath);
                    }

                    if (scriptFilename != null)
                    {
                        PAS.AutoTest.ScriptRunner.ScriptRunner  sr = new PAS.AutoTest.ScriptRunner.ScriptRunner();
                        PAS.AutoTest.ScriptRunner.ExecuteResult er;
                        //Debug.Print("PAS: Script file name: {0}", scriptFilename);
                        //Debug.Print("PAS: Data file name: {0}", dataFilename);
                        //Console.Out.WriteLine("----------[CP Run]Script file name: " + scriptFilename);
                        AutoLog.Info("[CP Run]Script file name: " + scriptFilename);
                        AutoLog.Info("[CP Run]Data file name: " + dataFilename);
                        if (dataFilename != null)
                        {
                            er = sr.Run(scriptFilename, dataFilename, 1200);
                        }
                        else
                        {
                            er = sr.Run(scriptFilename, string.Empty, 1200);
                        }
                        switch (er.Result)
                        {
                        case PAS.AutoTest.TestData.TestResult.Done:
                            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Passed");
                            break;

                        case PAS.AutoTest.TestData.TestResult.Pass:
                            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Passed");
                            break;

                        case PAS.AutoTest.TestData.TestResult.Fail:
                            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Failed");
                            break;

                        case PAS.AutoTest.TestData.TestResult.Incomplete:
                            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "Not Completed");
                            break;

                        //default:
                        case PAS.AutoTest.TestData.TestResult.Warning:
                            info.SetTestRunStatus(tdConn, instanceRun.ID.ToString(), "N/A");
                            break;
                        }
                        if (er.Result != PAS.AutoTest.TestData.TestResult.Incomplete)
                        {
                            info.SetTestInstanceSummary(tdConn, instanceID, tConfig.RunParameter.NumOfPassed, er.Output.Summary.Passed.ToString());
                            info.SetTestInstanceSummary(tdConn, instanceID, tConfig.RunParameter.NumOfTotal, er.Output.Summary.TotalRun.ToString());

                            string fileLog = ".log";
                            fileLog = "TEST_" + caseID + "_" + now.ToShortDateString() + "_" + now.ToShortTimeString() + ".log";
                            fileLog = ConvertChar(fileLog);
                            er.Output.ConvertToXml(".\\Temp\\" + fileLog);
                            bool uploadSuccess = false;
                            uploadSuccess = taa.UploadAttachment(tdConn, "RUN", instanceRun.ID.ToString(), fileLog, GetCurrentRunDir() + "\\Temp\\");
                            if (uploadSuccess)
                            {
                                //Debug.Print("PAS: Upload test log sucess!");
                                //Console.Out.WriteLine("----------[CP Run]Upload test log sucess!");
                                AutoLog.Info("[CP Run]Upload test log success!");
                            }
                            else
                            {
                                //Debug.Print("PAS: Upload test log fail!");
                                //Console.Out.WriteLine("----------[CP Run]Upload test log fail!");
                                AutoLog.Info("[CP Run]Upload test log fail!");
                            }
                        }
                        else
                        {
                            //Console.Out.WriteLine("----------[CP Run]Case run status is incomplete!");
                            AutoLog.Info("[CP Run]Case run status is incomplete!");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                //Debug.Print("PAS: Run test case error!");
                //Console.Out.WriteLine("PAS: Run test case error!");
                AutoLog.Info("[CP Run]Run test case exception: " + e.Message);
            }

            return(true);
        }
示例#3
0
        private void RunSingleCase(object tc)
        {
            //Todo: need consider for acq case, only one process can start at the same time
            int count = 0;

            while (tc.ToString().ToLower().Contains("acq") && TestUtility.Utility.IsAcquisitionInProgress() && count < 3)
            {
                count++;
                Thread.Sleep(6000);
            }

            lock (this)
            {
                string methodName     = tc.ToString();
                string scriptFileName = "TestData\\" + methodName + ".cod";
                string dataFileName   = "TestData\\" + methodName + ".iod";
                try
                {
                    if (complieInTime.Checked) //Excete case by compile the code in time and then run
                    {
                        PAS.AutoTest.ScriptRunner.ScriptRunner  sr = new PAS.AutoTest.ScriptRunner.ScriptRunner();
                        PAS.AutoTest.ScriptRunner.ExecuteResult executeResult;
                        if (File.Exists(dataFileName))
                        {
                            executeResult = sr.Run(scriptFileName, dataFileName, 600);
                        }
                        else
                        {
                            executeResult = sr.Run(scriptFileName, string.Empty, 600);
                        }
                    }
                    else //Excete case by reflection
                    {
                        Runner r = null;
                        if (File.Exists(dataFileName))
                        {
                            r = new Runner(dataFileName);
                        }
                        else
                        {
                            r = new Runner("");
                        }

                        r.GetType().GetMethod(methodName).Invoke(r, null);
                    }

                    Thread.Sleep(20);

                    XmlDocument doc = new XmlDocument();
                    doc.Load("LastOutput.xml");
                    XmlNodeList nodes = doc.SelectNodes("TestResult/Round/CheckPoint/Result");

                    bool isPass = true;
                    foreach (XmlNode node in nodes)
                    {
                        if (!Equals(node.InnerText, TestResult.Pass.ToString()) && !Equals(node.InnerText, TestResult.Done.ToString()))
                        {
                            isPass = false;
                            break;
                        }
                    }
                    if (isPass)
                    {
                        HandlePassedCase(methodName);
                    }
                    else
                    {
                        HandleFailedCase(methodName);
                    }

                    passNum.Text  = passedCaseNum.ToString();
                    failNum.Text  = failedCaseNum.ToString();
                    noRunNum.Text = noRunCaseNum.ToString();
                }
                catch (Exception ex)
                {
                    HandleExceptionCase(methodName, ex.ToString());

                    passNum.Text  = passedCaseNum.ToString();
                    failNum.Text  = failedCaseNum.ToString();
                    noRunNum.Text = noRunCaseNum.ToString();
                    return;
                }
            }
        }
        private void RunSingleCase(object tc)
        {
            //Todo: need consider for acq case, only one process can start at the same time
            int count = 0;
            while (tc.ToString().ToLower().Contains("acq") && TestUtility.Utility.IsAcquisitionInProgress() && count < 3)
            {
                count++;
                Thread.Sleep(6000);
            }

            lock (this)
            {
                string methodName = tc.ToString();
                string scriptFileName = "TestData\\" + methodName + ".cod";
                string dataFileName = "TestData\\" + methodName + ".iod";
                try
                {
                    if (complieInTime.Checked) //Excete case by compile the code in time and then run
                    {
                        PAS.AutoTest.ScriptRunner.ScriptRunner sr = new PAS.AutoTest.ScriptRunner.ScriptRunner();
                        PAS.AutoTest.ScriptRunner.ExecuteResult executeResult;
                        if (File.Exists(dataFileName))
                        {
                            executeResult = sr.Run(scriptFileName, dataFileName, 600);
                        }
                        else
                        {
                            executeResult = sr.Run(scriptFileName, string.Empty, 600);
                        }
                    }
                    else //Excete case by reflection
                    {
                        Runner r = null;
                        if (File.Exists(dataFileName))
                        {
                            r = new Runner(dataFileName);
                        }
                        else
                        {
                            r = new Runner("");
                        }

                        r.GetType().GetMethod(methodName).Invoke(r, null);
                    }

                    Thread.Sleep(20);

                    XmlDocument doc = new XmlDocument();
                    doc.Load("LastOutput.xml");
                    XmlNodeList nodes = doc.SelectNodes("TestResult/Round/CheckPoint/Result");

                    bool isPass = true;
                    foreach (XmlNode node in nodes)
                    {
                        if (!Equals(node.InnerText, TestResult.Pass.ToString()) && !Equals(node.InnerText, TestResult.Done.ToString()))
                        {
                            isPass = false;
                            break;
                        }
                    }
                    if (isPass)
                    {
                        HandlePassedCase(methodName);
                    }
                    else
                    {
                        HandleFailedCase(methodName);
                    }

                    passNum.Text = passedCaseNum.ToString();
                    failNum.Text = failedCaseNum.ToString();
                    noRunNum.Text = noRunCaseNum.ToString();
                }
                catch (Exception ex)
                {
                    HandleExceptionCase(methodName, ex.ToString());

                    passNum.Text = passedCaseNum.ToString();
                    failNum.Text = failedCaseNum.ToString();
                    noRunNum.Text = noRunCaseNum.ToString();
                    return;
                }
            }
        }