Пример #1
0
        public int ExecuteWithRetry()
        {
            if (this.consoleArgumentsProvider.ShouldDeleteOldTestResultFiles && File.Exists(consoleArgumentsProvider.TestResultPath))
            {
                File.Delete(consoleArgumentsProvider.TestResultPath);
            }


            System.Console.Out.WriteLine("Iteration #1  - First call to MsText.exe");
            this.testProcessManager.ExecuteInitialRun(consoleArgumentsProvider);

            var masterTestRun = FileSystemTools.DeserializeTestRun(consoleArgumentsProvider.TestResultPath);

            var testsToRepeat = new List <string>();

            testsToRepeat = this.testRunProvider.GetNamesOfNotPassedTests(masterTestRun);

            if (testRunProvider.CalculateRepeatPercentage(masterTestRun) <= this.consoleArgumentsProvider.FailedTestsThreshold)
            {
                // We've already done the first iteration. This loop performs the rest
                for (int iterationNumber = 2; iterationNumber <= this.consoleArgumentsProvider.RetriesCount + 1; iterationNumber++)
                {
                    // If we made all test succeed, exit!
                    if (testsToRepeat.Count == 0)
                    {
                        break;
                    }

                    System.Console.Out.WriteLine("Iteration #{0,2} - Rerunning {1} failed tests.", iterationNumber, testsToRepeat.Count);

                    string tempTestResultsPath = FileSystemTools.GetTempTrxFile();
                    testProcessManager.ExecuteIterativeRun(testsToRepeat, tempTestResultsPath, consoleArgumentsProvider);

                    var currentIterativeTestRun = FileSystemTools.DeserializeTestRun(tempTestResultsPath);

                    // Update master results file
                    this.testRunProvider.UpdateMasterRunWithNewIteration(iterationNumber, masterTestRun, currentIterativeTestRun);

                    if (File.Exists(this.consoleArgumentsProvider.NewTestResultPath))
                    {
                        File.Delete(this.consoleArgumentsProvider.NewTestResultPath);
                    }
                    FileSystemTools.SerializeTestRun(masterTestRun, consoleArgumentsProvider.NewTestResultPath);

                    testsToRepeat = this.testRunProvider.GetNamesOfNotPassedTests(currentIterativeTestRun);
                }
            }

            FileSystemTools.SerializeTestRun(masterTestRun, consoleArgumentsProvider.NewTestResultPath);

            int returnCode = testsToRepeat.Count > 0 ? 1 : 0;

            return(returnCode);
        }