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."); } }
/// <summary> /// 如果其他Session执行结束发送开始执行TestProjectTeardown的命令 /// </summary> private void RunRootTearDownIfOtherSessionOver() { ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.TestGroupSession); startMessage.AddParam("RunTearDown", true.ToString()); _globalInfo.MessageTransceiver.Send(startMessage); }
/// <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); } }
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); } }
// 如果是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); } } }