Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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;
            }
        }