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); } } }
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); } }
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(); }
private async void SetTestProjectAsync(TestProjectInfo testProject) { if (testProject != null) { TestProjectExecutionResult info = await this.testResultsRepository.GetTestProjectResultAsync(testProject.Name); this.CurrentTestMethodResult = info; } }
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(); }
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()); }
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()); } } }
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)); }
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); }
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); }
public Task <TestProjectExecutionResult> GetTestProjectResultAsync(string testProjectName) { TestProjectExecutionResult result = this.testProjectRepository.OrderByDescending(o => o.TestRunStartedTime).FirstOrDefault(o => testProjectName.Equals(o.TestProjectName)); return(Task.FromResult(result)); }
public Task <TestProjectExecutionResult> UpdateAsync(TestProjectExecutionResult item) { throw new NotImplementedException(); }