Пример #1
0
        public void Abort(int sessionId)
        {
            ControlMessage abortMessage = new ControlMessage(MessageNames.CtrlAbort, CommonConst.BroadcastSession);

            abortMessage.AddParam("IsRequest", true.ToString());
            abortMessage.Id = sessionId;
            _globalInfo.MessageTransceiver.Send(abortMessage);

            AbortEventInfo abortEventInfo = new AbortEventInfo(sessionId, true, false);

            _globalInfo.EventQueue.Enqueue(abortEventInfo);

            if (null == _abortBlocker)
            {
                _abortBlocker = new BlockHandle();
            }
            // 目前使用同步Abort,每次只能释放一个
            _abortBlocker.Timeout = _globalInfo.ConfigData.GetProperty <int>("AbortTimeout");
            bool isNotTimeout = _abortBlocker.Wait(Constants.AbortState);

            if (!isNotTimeout)
            {
                _globalInfo.LogService.Print(LogLevel.Warn, CommonConst.PlatformLogSession,
                                             $"Session {sessionId} abort timeout.");
            }
        }
Пример #2
0
        /// <summary>
        /// 如果其他Session执行结束发送开始执行TestProjectTeardown的命令
        /// </summary>
        private void RunRootTearDownIfOtherSessionOver()
        {
            ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.TestGroupSession);

            startMessage.AddParam("RunTearDown", true.ToString());
            _globalInfo.MessageTransceiver.Send(startMessage);
        }
Пример #3
0
        /// <summary>
        /// 如果TestProject的SetUp执行成功发送开始测试Session的命令
        /// </summary>
        private void StartTestSessionsIfSetUpOver(ISequenceTestResult result)
        {
            if (result.SessionId != CommonConst.TestGroupSession || result.SequenceIndex != CommonConst.SetupIndex)
            {
                return;
            }
            _globalInfo.EventDispatcher.SequenceOver -= StartTestSessionsIfSetUpOver;
            if (result.ResultState != RuntimeState.Success)
            {
                return;
            }
            ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.BroadcastSession);

            startMessage.AddParam("RunAll", true.ToString());
            // 发送开始指令
            foreach (int session in _testsMaintainer.TestContainers.Keys)
            {
                if (session == CommonConst.TestGroupSession)
                {
                    continue;
                }
                startMessage.Id = session;
                _globalInfo.MessageTransceiver.Send(startMessage);
            }
        }
Пример #4
0
        public void Abort(int sessionId)
        {
            this._globalInfo.StateMachine.State = RuntimeState.AbortRequested;
            if (sessionId == CommonConst.TestGroupSession || sessionId == CommonConst.BroadcastSession)
            {
                foreach (int session in _testsMaintainer.TestContainers.Keys)
                {
                    Abort(session);
                }
            }
            else
            {
                ControlMessage abortMessage = new ControlMessage(MessageNames.CtrlAbort, CommonConst.BroadcastSession);
                abortMessage.AddParam("IsRequest", true.ToString());
                abortMessage.Id = sessionId;
                _globalInfo.MessageTransceiver.Send(abortMessage);

                AbortEventInfo abortEventInfo = new AbortEventInfo(sessionId, true, false);
                _globalInfo.EventQueue.Enqueue(abortEventInfo);

                // 目前使用同步Abort,每次只能释放一个
                _blockHandle.Timeout = _globalInfo.ConfigData.GetProperty <int>("AbortTimeout");
                _blockHandle.Wait(Constants.AbortState);
            }
        }
Пример #5
0
        // 如果是TestProject运行,则先开始TestProject的SetUp,在触发SequenceOver事件后检查是否是TestProject的SetUp,如果是则开始其他Session。
        // 注册其他的Session事件,如果所有Session都已经执行结束,则发送执行TestProject的TearDown的命令。
        // 如果是SequenceGroup执行,直接开始即可。
        public void StartTestWork()
        {
            _globalInfo.EventDispatcher.SessionOver += SessionOverClean;
            if (_sequenceData is ITestProject)
            {
                // 注册TestProject的Setup执行结束后的事件
                _globalInfo.EventDispatcher.SequenceOver += StartTestSessionsIfSetUpOver;

                ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.TestGroupSession);
                startMessage.AddParam("RunSetup", true.ToString());
                _globalInfo.MessageTransceiver.Send(startMessage);
            }
            else
            {
                // TODO 这里没有再去监听运行端是否开始的返回信息,可能会出现断链的问题,后期再解决
                ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.BroadcastSession);
                startMessage.AddParam("RunAll", true.ToString());
                foreach (int session in _testsMaintainer.TestContainers.Keys)
                {
                    startMessage.Id = session;
                    _globalInfo.MessageTransceiver.Send(startMessage);
                }
            }
        }