private void UpdateSequenceTestResult(ISequenceFailedInfo failedInfo, Dictionary <string, string> watchData) { _sequenceTestResult.ResultState = this.State; _sequenceTestResult.StartTime = this.StartTime; _sequenceTestResult.EndTime = this.EndTime; _sequenceTestResult.ElapsedTime = this.ElapsedTime.TotalMilliseconds; _sequenceTestResult.FailedInfo = failedInfo; _sequenceTestResult.VariableValues.Clear(); if (null != watchData) { Regex varNameRegex = new Regex(CoreUtils.GetVariableNameRegex(_sequence, Session)); foreach (KeyValuePair <string, string> varToValue in watchData) { if (varNameRegex.IsMatch(varToValue.Key)) { IVariable variable = CoreUtils.GetVariable(_sequence, varToValue.Key); _sequenceTestResult.VariableValues.Add(variable, varToValue.Value); } } } }
public void HandleStatusMessage(StatusMessage message, int index) { RuntimeState newState = message.SequenceStates[index]; this.RunStack = message.Stacks[index]; StepResult stepResult = message.Results[index]; switch (message.Name) { case MessageNames.StartStatusName: case MessageNames.ReportStatusName: if (State == RuntimeState.StartIdle && newState == RuntimeState.Running) { // 序列刚开始执行 RefreshCommonStatus(message, newState, stepResult); // 更新数据库中的测试数据条目 UpdateSequenceResultData(string.Empty); // 触发SequenceStart事件 UpdateSequenceTestResult(null, null); _stateManageContext.EventDispatcher.RaiseEvent(Constants.SequenceOver, Session, _sequenceTestResult); } // 序列执行结束 else if ((State == RuntimeState.Running || State == RuntimeState.Blocked || State == RuntimeState.DebugBlocked) && newState > RuntimeState.AbortRequested) { RefreshCommonStatus(message, newState, stepResult); // 更新数据库中的测试数据条目 UpdateSequenceResultData(GetFailedInfoStr(message)); // 写入RuntimeStatusInfo条目 string watchDataStr = ModuleUtils.WatchDataToString(message.WatchData); WriteRuntimeStatusData(stepResult, watchDataStr); // 触发SequenceOver事件 ISequenceFailedInfo failedInfo = GetFailedInfo(message); UpdateSequenceTestResult(failedInfo, message.WatchData); _stateManageContext.EventDispatcher.RaiseEvent(Constants.SequenceOver, Session, _sequenceTestResult); } // 关键节点状态更新 else { RefreshCommonStatus(message, newState, stepResult); // 只有在StepResult处于结果节点时才会触发事件和 if (message.InterestedSequence.Contains(SequenceIndex)) { // 写入RuntimeStatusInfo条目 string watchDataStr = ModuleUtils.WatchDataToString(message.WatchData); WriteRuntimeStatusData(stepResult, watchDataStr); } } break; case MessageNames.HearBeatStatusName: RefreshCommonStatus(message, newState, stepResult); break; case MessageNames.ErrorStatusName: newState = RuntimeState.Error; stepResult = StepResult.Error; RefreshCommonStatus(message, newState, stepResult); // 更新数据库中的测试数据条目 UpdateSequenceResultData(message.ExceptionInfo.ToString()); // 写入RuntimeStatusInfo条目 WriteRuntimeStatusData(stepResult, ModuleUtils.WatchDataToString(message.WatchData)); // 触发SequenceOver事件 UpdateSequenceTestResult(message.ExceptionInfo, message.WatchData); _stateManageContext.EventDispatcher.RaiseEvent(Constants.SequenceOver, Session, _sequenceTestResult); break; case MessageNames.ResultStatusName: break; default: throw new InvalidProgramException(); break; } }