public boolean runPrerequestScript(PostmanRequest request, PostmanRunResult runResult) {
    if (request.preRequestScript == null || request.preRequestScript.isEmpty()) {
      return true;
    }
    Context cx = Context.enter();
    String testName = "---------------------> POSTMAN test: ";
    boolean isSuccessful = false;
    try {
      Scriptable scope = cx.initStandardObjects();
      PostmanJsVariables jsVar = new PostmanJsVariables(cx, scope, this.var.getEnv());
      // jsVar.prepare(httpResponse);
      jsVar.prepare(null);

      // Evaluate the test script
      cx.evaluateString(scope, request.preRequestScript, testName, 1, null);
      // The results are in the jsVar.tests ???? variable

      // Extract any generated environment variables during the js run.
      jsVar.extractEnvironmentVariables();
      isSuccessful = true;
    } finally {
      Context.exit();
    }
    return isSuccessful;
  }
  /**
   * @param request
   * @param httpResponse
   * @return true if all tests pass, false otherwise
   */
  public boolean evaluateTests(
      PostmanRequest request, ResponseEntity<String> httpResponse, PostmanRunResult runResult) {
    if (request.tests == null || request.tests.isEmpty()) {
      return true;
    }
    Context cx = Context.enter();
    String testName = "---------------------> POSTMAN test";
    boolean isSuccessful = false;
    try {
      Scriptable scope = cx.initStandardObjects();
      PostmanJsVariables jsVar = new PostmanJsVariables(cx, scope, this.var.getEnv());
      jsVar.prepare(httpResponse);

      // Evaluate the test script
      cx.evaluateString(scope, request.tests, testName, 1, null);
      // The results are in the jsVar.tests variable

      // Extract any generated environment variables during the js run.
      jsVar.extractEnvironmentVariables();
      isSuccessful = true;
      boolean hasFailure = false;
      for (Map.Entry e : jsVar.tests.entrySet()) {
        runResult.totalTest++;

        String strVal = e.getValue().toString();
        if ("false".equalsIgnoreCase(strVal)) {
          hasFailure = true;
          runResult.failedTest++;
          runResult.failedTestName.add(request.name + "." + e.getKey().toString());
          isSuccessful = false;
        }

        System.out.println(testName + ": " + e.getKey() + " - " + e.getValue());
      }
      if (hasFailure) {
        System.out.println("=====THERE ARE TEST FAILURES=====");
        System.out.println("========TEST========");
        System.out.println(request.tests);
        System.out.println("========TEST========");
        System.out.println("========RESPONSE========");
        System.out.println(httpResponse.getStatusCode());
        System.out.println(httpResponse.getBody());
        System.out.println("========RESPONSE========");
        System.out.println("=====THERE ARE TEST FAILURES=====");
      }
    } catch (Throwable t) {
      isSuccessful = false;
      System.out.println("=====FAILED TO EVALUATE TEST AGAINST SERVER RESPONSE======");
      System.out.println("========TEST========");
      System.out.println(request.tests);
      System.out.println("========TEST========");
      System.out.println("========RESPONSE========");
      System.out.println(httpResponse.getStatusCode());
      System.out.println(httpResponse.getBody());
      System.out.println("========RESPONSE========");
      System.out.println("=====FAILED TO EVALUATE TEST AGAINST SERVER RESPONSE======");
    } finally {
      Context.exit();
    }
    return isSuccessful;
  }