-1

I am trying to send karate.info object details to InfluxDB but when i am trying to call a java method in afterScenario it is throwing an error.

ignore: Code contains only connection call method.

Code:

* def inFluxDb = Java.type('utility.InfluxDBCall');
* configure afterScenario = 
"""
function(){
  var info = karate.info; 
  karate.log('after', info.scenarioType + ':', info.scenarioName);
  karate.log('after', info.scenarioType + ':', info.errorMessage);
  karate.log('after', info.scenarioType + ':', info.featureDir);
  karate.log('after', info.scenarioType + ':', info.featureFileName);
  karate.log('after', info.scenarioType + ':', info.scenarioDescription);
  inFluxDb.DBConnection("http://localhost:8086", "root", "root");
}
"""

Error:

19:43:52.318 [ForkJoinPool-1-worker-1] INFO com.intuit.karate - after Scenario:  
19:43:52.380 [ForkJoinPool-1-worker-1] ERROR com.intuit.karate - javascript function call failed: TypeError: inFluxDb.DBConnection is not a function
19:43:52.380 [ForkJoinPool-1-worker-1] ERROR com.intuit.karate - failed function body: function(){
  var info = karate.info; 
  karate.log('after', info.scenarioType + ':', info.scenarioName);
  karate.log('after', info.scenarioType + ':', info.errorMessage);
  karate.log('after', info.scenarioType + ':', info.featureDir);
  karate.log('after', info.scenarioType + ':', info.featureFileName);
  karate.log('after', info.scenarioType + ':', info.scenarioDescription);
  inFluxDb.DBConnection("http://localhost:8086", "root", "root");
}

used ' karate.call(inFluxDb.DBConnection("http://localhost:8086", "root", "root"));' as well but seeing same error. I have been seeing https://github.com/intuit/karate/blob/master/karate-core/src/test/java/com/intuit/karate/core/MandatoryTagHook.java, any thoughts on how to configure this class?

Java class used

public class InfluxDBCall {
    private static InfluxDB influxDB;

    public void DBConnection(String serverURL, String username, String password) {
         influxDB = InfluxDBFactory.connect(serverURL, username, password);
         influxDB.enableBatch(BatchOptions.DEFAULTS);

         System.out.println("Connection created");
    }

    public static void writeIntoDB(String Measurement,String featureName, String scenarioName, String status, String error) {
        influxDB.write(Point.measurement(Measurement)
                .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
                .tag("projectName","SPSAutomation")
                .tag("featureName", featureName.split(".")[0].toString())
                .addField("scenarioName", scenarioName)
                .addField("status", status)
                .addField("Error", error)
                .build());
    }

    public void connectionClose() {
        influxDB.close();
        System.out.println("Connection closed");
    }
}
Sandeep P
  • 109
  • 1
  • 10

1 Answers1

1

Can't say without seeing your Java code. Follow this process: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

But yes, for such complex things maybe you should use the ExecutionHook, you can find details here: https://stackoverflow.com/a/59080128/143475

Peter Thomas
  • 54,465
  • 21
  • 84
  • 248
  • Java Code: public class InfluxDBCall { private static InfluxDB influxDB; public void DBConnection(String serverURL, String username, String password) { influxDB = InfluxDBFactory.connect(serverURL, username, password); influxDB.enableBatch(BatchOptions.DEFAULTS); System.out.println("Connection created"); } – Sandeep P Apr 18 '20 at 14:50
  • I was unable to post total code in comments, Here is the exact code on original post. – Sandeep P Apr 18 '20 at 15:11
  • @SandeepPadala there are reasons for the process: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue#faq - but maybe someone else will help you, all the best – Peter Thomas Apr 18 '20 at 15:33
  • 1
    ExecutionHook gonna help me, Thanks for fast reply!! – Sandeep P Apr 18 '20 at 15:43