Example #1
0
        private void LogNewTestResults(List <TestResultInfo> newTestResults, ref TestProjectExecutionResult testResultContext)
        {
            List <TestResultInfo> InnerResults = new List <TestResultInfo>();

            foreach (TestResultInfo resultInfo in newTestResults)
            {
                if (resultInfo.ParentExecId.Equals(default(Guid)))
                {
                    testResultContext.TestResults.Add(resultInfo);
                }
                else
                {
                    InnerResults.Add(resultInfo);
                }

                BroadCastMessage($"{resultInfo.DisplayName}执行完成,执行结果:{resultInfo.Outcome.ToString()}");
            }

            foreach (TestResultInfo resultInfo in InnerResults)
            {
                TestResultInfo tmp = testResultContext.TestResults.First(o => o.ExecutionId.Equals(resultInfo.ParentExecId));
                if (tmp != null)
                {
                    if (tmp.InnerResults == null)
                    {
                        tmp.InnerResults = new List <TestResultInfo>();
                    }

                    tmp.InnerResults.Add(resultInfo);
                }
            }
        }
Example #2
0
        private void LogTestProjectExecutionResult(TestProjectExecutionResult item, bool saveToJsonfile, bool displayInBrower)
        {
            string directory = this.configurationManager.GetConfigValue(Constants.TestResultDirectory);

            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            string output = TestProjectExecutionResult.Serialize(item);

            if (saveToJsonfile)
            {
                File.WriteAllText(Path.Combine(directory, item.FileName + Constants.TestResultFileTypeExtesion), output, this.configurationManager.GetEncoding());
            }

            string rawContent = File.ReadAllText(this.configurationManager.GetConfigValue(Constants.ReportTemplate), this.configurationManager.GetEncoding());
            string report     = rawContent.Replace(this.configurationManager.GetConfigValue(Constants.ReportTemplateParameter), output);
            string reportUrl  = Path.Combine(directory, item.FileName + Path.GetExtension(this.configurationManager.GetConfigValue(Constants.ReportTemplate)));

            File.WriteAllText(reportUrl, report, this.configurationManager.GetEncoding());
            if (displayInBrower && !item.TestRunCompleteArgs.IsAborted)
            {
                System.Diagnostics.Process.Start(reportUrl);
            }
        }
Example #3
0
        private async void OnRunTestProject()
        {
            this.canRunTestProject = false;
            (this.RunTestProjectCommand as DelegateCommand)?.RaiseCanExecuteChanged();
            (this.CancelTestProjectRunCommand as DelegateCommand)?.RaiseCanExecuteChanged();
            this.eventAggregator.GetEvent <RealTimeMessageEvent>().Publish($"开始执行测试工程:");
            TestProjectExecutionResult testResultContext = new TestProjectExecutionResult()
            {
                TestProject = this.TestProjectInfo
            };

            string runSettings = File.ReadAllText(Path.Combine(this.TestProjectInfo.Location, this.TestProjectInfo.Name + Constants.TestRunSettingFileTypeExtesion));
            IEnumerable <TestCaseInfo> testCases      = TestProjectInfo.TestMethods;
            IEnumerable <string>       testAssemblies = from s in this.TestAssemblies select s.Name;
            await Task.Run(() => this.executor.RunSelectedTestsV1(
                               ref testResultContext,
                               testAssemblies,
                               testCases,
                               runSettings));

            await this.testResultsRepository.AddAsync(testResultContext);

            this.canRunTestProject = true;
            (this.RunTestProjectCommand as DelegateCommand)?.RaiseCanExecuteChanged();
            (this.CancelTestProjectRunCommand as DelegateCommand)?.RaiseCanExecuteChanged();
        }
Example #4
0
        private async void SetTestProjectAsync(TestProjectInfo testProject)
        {
            if (testProject != null)
            {
                TestProjectExecutionResult info = await this.testResultsRepository.GetTestProjectResultAsync(testProject.Name);

                this.CurrentTestMethodResult = info;
            }
        }
