How to use setConditionOptions method of org.cerberus.crud.entity.TestCaseExecution class

Best Cerberus-source code snippet using org.cerberus.crud.entity.TestCaseExecution.setConditionOptions

Source:ExecutionRunService.java Github

copy

Full Screen

...467 step.getStepId(), stepIndex, step.getSort(), step.getLoop(), step.getConditionOperator(), step.getConditionValue1(), step.getConditionValue2(), step.getConditionValue3(), step.getConditionValue1(), step.getConditionValue2(), step.getConditionValue3(), null,468 startStep, startStep, startStep, startStep, new BigDecimal("0"), null, stepMess, step, execution,469 step.isUsingLibraryStep(), step.getLibraryStepTest(), step.getLibraryStepTestcase(), step.getLibraryStepStepId(), step.getDescription());470 stepExecution.setLoop(step.getLoop());471 stepExecution.setConditionOptions(step.getConditionOptionsActive());472 testCaseStepExecutionService.insertTestCaseStepExecution(stepExecution, execution.getSecrets());473 stepExecution.setExecutionResultMessage(new MessageGeneral(MessageGeneralEnum.EXECUTION_PE_TESTSTARTED));474 // We populate the TestCaseStep inside the execution List475 execution.addStepExecutionList(stepExecution);476 // determine if step is executed (doExecuteStep) and if we trigger a new step execution after (doExecuteNextStep)477 boolean doExecuteStep = true;478 boolean descriptionOrConditionStepDecodeError = false;479 boolean conditionStepError = false;480 AnswerItem<Boolean> conditionAnswer = new AnswerItem<>(new MessageEvent(MessageEventEnum.CONDITIONEVAL_FAILED_UNKNOWNCONDITION));481 if (!((stepExecution.getLoop().equals(TestCaseStep.LOOP_DOWHILECONDITIONTRUE)482 || stepExecution.getLoop().equals(TestCaseStep.LOOP_DOWHILECONDITIONFALSE))483 && stepIndex == 1)) {484 // We don't decode value1, value2 and value3 if loop condition is a doWhile in order to prevent error message on condition that will not be executed.485 if (!descriptionOrConditionStepDecodeError) {486 try {487 answerDecode = variableService.decodeStringCompletly(stepExecution.getConditionValue1(), execution, null, false);488 stepExecution.setConditionValue1(answerDecode.getItem());489 if (!(answerDecode.isCodeStringEquals("OK"))) {490 stepExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));491 stepExecution.setStepResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value1"));492 stepExecution.setReturnMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value1").getDescription());493 stepExecution.setReturnCode(answerDecode.getResultMessage().getCodeString());494 stepExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());495 stepExecution.setEnd(new Date().getTime());496 LOG.debug("{}Step interrupted due to decode 'Step Condition Value1' Error.", logPrefix);497 descriptionOrConditionStepDecodeError = true;498 }499 } catch (CerberusEventException cex) {500 LOG.warn(cex);501 }502 }503 if (!descriptionOrConditionStepDecodeError) {504 try {505 answerDecode = variableService.decodeStringCompletly(stepExecution.getConditionValue2(), execution, null, false);506 stepExecution.setConditionValue2(answerDecode.getItem());507 if (!(answerDecode.isCodeStringEquals("OK"))) {508 stepExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));509 stepExecution.setStepResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value2"));510 stepExecution.setReturnMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value2").getDescription());511 stepExecution.setReturnCode(answerDecode.getResultMessage().getCodeString());512 stepExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());513 stepExecution.setEnd(new Date().getTime());514 LOG.debug("{}Step interrupted due to decode 'Step Condition Value2' Error.", logPrefix);515 descriptionOrConditionStepDecodeError = true;516 }517 } catch (CerberusEventException cex) {518 LOG.warn(cex);519 }520 }521 if (!descriptionOrConditionStepDecodeError) {522 try {523 answerDecode = variableService.decodeStringCompletly(stepExecution.getConditionValue3(), execution, null, false);524 stepExecution.setConditionValue3(answerDecode.getItem());525 if (!(answerDecode.isCodeStringEquals("OK"))) {526 stepExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));527 stepExecution.setStepResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value3"));528 stepExecution.setReturnMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Condition Value3").getDescription());529 stepExecution.setReturnCode(answerDecode.getResultMessage().getCodeString());530 stepExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());531 stepExecution.setEnd(new Date().getTime());532 LOG.debug("{}Step interrupted due to decode 'Step Condition Value3' Error.", logPrefix);533 descriptionOrConditionStepDecodeError = true;534 }535 } catch (CerberusEventException cex) {536 LOG.warn(cex);537 }538 }539 }540 if (!descriptionOrConditionStepDecodeError) {541 try {542 answerDecode = variableService.decodeStringCompletly(stepExecution.getDescription(), execution, null, false);543 stepExecution.setDescription(answerDecode.getItem());544 if (!(answerDecode.isCodeStringEquals("OK"))) {545 stepExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));546 stepExecution.setStepResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Description"));547 stepExecution.setReturnMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Step Description").getDescription());548 stepExecution.setReturnCode(answerDecode.getResultMessage().getCodeString());549 stepExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());550 stepExecution.setEnd(new Date().getTime());551 LOG.debug("{}Step interrupted due to decode 'Step Description' Error.", logPrefix);552 descriptionOrConditionStepDecodeError = true;553 }554 } catch (CerberusEventException cex) {555 LOG.warn(cex);556 }557 }558 if (stepExecution.getLoop().equals(TestCaseStep.LOOP_ONCEIFCONDITIONFALSE)559 || stepExecution.getLoop().equals(TestCaseStep.LOOP_ONCEIFCONDITIONTRUE)560 || stepExecution.getLoop().equals(TestCaseStep.LOOP_WHILECONDITIONFALSEDO)561 || stepExecution.getLoop().equals(TestCaseStep.LOOP_WHILECONDITIONTRUEDO)562 || stepExecution.getLoop().isEmpty()563 || stepIndex > 1) {564 if (!(descriptionOrConditionStepDecodeError)) {565 conditionAnswer = this.conditionService.evaluateCondition(566 stepExecution.getConditionOperator(),567 stepExecution.getConditionValue1(), stepExecution.getConditionValue2(), stepExecution.getConditionValue3(),568 execution, stepExecution.getConditionOptions());569 doExecuteStep = conditionAnswer.getItem();570 if (conditionAnswer.getResultMessage().getMessage().getCodeString().equals("PE")) {571 // There were no error when performing the condition evaluation.572 switch (stepExecution.getLoop()) {573 case TestCaseStep.LOOP_ONCEIFCONDITIONFALSE:574 doExecuteStep = !doExecuteStep;575 doExecuteNextStep = false;576 break;577 case TestCaseStep.LOOP_ONCEIFCONDITIONTRUE:578 case "":579 doExecuteNextStep = false;580 break;581 case TestCaseStep.LOOP_WHILECONDITIONFALSEDO:582 case TestCaseStep.LOOP_DOWHILECONDITIONFALSE:583 doExecuteStep = !doExecuteStep;584 doExecuteNextStep = doExecuteStep;585 break;586 case TestCaseStep.LOOP_WHILECONDITIONTRUEDO:587 case TestCaseStep.LOOP_DOWHILECONDITIONTRUE:588 doExecuteNextStep = doExecuteStep;589 break;590 default:591 doExecuteNextStep = false;592 }593 } else {594 // Error when performing the condition evaluation. We force no execution (false)595 MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA_CONDITION);596 mes.setDescription(mes.getDescription()597 .replace("%AREA%", "step ")598 .replace("%COND%", stepExecution.getConditionOperator())599 .replace("%MES%", conditionAnswer.getResultMessage().getDescription()));600 execution.setResultMessage(mes);601 stepExecution.setExecutionResultMessage(mes);602 stepExecution.setStepResultMessage(new MessageEvent(MessageEventEnum.CONDITION_TESTCASESTEP_FAILED)603 .resolveDescription("AREA", "")604 .resolveDescription("COND", stepExecution.getConditionOperator())605 .resolveDescription("MESSAGE", conditionAnswer.getResultMessage().getDescription())606 );607 stepExecution.setEnd(new Date().getTime());608 LOG.debug("{}Step interrupted due to condition error.", logPrefix);609 conditionStepError = true;610 doExecuteNextStep = false;611 doExecuteStep = false;612 }613 } else {614 // If anything wrong with the decode --> we stop here with decode message in the action result.615 execution.setResultMessage(new MessageGeneral(MessageGeneralEnum.EXECUTION_FA_DECODE)616 .resolveDescription("AREA", "Step")617 .resolveDescription("MES", answerDecode.getMessageDescription()));618 execution.setEnd(new Date().getTime());619 LOG.debug("{}TestCase interrupted due to decode Error.", logPrefix);620 // There was an error on decode so we stop everything.621 if (execution.getManualExecution().equals("Y")) {622 doExecuteNextStep = true;623 doExecuteStep = true;624 } else {625 doExecuteNextStep = false;626 doExecuteStep = false;627 }628 }629 } else if (stepExecution.getLoop().equals(TestCaseStep.LOOP_DOWHILECONDITIONFALSE)630 || stepExecution.getLoop().equals(TestCaseStep.LOOP_DOWHILECONDITIONTRUE)) {631 // First Step execution for LOOP_DOWHILECONDITIONTRUE and LOOP_DOWHILECONDITIONFALSE --> We force the step execution and activate the next step execution.632 // We also force the condition message to always true with success.633 doExecuteStep = true;634 doExecuteNextStep = true;635 conditionAnswer.setResultMessage(new MessageEvent(MessageEventEnum.CONDITIONEVAL_TRUE_ALWAYS));636 } else {637 // First Step execution for Unknown Loop --> We force the step execution only once (default behaviour).638 doExecuteStep = true;639 doExecuteNextStep = false;640 conditionAnswer.setResultMessage(new MessageEvent(MessageEventEnum.CONDITIONEVAL_FAILED_UNKNOWNLOOP).resolveDescription("LOOP", stepExecution.getLoop()));641 }642 // Execute Step643 LOG.debug("{}Executing step : {} - {} - Step {} - Index {}",644 logPrefix, stepExecution.getTest(), stepExecution.getTestCase(), stepExecution.getStepId(), stepExecution.getStepId());645 if (doExecuteStep) {646 // We execute the step647 stepExecution = this.executeStep(stepExecution, execution);648 /*649 * Updating Execution Result Message only if650 * execution result message of the step is651 * not PE or OK.652 */653 if ((!(stepExecution.getExecutionResultMessage().equals(new MessageGeneral(MessageGeneralEnum.EXECUTION_PE_TESTSTARTED))))654 && (!(stepExecution.getExecutionResultMessage().equals(new MessageGeneral(MessageGeneralEnum.EXECUTION_OK))))) {655 execution.setResultMessage(stepExecution.getExecutionResultMessage());656 }657 if (stepExecution.getStepResultMessage().equals(new MessageEvent(MessageEventEnum.STEP_PENDING))) {658 stepExecution.setStepResultMessage(new MessageEvent(MessageEventEnum.STEP_SUCCESS));659 }660 /*661 * We test here is execution is manual and662 * operator needs to evaluate the condition663 * manually. If this is the case, we add the664 * comment inside the description.665 */666 if (execution.getManualExecution().equals("Y") && testcaseStepConditionEnum.isOperatorEvaluationRequired()) {667 stepExecution.setDescription(stepExecution.getDescription() + " - " + conditionAnswer.getMessageDescription());668 }669 testCaseStepExecutionService.updateTestCaseStepExecution(stepExecution, execution.getSecrets());670 if (stepExecution.isStopExecution()) {671 break;672 }673 } else if ((!descriptionOrConditionStepDecodeError) && (!conditionStepError)) { // We don't execute the step and record a generic execution.674 // Register Step in database675 LOG.debug("{}Registering Step : {}", logPrefix, stepExecution.getStepId());676 // We change the Step message only if the Step is not executed due to condition.677 MessageEvent stepMes = new MessageEvent(MessageEventEnum.CONDITION_TESTCASESTEP_NOTEXECUTED);678 stepExecution.setStepResultMessage(stepMes);679 stepExecution.setReturnMessage(stepExecution.getReturnMessage()680 .replace("%COND%", stepExecution.getConditionOperator())681 .replace("%LOOP%", stepExecution.getLoop())682 .replace("%MESSAGE%", conditionAnswer.getResultMessage().getDescription())683 );684 stepExecution.setEnd(new Date().getTime());685 this.testCaseStepExecutionService.updateTestCaseStepExecution(stepExecution, execution.getSecrets());686 LOG.debug("{}Registered Step", logPrefix);687 } else {688 // Not executed because decode error or failed condition.689 stepExecution.setEnd(new Date().getTime());690 stepExecution.setStopExecution(true);691 this.testCaseStepExecutionService.updateTestCaseStepExecution(stepExecution, execution.getSecrets());692 LOG.debug("{}Registered Step", logPrefix);693 }694 // Log TestCaseStepExecution695 if ((execution.getVerbose() > 0) && parameterService.getParameterBooleanByKey("cerberus_executionlog_enable", execution.getSystem(), false)) {696 LOG.info(stepExecution.toJson(false, true, execution.getSecrets()));697 }698 // Websocket --> we refresh the corresponding Detail Execution pages attached to this execution.699 updateExecutionWebSocketOnly(execution, false);700 stepIndex++;701 } while (doExecuteNextStep && stepIndex <= maxloop);702 // Step execution boolean is considered for next step execution only if current step was not forced or forced and failed.703 if (!step.isExecutionForced() || stepExecution.isStopExecution()) {704 doStepStopExecution = stepExecution.isStopExecution();705 }706 }707 }708 /*709 * If at that time the execution is still PE, we move it to710 * OK. It means that no issue were met.711 */712 if ((execution.getResultMessage() == null) || (execution.getResultMessage().equals(new MessageGeneral(MessageGeneralEnum.EXECUTION_PE_TESTSTARTED)))) {713 execution.setResultMessage(new MessageGeneral(MessageGeneralEnum.EXECUTION_OK));714 }715 // We notify external robot provider of end of execution status.716 switch (execution.getRobotProvider()) {717 case TestCaseExecution.ROBOTPROVIDER_BROWSERSTACK:718 browserstackService.setSessionStatus(execution.getSystem(), execution.getRobotSessionID(), execution.getControlStatus(), execution.getControlMessage(), execution.getRobotExecutorObj().getHostUser(), execution.getRobotExecutorObj().getHostPassword());719 break;720 case TestCaseExecution.ROBOTPROVIDER_KOBITON:721 kobitonService.setSessionStatus(execution.getSystem(), execution.getRobotSessionID(), execution.getControlStatus(), execution.getControlMessage(), execution.getRobotExecutorObj().getHostUser(), execution.getRobotExecutorObj().getHostPassword());722 break;723 case TestCaseExecution.ROBOTPROVIDER_LAMBDATEST:724 lambdaTestService.setSessionStatus(execution.getSession(), execution.getControlStatus());725 // We also set the exeid at that stage.726 String session1 = lambdaTestService.getTestID(execution.getTagObj().getLambdaTestBuild(), execution.getRobotSessionID(), execution.getRobotExecutorObj().getHostUser(), execution.getRobotExecutorObj().getHostPassword(), execution.getSystem());727 execution.setRobotProviderSessionID(session1);728 break;729 }730 } else { // We don't execute the testcase linked with condition.731 MessageGeneral mes;732 // Update Execution status from condition733 if (conditionAnswerTc.getResultMessage().getMessage().getCodeString().equals("PE")) {734 mes = new MessageGeneral(MessageGeneralEnum.EXECUTION_NE_CONDITION);735 } else {736 mes = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA_CONDITION);737 }738 mes.setDescription(mes.getDescription().replace("%COND%", execution.getConditionOperator())739 .replace("%MES%", conditionAnswerTc.getResultMessage().getDescription()));740 execution.setResultMessage(mes);741 }742 }743 } catch (CerberusException ex) {744 // If an exception is found, set the execution to FA and print the exception (only in debug mode)745 MessageGeneral messageFin = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA);746 messageFin.setDescription(messageFin.getDescription() + " " + ex.getMessageError().getDescription());747 execution.setResultMessage(messageFin);748 LOG.debug("{}Exception found Executing Test {} : {}", logPrefix, execution.getId(), ex.getMessageError().getDescription());749 } catch (Exception ex) {750 // If an exception is found, set the execution to FA and print the exception751 MessageGeneral messageFin = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA);752 messageFin.setDescription(messageFin.getDescription() + " " + ex.getMessage());753 execution.setResultMessage(messageFin);754 execution.setControlMessage(execution.getControlMessage() + " Exception: " + ex);755 LOG.error("{}Exception found Executing Test {}", logPrefix, execution.getId(), ex);756 } finally {757 // We stop the server session here (selenium for ex.).758 try {759 if (videoRecorder != null) {760 videoRecorder.endRecordVideo();761 }762 execution = this.stopTestCase(execution);763 } catch (Exception ex) {764 LOG.error("{}Exception Stopping Test {} Exception: {}", logPrefix, execution.getId(), ex.toString(), ex);765 }766 // Log Execution767 if ((execution.getVerbose() > 0) && parameterService.getParameterBooleanByKey("cerberus_executionlog_enable", execution.getSystem(), false)) {768 LOG.info(execution.toJson(false));769 }770 // Clean memory771 try {772 executionUUID.removeExecutionUUID(execution.getExecutionUUID());773 LOG.debug("{}Clean ExecutionUUID", logPrefix);774 } catch (Exception ex) {775 LOG.error("{}Exception cleaning Memory: {}", logPrefix, ex.toString(), ex);776 }777 // Credit Limit increase778 sessionCounter.incrementCreditLimitNbExe();779 long durationinSecond = (execution.getEnd() - execution.getStart()) / 1000;780 if ((durationinSecond > 0) && (durationinSecond <= 1000000)) {781 sessionCounter.incrementCreditLimitSecondExe((int) durationinSecond);782 }783 // Log execution is finished784 LOG.info("Execution Finished : UUID={} ID={} RC={} TestName={}.{}.{}.{}.{}_{}_{}",785 execution.getExecutionUUID(),786 execution.getId(),787 execution.getControlStatus(),788 execution.getEnvironment(),789 execution.getCountry(),790 execution.getBuild(),791 execution.getRevision(),792 execution.getTest(),793 execution.getTestCase(),794 execution.getTestCaseObj().getDescription().replace(".", ""));795 // Retry management, in case the result is not (OK or NE), we execute the job again reducing the retry to 1.796 boolean willBeRetried = retriesService.manageRetries(execution);797 // Updating queue to done status only for execution from queue798 if (execution.getQueueID() != 0) {799 executionQueueService.updateToDone(execution.getQueueID(), "", runID);800 }801 // Trigger the necessary Event for WebHook and notification management.802 eventService.triggerEvent(EventHook.EVENTREFERENCE_EXECUTION_END, execution, null, null, null);803 if (!willBeRetried) {804 eventService.triggerEvent(EventHook.EVENTREFERENCE_EXECUTION_END_LASTRETRY, execution, null, null, null);805 }806 // JIRA XRay Connector is triggered at the end of every execution..807 if (!willBeRetried) {808 xRayService.createXRayTestExecution(execution);809 }810 /*811 * After every execution finished, <br>812 * if the execution has a tag that has a campaign associated <br>813 * and no more executions are in the queue, <br>814 * we trigger : <br>815 * 1/ The update of the EndExeQueue of the tag <br>816 * 2/ We notify the Distribution List with execution report status817 */818 tagService.manageCampaignEndOfExecution(execution.getTag());819 /*820 * Dependency management, At the end of the execution, we RELEASE821 * the corresponding dependencies and put corresponding Queue822 * entries to QUEUED status.823 */824 if (!willBeRetried) {825 testCaseExecutionQueueDepService.manageDependenciesEndOfExecution(execution);826 }827 // After every execution finished we try to trigger more from the queue;-).828 executionThreadPoolService.executeNextInQueueAsynchroneously(false);829 }830 return execution;831 }832 // Update Execution status and eventually push the new value to websocket.833 private void updateExecution(TestCaseExecution execution, boolean forcePush) {834 try {835 testCaseExecutionService.updateTCExecution(execution);836 } catch (CerberusException ex) {837 LOG.warn(ex);838 }839 updateExecutionWebSocketOnly(execution, forcePush);840 }841 private void updateExecutionWebSocketOnly(TestCaseExecution execution, boolean forcePush) {842 // Websocket --> we refresh the corresponding Detail Execution pages attached to this execution.843 if (execution.isCerberus_featureflipping_activatewebsocketpush()) {844 TestCaseExecutionEndPoint.getInstance().send(execution, forcePush);845 }846 }847 @Override848 public TestCaseExecution stopTestCase(TestCaseExecution execution) {849 // Stop Execution850 LOG.debug("{} - Stop the execution {} UUID: {}", execution.getId(), execution.getId(), execution.getExecutionUUID());851 try {852 this.stopExecutionRobotAndProxy(execution);853 } catch (Exception ex) {854 LOG.warn("Exception Stopping Execution {} Exception : {}", execution.getId(), ex.toString(), ex);855 }856 // Saving TestCaseExecution object.857 execution.setEnd(new Date().getTime());858 try {859 testCaseExecutionService.updateTCExecution(execution);860 } catch (CerberusException ex) {861 LOG.warn("Exception updating Execution : {} Exception: {}", execution.getId(), ex.toString());862 }863 // Websocket --> we refresh the corresponding Detail Execution pages attached to this execution.864 if (execution.isCerberus_featureflipping_activatewebsocketpush()) {865 TestCaseExecutionEndPoint.getInstance().send(execution, true);866 TestCaseExecutionEndPoint.getInstance().end(execution);867 }868 return execution;869 }870 private TestCaseStepExecution executeStep(TestCaseStepExecution stepExecution, TestCaseExecution execution) {871 long runID = stepExecution.getId();872 String logPrefix = runID + " - ";873 AnswerItem<String> answerDecode;874 // Initialise the Step Data List.875 List<TestCaseExecutionData> myStepDataList = new ArrayList<>();876 stepExecution.setTestCaseExecutionDataList(myStepDataList);877 // Initialise the Data List used to enter the action.878 // Iterate Actions879 List<TestCaseStepAction> testCaseStepActionList = stepExecution.getTestCaseStep().getActions();880 LOG.debug("{}Getting list of actions of the step. {} action(s) to perform.", logPrefix, testCaseStepActionList.size());881 for (TestCaseStepAction testCaseStepAction : testCaseStepActionList) {882 // Start Execution of TestCaseStepAction883 long startAction = new Date().getTime();884 DateFormat df = new SimpleDateFormat(DateUtil.DATE_FORMAT_TIMESTAMP);885 long startLongAction = Long.parseLong(df.format(startAction));886 // Create and Register TestCaseStepActionExecution.887 TestCaseStepActionExecution actionExecution = factoryTestCaseStepActionExecution.create(888 stepExecution.getId(), testCaseStepAction.getTest(), testCaseStepAction.getTestcase(),889 testCaseStepAction.getStepId(), stepExecution.getIndex(), testCaseStepAction.getActionId(), testCaseStepAction.getSort(), null, null,890 testCaseStepAction.getConditionOperator(), testCaseStepAction.getConditionValue1(), testCaseStepAction.getConditionValue2(), testCaseStepAction.getConditionValue3(),891 testCaseStepAction.getConditionValue1(), testCaseStepAction.getConditionValue2(), testCaseStepAction.getConditionValue3(),892 testCaseStepAction.getAction(), testCaseStepAction.getValue1(), testCaseStepAction.getValue2(), testCaseStepAction.getValue3(), testCaseStepAction.getValue1(),893 testCaseStepAction.getValue2(), testCaseStepAction.getValue3(),894 (testCaseStepAction.isFatal() ? "Y" : "N"), startAction, startAction, startLongAction, startLongAction, new MessageEvent(MessageEventEnum.ACTION_PENDING),895 testCaseStepAction.getDescription(), testCaseStepAction, stepExecution);896 actionExecution.setOptions(testCaseStepAction.getOptionsActive());897 actionExecution.setConditionOptions(testCaseStepAction.getConditionOptionsActive());898 this.testCaseStepActionExecutionService.insertTestCaseStepActionExecution(actionExecution, execution.getSecrets());899 // We populate the TestCase Action List900 stepExecution.addActionExecutionList(actionExecution);901 // If execution is not manual, evaluate the condition at the action level902 AnswerItem<Boolean> conditionAnswer;903 boolean conditionDecodeError = false;904 if (!execution.getManualExecution().equals("Y")) {905 try {906 answerDecode = variableService.decodeStringCompletly(actionExecution.getConditionVal1(), execution, null, false);907 actionExecution.setConditionVal1(answerDecode.getItem());908 if (!(answerDecode.isCodeStringEquals("OK"))) {909 // If anything wrong with the decode --> we stop here with decode message in the action result.910 actionExecution.setActionResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Action Condition Value1"));911 actionExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));912 actionExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());913 actionExecution.setEnd(new Date().getTime());914 LOG.debug("{}Action interrupted due to decode 'Action Condition Value1' Error.", logPrefix);915 conditionDecodeError = true;916 }917 } catch (CerberusEventException cex) {918 LOG.warn(cex);919 }920 try {921 answerDecode = variableService.decodeStringCompletly(actionExecution.getConditionVal2(), execution, null, false);922 actionExecution.setConditionVal2(answerDecode.getItem());923 if (!(answerDecode.isCodeStringEquals("OK"))) {924 // If anything wrong with the decode --> we stop here with decode message in the action result.925 actionExecution.setActionResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Action Condition Value2"));926 actionExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));927 actionExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());928 actionExecution.setEnd(new Date().getTime());929 LOG.debug("{}Action interrupted due to decode 'Action Condition Value2' Error.", logPrefix);930 conditionDecodeError = true;931 }932 } catch (CerberusEventException cex) {933 LOG.warn(cex);934 }935 try {936 answerDecode = variableService.decodeStringCompletly(actionExecution.getConditionVal3(), execution, null, false);937 actionExecution.setConditionVal3(answerDecode.getItem());938 if (!(answerDecode.isCodeStringEquals("OK"))) {939 // If anything wrong with the decode --> we stop here with decode message in the action result.940 actionExecution.setActionResultMessage(answerDecode.getResultMessage().resolveDescription("FIELD", "Action Condition Value3"));941 actionExecution.setExecutionResultMessage(new MessageGeneral(answerDecode.getResultMessage().getMessage()));942 actionExecution.setStopExecution(answerDecode.getResultMessage().isStopTest());943 actionExecution.setEnd(new Date().getTime());944 LOG.debug("{}Action interrupted due to decode 'Action Condition Value3' Error.", logPrefix);945 conditionDecodeError = true;946 }947 } catch (CerberusEventException cex) {948 LOG.warn(cex);949 }950 }951 if (!(conditionDecodeError)) {952 ConditionOperatorEnum actionConditionOperatorEnum = ConditionOperatorEnum.getConditionOperatorEnumFromString(actionExecution.getConditionOperator());953 conditionAnswer = this.conditionService.evaluateCondition(actionExecution.getConditionOperator(),954 actionExecution.getConditionVal1(), actionExecution.getConditionVal2(), actionExecution.getConditionVal3(),955 execution, actionExecution.getConditionOptions());956 boolean doExecuteAction = conditionAnswer.getItem();957 if (execution.getManualExecution().equals("Y") && actionConditionOperatorEnum.isOperatorEvaluationRequired()) {958 actionExecution.setDescription(actionExecution.getDescription() + " - " + conditionAnswer.getMessageDescription());959 }960 // If condition OK or if manual execution, then execute the action961 if (conditionAnswer.getResultMessage().getMessage().getCodeString().equals("PE")962 || execution.getManualExecution().equals("Y")) {963 // Execute or not the action here.964 if (doExecuteAction || execution.getManualExecution().equals("Y")) {965 LOG.debug("Executing action : {} with val1 : {} and val2 : {} and val3 : {}",966 actionExecution.getAction(),967 actionExecution.getValue1(),968 actionExecution.getValue2(),969 actionExecution.getValue3());970 // We execute the Action971 actionExecution = this.executeAction(actionExecution, execution);972 // If Action or property reported to stop the testcase, we stop it and update the step with the message.973 stepExecution.setStopExecution(actionExecution.isStopExecution());974 if ((!(actionExecution.getExecutionResultMessage().equals(new MessageGeneral(MessageGeneralEnum.EXECUTION_OK))))975 && (!(actionExecution.getExecutionResultMessage().equals(new MessageGeneral(MessageGeneralEnum.EXECUTION_PE_TESTEXECUTING))))) {976 stepExecution.setExecutionResultMessage(actionExecution.getExecutionResultMessage());977 stepExecution.setStepResultMessage(actionExecution.getActionResultMessage());978 }979 if (actionExecution.isStopExecution()) {980 break;981 }982 } else {983 // We don't execute the action and record a generic execution.984 // Record Screenshot, PageSource985 actionExecution.addFileList(recorderService.recordExecutionInformationAfterStepActionAndControl(actionExecution, null));986 LOG.debug("Registering Action : {}", actionExecution.getAction());987 // We change the Action message only if the action is not executed due to condition.988 MessageEvent actionMes = new MessageEvent(MessageEventEnum.CONDITION_TESTCASEACTION_NOTEXECUTED);989 actionExecution.setActionResultMessage(actionMes);990 actionExecution.setReturnMessage(actionExecution.getReturnMessage()991 .replace("%COND%", actionExecution.getConditionOperator())992 .replace("%MESSAGE%", conditionAnswer.getResultMessage().getDescription())993 );994 actionExecution.setEnd(new Date().getTime());995 this.testCaseStepActionExecutionService.updateTestCaseStepActionExecution(actionExecution, execution.getSecrets());996 LOG.debug("{}Registered Action", logPrefix);997 }998 } else {999 // Error when performing the condition evaluation. We force no execution (false)1000 MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA_CONDITION);1001 mes.setDescription(mes.getDescription()1002 .replace("%COND%", actionExecution.getConditionOperator())1003 .replace("%AREA%", "action ")1004 .replace("%MES%", conditionAnswer.getResultMessage().getDescription()));1005 actionExecution.setExecutionResultMessage(mes);1006 stepExecution.setExecutionResultMessage(actionExecution.getExecutionResultMessage());1007 actionExecution.setActionResultMessage(new MessageEvent(MessageEventEnum.CONDITION_TESTCASEACTION_FAILED)1008 .resolveDescription("AREA", "")1009 .resolveDescription("COND", actionExecution.getConditionOperator())1010 .resolveDescription("MESSAGE", conditionAnswer.getResultMessage().getDescription()));1011 stepExecution.setStepResultMessage(new MessageEvent(MessageEventEnum.CONDITION_TESTCASESTEP_FAILED)1012 .resolveDescription("AREA", "action ")1013 .resolveDescription("COND", actionExecution.getConditionOperator())1014 .resolveDescription("MESSAGE", conditionAnswer.getResultMessage().getDescription()));1015 if (actionExecution.isFatal().equals("N")) {1016 actionExecution.setStopExecution(false);1017 MessageEvent actionMes = actionExecution.getActionResultMessage();1018 actionMes.setDescription(actionExecution.getActionResultMessage().getDescription() + " -- Execution forced to continue.");1019 actionExecution.setActionResultMessage(actionMes);1020 } else {1021 actionExecution.setStopExecution(true);1022 }1023 stepExecution.setStopExecution(actionExecution.isStopExecution());1024 actionExecution.setEnd(new Date().getTime());1025 this.testCaseStepActionExecutionService.updateTestCaseStepActionExecution(actionExecution, execution.getSecrets());1026 LOG.debug("{}Action interrupted due to condition error.", logPrefix);1027 // We stop any further Action execution.1028 if (actionExecution.isStopExecution()) {1029 break;1030 }1031 }1032 } else {1033 actionExecution.setEnd(new Date().getTime());1034 stepExecution.setExecutionResultMessage(actionExecution.getExecutionResultMessage());1035 stepExecution.setStepResultMessage(actionExecution.getActionResultMessage());1036 stepExecution.setStopExecution(actionExecution.isStopExecution());1037 this.testCaseStepActionExecutionService.updateTestCaseStepActionExecution(actionExecution, execution.getSecrets());1038 LOG.debug("{}Registered Action", logPrefix);1039 if (actionExecution.isStopExecution()) {1040 break;1041 }1042 }1043 // Log TestCaseStepActionExecution1044 if ((execution.getVerbose() > 0) && parameterService.getParameterBooleanByKey("cerberus_executionlog_enable", execution.getSystem(), false)) {1045 LOG.info(actionExecution.toJson(false, true, execution.getSecrets()));1046 }1047 }1048 stepExecution.setEnd(new Date().getTime());1049 this.testCaseStepExecutionService.updateTestCaseStepExecution(stepExecution, execution.getSecrets());1050 updateExecutionWebSocketOnly(execution, false);1051 return stepExecution;1052 }1053 private TestCaseStepActionExecution executeAction(TestCaseStepActionExecution actionExecution, TestCaseExecution execution) {1054 LOG.debug("Starting execute Action : {}", actionExecution.getAction());1055 AnswerItem<String> answerDecode;1056 // If execution is not manual, do action and record files1057 if (!execution.getManualExecution().equals("Y")) {1058 actionExecution = this.actionService.doAction(actionExecution);1059 // Record Screenshot, PageSource1060 try {1061 actionExecution.addFileList(recorderService.recordExecutionInformationAfterStepActionAndControl(actionExecution, null));1062 } catch (Exception ex) {1063 LOG.warn("Unable to record Screenshot/PageSource : {}", ex.toString(), ex);1064 }1065 } else {1066 // If execution manual, set Action result message as notExecuted1067 actionExecution.setActionResultMessage(new MessageEvent(MessageEventEnum.ACTION_WAITINGFORMANUALEXECUTION));1068 actionExecution.setExecutionResultMessage(new MessageGeneral(MessageGeneralEnum.EXECUTION_WE));1069 actionExecution.setEnd(new Date().getTime());1070 }1071 // Register Action in database1072 LOG.debug("Registering Action : {}", actionExecution.getAction());1073 this.testCaseStepActionExecutionService.updateTestCaseStepActionExecution(actionExecution, execution.getSecrets());1074 LOG.debug("Registered Action");1075 if (actionExecution.isStopExecution()) {1076 return actionExecution;1077 }1078 // If Action setXXContent is not executed, we don't execute the corresponding controls.1079 if (actionExecution.getActionResultMessage().getCodeString().equals("NE")1080 && (actionExecution.getAction().equals(TestCaseStepAction.ACTION_SETNETWORKTRAFFICCONTENT)1081 || actionExecution.getAction().equals(TestCaseStepAction.ACTION_SETSERVICECALLCONTENT)1082 || actionExecution.getAction().equals(TestCaseStepAction.ACTION_SETCONSOLECONTENT)1083 || actionExecution.getAction().equals(TestCaseStepAction.ACTION_SETCONTENT))) {1084 return actionExecution;1085 }1086 //As controls are associated with an action, the current state for the action is stored in order to restore it1087 //if some property is not defined for the country1088 MessageEvent actionMessage = actionExecution.getActionResultMessage();1089 MessageGeneral executionResultMessage = actionExecution.getExecutionResultMessage();1090 // Iterate Control1091 List<TestCaseStepActionControl> tcsacList = actionExecution.getTestCaseStepAction().getControls();1092 for (TestCaseStepActionControl control : tcsacList) {1093 // Start Execution of TestCAseStepActionControl1094 long startControl = new Date().getTime();1095 DateFormat df = new SimpleDateFormat(DateUtil.DATE_FORMAT_TIMESTAMP);1096 long startLongControl = Long.parseLong(df.format(startControl));1097 // Create and Register TestCaseStepActionControlExecution1098 LOG.debug("Creating TestCaseStepActionControlExecution");1099 TestCaseStepActionControlExecution controlExecution1100 = factoryTestCaseStepActionControlExecution.create(actionExecution.getId(), control.getTest(), control.getTestcase(),1101 control.getStepId(), actionExecution.getIndex(), control.getActionId(), control.getControlId(), control.getSort(),1102 null, null,1103 control.getConditionOperator(), control.getConditionValue1(), control.getConditionValue2(), control.getConditionValue3(), control.getConditionValue1(), control.getConditionValue2(), control.getConditionValue3(),1104 control.getControl(), control.getValue1(), control.getValue2(), control.getValue3(), control.getValue1(), control.getValue2(),1105 control.getValue3(), (control.isFatal() ? "Y" : "N"), startControl, startControl, startLongControl, startLongControl,1106 control.getDescription(), actionExecution, new MessageEvent(MessageEventEnum.CONTROL_PENDING));1107 controlExecution.setConditionOptions(control.getConditionOptionsActive());1108 controlExecution.setOptions(control.getOptionsActive());1109 this.testCaseStepActionControlExecutionService.insertTestCaseStepActionControlExecution(controlExecution, execution.getSecrets());1110 LOG.debug("Executing control : {} type : {}", controlExecution.getControlId(), controlExecution.getControl());1111 // We populate the TestCase Control List1112 actionExecution.addTestCaseStepActionExecutionList(controlExecution);1113 // Evaluate the condition at the control level.1114 AnswerItem<Boolean> conditionAnswer;1115 boolean conditionDecodeError = false;1116 if (!execution.getManualExecution().equals("Y")) {1117 try {1118 answerDecode = variableService.decodeStringCompletly(controlExecution.getConditionVal1(), execution, null, false);1119 controlExecution.setConditionVal1(answerDecode.getItem());1120 if (!(answerDecode.isCodeStringEquals("OK"))) {1121 // If anything wrong with the decode --> we stop here with decode message in the action result....

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Cerberus-source automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in TestCaseExecution

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful