예제 #1
0
 public void afterStep(
     TestCaseRunner testRunner, TestCaseRunContext runContext, TestStepResult result) {
   TestStep currentStep = runContext.getCurrentStep();
   if (currentStep instanceof WsdlRunTestCaseTestStep) {
     ((WsdlRunTestCaseTestStep) currentStep).removeTestRunListener(this);
   }
 }
예제 #2
0
  public TestStepResult run(TestCaseRunner testRunner, TestCaseRunContext context) {
    SoapUI.ensureGroovyLog();

    WsdlTestStepResult result = new WsdlTestStepResult(this);
    Logger log = (Logger) context.getProperty("log");
    if (log == null) log = logger;

    try {
      if (scriptText.trim().length() > 0)
        synchronized (this) {
          scriptEngine.setVariable("context", context);
          scriptEngine.setVariable("testRunner", testRunner);
          scriptEngine.setVariable("log", log);

          result.setTimeStamp(System.currentTimeMillis());
          result.startTimer();
          scriptResult = scriptEngine.run();
          result.stopTimer();

          if (scriptResult != null) {
            result.addMessage("Script-result: " + scriptResult.toString());
            // FIXME The property should not me hard coded
            firePropertyValueChanged("result", null, String.valueOf(result));
          }
        }

      // testRunner status may have been changed by script..
      Status testRunnerStatus = testRunner.getStatus();
      if (testRunnerStatus == Status.FAILED) result.setStatus(TestStepStatus.FAILED);
      else if (testRunnerStatus == Status.CANCELED) result.setStatus(TestStepStatus.CANCELED);
      else result.setStatus(TestStepStatus.OK);
    } catch (Throwable e) {
      String errorLineNumber = GroovyUtils.extractErrorLineNumber(e);

      SoapUI.logError(e);
      result.stopTimer();
      result.addMessage(e.toString());
      if (errorLineNumber != null) result.addMessage("error at line: " + errorLineNumber);
      result.setError(e);
      result.setStatus(TestStepStatus.FAILED);
    } finally {
      if (!isForLoadTest())
        setIcon(result.getStatus() == TestStepStatus.FAILED ? failedIcon : okIcon);

      if (scriptEngine != null) scriptEngine.clearVariables();
    }

    return result;
  }
예제 #3
0
  @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++;
  }