Example #5
0
        public void RunSelectedTestsV1(ref TestProjectExecutionResult testResultContext, IEnumerable <string> testAssemblies, IEnumerable <TestCaseInfo> testCases, string settingsXml)
        {
            this.InitializeConnection(MessageTypeDefinition.ExecutionInitialize, testAssemblies);
            Dictionary <string, IEnumerable <string> > adapterSourceMap = new Dictionary <string, IEnumerable <string> >();

            adapterSourceMap.Add("_none_", testAssemblies);

            StringBuilder buffer = new StringBuilder();

            foreach (TestCaseInfo info in testCases)
            {
                buffer.Append("FullyQualifiedName=");
                buffer.Append(info.FullyQualifiedName);
                buffer.Append("|");
            }

            string testCaseFilter = buffer.ToString().Trim('|');

            TestExecutionContext context = new TestExecutionContext()
            {
                FrequencyOfRunStatsChangeEvent = 10,
                InIsolation = false,
                KeepAlive   = false,
                AreTestCaseLevelEventsRequired = true,
                IsDebug        = false,
                TestCaseFilter = testCaseFilter,
                FilterOptions  = new FilterOptions()
                {
                    FilterRegEx            = null,
                    FilterRegExReplacement = null
                }
            };

            testResultContext.TestRunStartedTime = DateTime.Now;
            //this.communicationManager.SendMessage(
            //    MessageTypeDefinition.StartTestExecutionWithSources,
            //    new TestRunRequestPayloadV1()
            //    {
            //        AdapterSourceMap = adapterSourceMap,
            //        RunSettings = string.IsNullOrEmpty(settingsXml) ? File.ReadAllText(this.configurationManager.GetConfigValue(Contracts.Constants.DefaultRunsettingsFile)) : settingsXml,
            //        TestExecutionContext = context
            //    });
            this.communicationManager.SendMessage(
                MessageTypeDefinition.StartTestExecutionWithTestsV2,
                new TestRunRequestPayloadV2()
            {
                Sources     = testAssemblies,
                TestCases   = testCases,
                RunSettings = string.IsNullOrEmpty(settingsXml) ? File.ReadAllText(this.configurationManager.GetConfigValue(Contracts.Constants.DefaultRunsettingsFile)) : settingsXml
            });

            RecieveRunMesagesAndHandleRunComplete(ref testResultContext);

            this.processManager.ShutdownProcess();
            this.communicationManager.StopServer();
        }
Example #6
0
        private string ConvertToTestProjectResultInfo(TestProjectExecutionResult current)
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine($"名称:{current.TestProjectName};");
            stringBuilder.AppendLine($"开始时间:{current.TestRunStartedTime.ToString("yyyy-MM-dd HH:mm:ss.fffffff")};");
            stringBuilder.AppendLine($"持续时间:{current.TestRunCompleteArgs.ElapsedTimeInRunningTests.ToString()};");
            stringBuilder.AppendLine($"执行测试用例总数:{current.TestRunStatistics.ExecutedTests};");
            foreach (KeyValuePair <TestOutcome, long> message in current.TestRunStatistics.Stats)
            {
                stringBuilder.AppendLine($"{message.Key.ToString()}: {message.Value.ToString()}");
            }

            return(stringBuilder.ToString());
        }
Example #7
0
        private void RecieveRunMesagesAndHandleRunComplete(ref TestProjectExecutionResult testResultContext)
        {
            var isTestRunComplete = false;

            while (!isTestRunComplete)
            {
                var message = this.communicationManager.ReceiveMessage();

                if (string.Equals(MessageTypeDefinition.TestRunStatsChange, message.MessageType))
                {
                    TestExecutionStatsChange current = TestExecutionStatsChange.Deserialize(message.PayLoadString());
                    if (current.NewTestResults?.Count > 0)
                    {
                        this.LogNewTestResults(current.NewTestResults, ref testResultContext);
                    }
                }
                else if (string.Equals(MessageTypeDefinition.ExecutionComplete, message.MessageType))
                {
                    TestExecutionCompleted completed = TestExecutionCompleted.Deserialize(message.PayLoadString());
                    testResultContext.TestRunCompleteArgs = completed.TestRunCompleteArgs;

                    if (completed.TestRunCompleteArgs.IsAborted)
                    {
                        BroadCastMessage($"测试任务已中止。");
                    }
                    else
                    {
                        if (completed.LastRunTests?.NewTestResults?.Count > 0)
                        {
                            this.LogNewTestResults(completed.LastRunTests.NewTestResults, ref testResultContext);
                        }
                        testResultContext.TestRunStatistics = completed.LastRunTests?.TestRunStatistics;
                        BroadCastMessage($"共执行{testResultContext.TestRunStatistics?.ExecutedTests}个测试用例");

                        foreach (KeyValuePair <TestOutcome, long> stat in testResultContext.TestRunStatistics?.Stats)
                        {
                            BroadCastMessage($"{stat.Key.ToString()}:{stat.Value}");
                        }
                    }

                    isTestRunComplete = true;
                }
                else if (string.Equals(MessageTypeDefinition.TestMessage, message.MessageType))
                {
                    BroadCastMessage(message.Payload.SelectToken("$..Message").ToString());
                }
            }
        }
