public void perform(WsdlTestCase testCase, Object param) { String name = UISupport.prompt("Specify name of TestCase", "Rename TestCase", testCase.getName()); if (name == null || name.equals(testCase.getName())) return; while (testCase.getTestSuite().getTestCaseByName(name.trim()) != null) { name = UISupport.prompt( "Specify unique name of TestCase", "Rename TestCase", testCase.getName()); if (name == null || name.equals(testCase.getName())) return; } testCase.setName(name); }
/** We need to check that we are not pointing at testcase in original testsuite */ public void afterCopy(WsdlTestSuite oldTestSuite, WsdlTestCase oldTestCase) { super.afterCopy(oldTestSuite, oldTestCase); if (targetTestCase != null && oldTestSuite == targetTestCase.getTestSuite()) { setTargetTestCase(getTestCase().getTestSuite().getTestCaseByName(targetTestCase.getName())); } }
/** * Runs the specified TestCase * * @param testCase the testcase to run * @param context */ protected void runTestCase(WsdlTestCase testCase) { try { log.info("Running TestCase [" + testCase.getName() + "]"); WsdlTestCaseRunner runner = testCase.run(new StringToObjectMap(), false); log.info( "TestCase [" + testCase.getName() + "] finished with status [" + runner.getStatus() + "] in " + (runner.getTimeTaken()) + "ms"); } catch (Exception e) { e.printStackTrace(); } }
private String createTitleForBorder() { WsdlTestCase targetTestCase = getModelItem().getTargetTestCase(); return "TestCase [" + (targetTestCase == null ? "- none selected -" : targetTestCase.getTestSuite().getName() + ":" + targetTestCase.getName()) + "] Run Properties"; }
public void perform(WsdlTestCase testCase, Object param) { if (dialog == null) { dialog = ADialogBuilder.buildDialog(Form.class); dialog .getFormField(Form.PROJECT) .addFormFieldListener( new XFormFieldListener() { public void valueChanged(XFormField sourceField, String newValue, String oldValue) { if (newValue.equals(CREATE_NEW_OPTION)) dialog.setOptions(Form.TESTSUITE, new String[] {CREATE_NEW_OPTION}); else { Project project = SoapUI.getWorkspace().getProjectByName(newValue); dialog.setOptions( Form.TESTSUITE, ModelSupport.getNames( project.getTestSuiteList(), new String[] {CREATE_NEW_OPTION})); } } }); dialog .getFormField(Form.CLONE_DESCRIPTION) .addFormFieldListener( new XFormFieldListener() { public void valueChanged(XFormField sourceField, String newValue, String oldValue) { if (dialog.getBooleanValue(Form.CLONE_DESCRIPTION)) { dialog.getFormField(Form.DESCRIPTION).setEnabled(false); } else { dialog.getFormField(Form.DESCRIPTION).setEnabled(true); } } }); } dialog.setBooleanValue(Form.MOVE, false); dialog.setBooleanValue(Form.CLONE_DESCRIPTION, true); dialog.getFormField(Form.DESCRIPTION).setEnabled(false); dialog.setValue(Form.DESCRIPTION, testCase.getDescription()); dialog.setValue(Form.NAME, "Copy of " + testCase.getName()); WorkspaceImpl workspace = testCase.getTestSuite().getProject().getWorkspace(); dialog.setOptions( Form.PROJECT, ModelSupport.getNames(workspace.getOpenProjectList(), new String[] {CREATE_NEW_OPTION})); dialog.setValue(Form.PROJECT, testCase.getTestSuite().getProject().getName()); dialog.setOptions( Form.TESTSUITE, ModelSupport.getNames( testCase.getTestSuite().getProject().getTestSuiteList(), new String[] {CREATE_NEW_OPTION})); dialog.setValue(Form.TESTSUITE, testCase.getTestSuite().getName()); boolean hasLoadTests = testCase.getLoadTestCount() > 0; dialog.setBooleanValue(Form.CLONE_LOADTESTS, hasLoadTests); dialog.getFormField(Form.CLONE_LOADTESTS).setEnabled(hasLoadTests); if (dialog.show()) { String targetProjectName = dialog.getValue(Form.PROJECT); String targetTestSuiteName = dialog.getValue(Form.TESTSUITE); String name = dialog.getValue(Form.NAME); WsdlProject project = testCase.getTestSuite().getProject(); WsdlTestSuite targetTestSuite = null; Set<Interface> requiredInterfaces = new HashSet<Interface>(); // to another project project? if (!targetProjectName.equals(project.getName())) { // get required interfaces for (int y = 0; y < testCase.getTestStepCount(); y++) { WsdlTestStep testStep = testCase.getTestStepAt(y); requiredInterfaces.addAll(testStep.getRequiredInterfaces()); } project = (WsdlProject) workspace.getProjectByName(targetProjectName); if (project == null) { targetProjectName = UISupport.prompt("Enter name for new Project", "Clone TestCase", ""); if (targetProjectName == null) return; try { project = workspace.createProject(targetProjectName, null); } catch (SoapUIException e) { UISupport.showErrorMessage(e); } if (project == null) return; } if (requiredInterfaces.size() > 0 && project.getInterfaceCount() > 0) { Map<String, Interface> bindings = new HashMap<String, Interface>(); for (Interface iface : requiredInterfaces) { bindings.put(iface.getTechnicalId(), iface); } for (Interface iface : project.getInterfaceList()) { bindings.remove(iface.getTechnicalId()); } requiredInterfaces.retainAll(bindings.values()); } if (requiredInterfaces.size() > 0) { String msg = "Target project [" + targetProjectName + "] is missing required Interfaces;\r\n\r\n"; for (Interface iface : requiredInterfaces) { msg += iface.getName() + " [" + iface.getTechnicalId() + "]\r\n"; } msg += "\r\nThese will be cloned to the targetProject as well"; if (!UISupport.confirm(msg, "Clone TestCase")) return; for (Interface iface : requiredInterfaces) { project.importInterface((AbstractInterface<?>) iface, true, true); } } } targetTestSuite = project.getTestSuiteByName(targetTestSuiteName); if (targetTestSuite == null) { targetTestSuiteName = UISupport.prompt( "Specify name for new TestSuite", "Clone TestCase", "Copy of " + testCase.getTestSuite().getName()); if (targetTestSuiteName == null) return; targetTestSuite = project.addNewTestSuite(targetTestSuiteName); } boolean move = dialog.getBooleanValue(Form.MOVE); WsdlTestCase newTestCase = targetTestSuite.importTestCase( testCase, name, -1, dialog.getBooleanValue(Form.CLONE_LOADTESTS), !move); UISupport.select(newTestCase); if (move) { testCase.getTestSuite().removeTestCase(testCase); } boolean cloneDescription = dialog.getBooleanValue(Form.CLONE_DESCRIPTION); if (!cloneDescription) { newTestCase.setDescription(dialog.getValue(Form.DESCRIPTION)); } } }
@Override String getCopyAfterInfo(WsdlMockResponse source, WsdlTestCase target) { return "Add MockResponse TestStep to TestCase [" + target.getName() + "]"; }
public void actionPerformed(ActionEvent e) { if (optionsDialog == null) { optionsDialog = ADialogBuilder.buildDialog(OptionsForm.class); optionsDialog .getFormField(OptionsForm.TESTSUITE) .addFormFieldListener( new XFormFieldListener() { public void valueChanged( XFormField sourceField, String newValue, String oldValue) { List<TestCase> testCaseList = project.getTestSuiteByName(newValue).getTestCaseList(); testCaseList.remove(getModelItem().getTestCase()); optionsDialog.setOptions( OptionsForm.TESTCASE, ModelSupport.getNames(testCaseList)); if (testCaseList.size() > 0) { WsdlTestCase testCase = project.getTestSuiteByName(newValue).getTestCaseAt(0); optionsDialog.setOptions( OptionsForm.RETURN_PROPERTIES, testCase.getPropertyNames()); ((XFormMultiSelectList) optionsDialog.getFormField(OptionsForm.RETURN_PROPERTIES)) .setSelectedOptions(getModelItem().getReturnProperties().toStringArray()); } } }); optionsDialog .getFormField(OptionsForm.TESTCASE) .addFormFieldListener( new XFormFieldListener() { public void valueChanged( XFormField sourceField, String newValue, String oldValue) { WsdlTestSuite testSuite = project.getTestSuiteByName(optionsDialog.getValue(OptionsForm.TESTSUITE)); WsdlTestCase testCase = testSuite.getTestCaseByName(newValue); optionsDialog.setOptions( OptionsForm.RETURN_PROPERTIES, testCase.getPropertyNames()); ((XFormMultiSelectList) optionsDialog.getFormField(OptionsForm.RETURN_PROPERTIES)) .setSelectedOptions(getModelItem().getReturnProperties().toStringArray()); } }); } WsdlTestCase targetTestCase = getModelItem().getTargetTestCase(); optionsDialog.setOptions( OptionsForm.TESTSUITE, ModelSupport.getNames(project.getTestSuiteList())); if (targetTestCase != null) { optionsDialog.setValue(OptionsForm.TESTSUITE, targetTestCase.getTestSuite().getName()); List<TestCase> testCaseList = targetTestCase.getTestSuite().getTestCaseList(); testCaseList.remove(getModelItem().getTestCase()); optionsDialog.setOptions(OptionsForm.TESTCASE, ModelSupport.getNames(testCaseList)); optionsDialog.setValue(OptionsForm.TESTCASE, targetTestCase.getName()); optionsDialog.setOptions(OptionsForm.RETURN_PROPERTIES, targetTestCase.getPropertyNames()); ((XFormMultiSelectList) optionsDialog.getFormField(OptionsForm.RETURN_PROPERTIES)) .setSelectedOptions(getModelItem().getReturnProperties().toStringArray()); } else { if (project.getTestSuiteCount() == 0) { optionsDialog.setOptions(OptionsForm.TESTCASE, new String[0]); optionsDialog.setOptions(OptionsForm.RETURN_PROPERTIES, new String[0]); } else { List<TestCase> testCaseList = project.getTestSuiteAt(0).getTestCaseList(); testCaseList.remove(getModelItem().getTestCase()); optionsDialog.setOptions(OptionsForm.TESTCASE, ModelSupport.getNames(testCaseList)); if (testCaseList.isEmpty()) optionsDialog.setOptions(OptionsForm.RETURN_PROPERTIES, new String[0]); else optionsDialog.setOptions( OptionsForm.RETURN_PROPERTIES, testCaseList.get(0).getPropertyNames()); } } switch (getModelItem().getRunMode().intValue()) { case RunTestCaseRunModeTypeConfig.INT_PARALLELL: optionsDialog.setValue( OptionsForm.RUN_MODE, OptionsForm.CREATE_ISOLATED_COPY_FOR_EACH_RUN); break; case RunTestCaseRunModeTypeConfig.INT_SINGLETON_AND_FAIL: optionsDialog.setValue(OptionsForm.RUN_MODE, OptionsForm.RUN_PRIMARY_TEST_CASE); break; case RunTestCaseRunModeTypeConfig.INT_SINGLETON_AND_WAIT: optionsDialog.setValue(OptionsForm.RUN_MODE, OptionsForm.RUN_SYNCHRONIZED_TESTCASE); break; } optionsDialog.setBooleanValue( OptionsForm.COPY_HTTP_SESSION, getModelItem().isCopyHttpSession()); optionsDialog.setBooleanValue( OptionsForm.COPY_LOADTEST_PROPERTIES, getModelItem().isCopyLoadTestProperties()); optionsDialog.setBooleanValue( OptionsForm.IGNORE_EMPTY_PROPERTIES, getModelItem().isIgnoreEmptyProperties()); if (optionsDialog.show()) { WsdlTestSuite testSuite = project.getTestSuiteByName(optionsDialog.getValue(OptionsForm.TESTSUITE)); getModelItem() .setTargetTestCase( testSuite == null ? null : testSuite.getTestCaseByName(optionsDialog.getValue(OptionsForm.TESTCASE))); getModelItem() .setReturnProperties( new StringList( ((XFormMultiSelectList) optionsDialog.getFormField(OptionsForm.RETURN_PROPERTIES)) .getSelectedOptions())); switch (optionsDialog.getValueIndex(OptionsForm.RUN_MODE)) { case 0: getModelItem().setRunMode(RunTestCaseRunModeTypeConfig.PARALLELL); break; case 1: getModelItem().setRunMode(RunTestCaseRunModeTypeConfig.SINGLETON_AND_FAIL); break; case 2: getModelItem().setRunMode(RunTestCaseRunModeTypeConfig.SINGLETON_AND_WAIT); break; } getModelItem() .setCopyHttpSession(optionsDialog.getBooleanValue(OptionsForm.COPY_HTTP_SESSION)); getModelItem() .setCopyLoadTestProperties( optionsDialog.getBooleanValue(OptionsForm.COPY_LOADTEST_PROPERTIES)); getModelItem() .setIgnoreEmptyProperties( optionsDialog.getBooleanValue(OptionsForm.IGNORE_EMPTY_PROPERTIES)); titledBorder.setTitle(createTitleForBorder()); } }
@Override public void afterStep( TestCaseRunner testRunner, TestCaseRunContext runContext, TestStepResult result) { super.afterStep(testRunner, runContext, result); TestStep currentStep = runContext.getCurrentStep(); if (currentStep instanceof Assertable) { Assertable requestStep = (Assertable) currentStep; for (int c = 0; c < requestStep.getAssertionCount(); c++) { TestAssertion assertion = requestStep.getAssertionAt(c); log.info("Assertion [" + assertion.getName() + "] has status " + assertion.getStatus()); if (assertion.getStatus() == AssertionStatus.FAILED) { for (AssertionError error : assertion.getErrors()) { log.error("ASSERTION FAILED -> " + error.getMessage()); } assertions.add(assertion); assertionResults.put(assertion, (WsdlTestStepResult) result); } testAssertionCount++; } } String countPropertyName = currentStep.getName() + " run count"; Long count = (Long) runContext.getProperty(countPropertyName); if (count == null) { count = new Long(0); } runContext.setProperty(countPropertyName, new Long(count.longValue() + 1)); if (result.getStatus() == TestStepStatus.FAILED || exportAll) { try { String exportSeparator = System.getProperty(SOAPUI_EXPORT_SEPARATOR, "-"); TestCase tc = currentStep.getTestCase(); String nameBase = StringUtils.createFileName(tc.getTestSuite().getName(), '_') + exportSeparator + StringUtils.createFileName(tc.getName(), '_') + exportSeparator + StringUtils.createFileName(currentStep.getName(), '_') + "-" + count.longValue() + "-" + result.getStatus(); WsdlTestCaseRunner callingTestCaseRunner = (WsdlTestCaseRunner) runContext.getProperty("#CallingTestCaseRunner#"); if (callingTestCaseRunner != null) { WsdlTestCase ctc = callingTestCaseRunner.getTestCase(); WsdlRunTestCaseTestStep runTestCaseTestStep = (WsdlRunTestCaseTestStep) runContext.getProperty("#CallingRunTestCaseStep#"); nameBase = StringUtils.createFileName(ctc.getTestSuite().getName(), '_') + exportSeparator + StringUtils.createFileName(ctc.getName(), '_') + exportSeparator + StringUtils.createFileName(runTestCaseTestStep.getName(), '_') + exportSeparator + StringUtils.createFileName(tc.getTestSuite().getName(), '_') + exportSeparator + StringUtils.createFileName(tc.getName(), '_') + exportSeparator + StringUtils.createFileName(currentStep.getName(), '_') + "-" + count.longValue() + "-" + result.getStatus(); } String absoluteOutputFolder = getAbsoluteOutputFolder(ModelSupport.getModelItemProject(tc)); String fileName = absoluteOutputFolder + File.separator + nameBase + ".txt"; if (result.getStatus() == TestStepStatus.FAILED) { log.error(currentStep.getName() + " failed, exporting to [" + fileName + "]"); } new File(fileName).getParentFile().mkdirs(); PrintWriter writer = new PrintWriter(fileName); result.writeTo(writer); writer.close(); // write attachments if (result instanceof MessageExchange) { Attachment[] attachments = ((MessageExchange) result).getResponseAttachments(); if (attachments != null && attachments.length > 0) { for (int c = 0; c < attachments.length; c++) { fileName = nameBase + "-attachment-" + (c + 1) + "."; Attachment attachment = attachments[c]; String contentType = attachment.getContentType(); if (!"application/octet-stream".equals(contentType) && contentType != null && contentType.indexOf('/') != -1) { fileName += contentType.substring(contentType.lastIndexOf('/') + 1); } else { fileName += "dat"; } fileName = absoluteOutputFolder + File.separator + fileName; FileOutputStream outFile = new FileOutputStream(fileName); Tools.writeAll(outFile, attachment.getInputStream()); outFile.close(); } } } exportCount++; } catch (Exception e) { log.error("Error saving failed result: " + e, e); } } testStepCount++; }