示例#1
0
        private void HandleException(FailedAction failedAction, Exception exception)
        {
            if (exception is TestflowLoopBreakException)
            {
                throw exception;
            }
            switch (failedAction)
            {
            // 如果失败行为是终止,则抛出异常
            case FailedAction.Terminate:
                throw exception;
                break;

            // 如果失败行为是继续,则不执行任何操作
            case FailedAction.Continue:
                break;

            // 如果失败行为是跳出循环,则抛出LoopBreakException
            case FailedAction.BreakLoop:
                throw new TestflowLoopBreakException(true, exception);
                break;

            // 如果失败行为是下一个循环,则抛出LoopBreakException
            case FailedAction.NextLoop:
                throw new TestflowLoopBreakException(false, exception);
                break;
            }
        }
示例#2
0
 private void FailCommand(NetworkMessage message)
 {
     if (message.TryGetObject <ResponseCodes>(out ResponseCodes code))
     {
         FailedAction?.Invoke(code);
     }
 }
示例#3
0
 // 使能retry调用step,且失败后强制继续执行
 private void InvokeStepWithRetryAndForceContinue(bool forceInvoke)
 {
     try
     {
         InvokeStepWithRetry(forceInvoke);
     }
     catch (TaskFailedException ex)
     {
         // 如果该失败类型不能被处理,则直接抛出
         if (!ModuleUtils.IsErrorCanBeHandled(ex.FailedType))
         {
             throw;
         }
         // 停止计时
         Actuator.EndTiming();
         this.Result = ModuleUtils.GetStepResult(ex.FailedType);
         // 如果InvokeErrorAction不是Continue,则抛出异常
         RecordInvocationError(ex, ex.FailedType);
         HandleException(StepData.InvokeErrorAction, ex);
     }
     catch (TestflowAssertException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         this.Result = StepResult.Failed;
         RecordInvocationError(ex, FailedType.AssertionFailed);
         HandleException(StepData.AssertFailedAction, ex);
     }
     catch (TargetInvocationException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         this.Result = StepResult.Error;
         RecordTargetInvocationError(ex);
         // 如果失败行为是终止,则抛出异常
         FailedAction failedAction = ex.InnerException is TestflowAssertException
             ? StepData.AssertFailedAction
             : StepData.InvokeErrorAction;
         HandleException(failedAction, ex.InnerException);
     }
     catch (TargetException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         this.Result = StepResult.Error;
         RecordInvocationError(ex, FailedType.TargetError);
         HandleException(StepData.InvokeErrorAction, ex);
     }
 }
示例#4
0
        public override int GetHashCode()
        {
            var un = Name;

            un += Matcher.ToString();
            un += string.Join("", Conditions.Select(s => s.Left + s.Right + s.Right));
            un += Online.ToString();
            un += Action.ToString();
            un += FailedAction.ToString();
            un += CustomCodeName;
            un += Url;
            un += HttpCode;

            return(Lib.Security.Hash.ComputeIntCaseSensitive(un));
        }
示例#5
0
 // 执行step,即使失败也继续执行,如果失败,写入runtimeStatus
 private void InvokeStepAndForceContinue(bool forceInvoke)
 {
     try
     {
         InvokeStepSingleTime(forceInvoke);
     }
     catch (TaskFailedException ex)
     {
         // 如果该失败类型不能被处理,则直接抛出
         if (!ModuleUtils.IsErrorCanBeHandled(ex.FailedType))
         {
             throw;
         }
         // 停止计时
         Actuator.EndTiming();
         this.Result = _isUnderRetryStep ? StepResult.RetryFailed : StepResult.Failed;
         RecordInvocationError(ex, ex.FailedType);
         HandleException(StepData.InvokeErrorAction, ex);
     }
     catch (TestflowAssertException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         this.Result = _isUnderRetryStep ? StepResult.RetryFailed : StepResult.Failed;
         RecordInvocationError(ex, FailedType.AssertionFailed);
         HandleException(StepData.AssertFailedAction, ex);
     }
     catch (TargetInvocationException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         RecordTargetInvocationError(ex);
         FailedAction failedAction = ex.InnerException is TestflowAssertException
             ? StepData.AssertFailedAction
             : StepData.InvokeErrorAction;
         HandleException(failedAction, ex.InnerException);
     }
     catch (TestflowLoopBreakException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         if (null != ex.InnerException)
         {
             FailedType failedType = GetFailedType(ex.InnerException);
             RecordInvocationError(ex, failedType);
             HandleException(StepData.AssertFailedAction, ex);
         }
         else
         {
             throw;
         }
     }
     catch (TargetException ex)
     {
         // 停止计时
         Actuator.EndTiming();
         this.Result = StepResult.Error;
         RecordInvocationError(ex, FailedType.TargetError);
         HandleException(StepData.InvokeErrorAction, ex);
     }
 }