Example #8
0
        public Task <TestProjectExecutionResult> AddAsync(TestProjectExecutionResult item)
        {
            if (!this.testProjectRepository.Contains(item))
            {
                this.testProjectRepository.Add(item);
                ((List <TestResultInfo>) this.testCaseResultRepository).AddRange(item.TestResults);
            }

            item.FileName = $"{item.TestProjectName}_{item.TestRunStartedTime.ToString("yyyy-MM-dd_hh-mm-ss-fff")}";
            this.LogTestProjectExecutionResult(item, true, true);
            foreach (TestResultInfo tmp in item.TestResults)
            {
                if (tmp.InnerResults != null && tmp.InnerResults.Count > 0)
                {
                    TestProjectExecutionResult inner = new TestProjectExecutionResult()
                    {
                        TestProject = new TestProjectInfo()
                        {
                            Name              = tmp.DisplayName,
                            TestTarget        = item.TestTarget,
                            TestTargetVersion = item.TestTargetVersion
                        },
                        TestTarget         = item.TestTarget,
                        TestResults        = tmp.InnerResults,
                        TestRunStartedTime = tmp.StartTime.DateTime
                    };

                    inner.TestRunCompleteArgs = new TestRunCompleteInfo()
                    {
                        TestRunStatistics         = inner.TestRunStatistics,
                        ElapsedTimeInRunningTests = tmp.Duration
                    };

                    if (item.TestProjectName == null)
                    {
                        inner.FileName = inner.TestProjectName + item.FileName;
                    }
                    else
                    {
                        inner.FileName = item.FileName.Replace(item.TestProjectName, inner.TestProjectName);
                    }

                    this.LogTestProjectExecutionResult(inner, false, false);
                }
            }

            return(Task.FromResult(item));
        }
Example #9
0
        private IList <TestProjectExecutionResult> GetItems()
        {
            string directory = this.configurationManager.GetConfigValue(Constants.TestResultDirectory);

            if (Directory.Exists(directory))
            {
                DirectoryInfo root  = new DirectoryInfo(directory);
                FileInfo[]    files = root.GetFiles(Constants.TestResultFileTypePattern);

                foreach (FileInfo file in files)
                {
                    string rawContent = File.ReadAllText(file.FullName, this.configurationManager.GetEncoding());
                    TestProjectExecutionResult item = TestProjectExecutionResult.Deserialize(rawContent);
                    if (!this.testProjectRepository.Contains(item))
                    {
                        this.testProjectRepository.Add(item);
                        ((List <TestResultInfo>) this.testCaseResultRepository).AddRange(item.TestResults);
                    }
                }
            }

            return(this.testProjectRepository);
        }
Example #10
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return(DependencyProperty.UnsetValue);
            }

            TestCaseInfo methodInfo = value as TestCaseInfo;

            if (methodInfo != null)
            {
                return(this.ConvertToTestMethodInfo(methodInfo));
            }

            TestProjectInfo projectInfo = value as TestProjectInfo;

            if (projectInfo != null)
            {
                return(this.ConvertToTestProjectInfo(projectInfo));
            }

            TestResultInfo resultInfo = value as TestResultInfo;

            if (resultInfo != null)
            {
                return(this.ConvertToTestResultInfo(resultInfo));
            }

            TestProjectExecutionResult projectExecutionResult = value as TestProjectExecutionResult;

            if (projectExecutionResult != null)
            {
                return(this.ConvertToTestProjectResultInfo(projectExecutionResult));
            }

            return(DependencyProperty.UnsetValue);
        }
Example #11
0
        public Task <TestProjectExecutionResult> GetTestProjectResultAsync(string testProjectName)
        {
            TestProjectExecutionResult result = this.testProjectRepository.OrderByDescending(o => o.TestRunStartedTime).FirstOrDefault(o => testProjectName.Equals(o.TestProjectName));

            return(Task.FromResult(result));
        }
Example #12
0
 public Task <TestProjectExecutionResult> UpdateAsync(TestProjectExecutionResult item)
 {
     throw new NotImplementedException();
 }