【问题标题】:Caused by: com.intuit.karate.exception.KarateException: ReferenceError: "XMLHttpRequest" is not defined Exception in Karate config js file引起:com.intuit.karate.exception.KarateException:ReferenceError:“XMLHttpRequest”未定义空手道配置js文件中的异常
【发布时间】:2018-11-26 12:08:17
【问题描述】:

我想从服务器加载我的配置,但是当我正在使用时

XMLHttpRequest 我收到异常

ava.lang.RuntimeException:“karate-config.js”评估失败 在 com.intuit.karate.ScenarioContext.(ScenarioContext.java:211) 在 com.intuit.karate.StepActions.(StepActions.java:50) 在 com.intuit.karate.core.FeatureExecutionUnit.submit(FeatureExecutionUnit.java:85) 在 com.intuit.karate.cucumber.CucumberRunner.callAsync(CucumberRunner.java:191) 在 com.intuit.karate.gatling.KarateAction.execute(KarateAction.scala:62) 在 io.gatling.core.action.Action.$bang(Action.scala:35) 在 io.gatling.core.action.Action.$bang$(Action.scala:35) 在 com.intuit.karate.gatling.KarateAction.io$gatling$core$action$ChainableAction$$super$$bang(KarateAction.scala:26) 在 io.gatling.core.action.ChainableAction.$bang(Action.scala:60) 在 io.gatling.core.action.ChainableAction.$bang$(Action.scala:58) 在 com.intuit.karate.gatling.KarateAction.io$gatling$core$action$ExitableAction$$super$$bang(KarateAction.scala:26) 在 io.gatling.core.action.ExitableAction.$bang(BlockExit.scala:137) 在 io.gatling.core.action.ExitableAction.$bang$(BlockExit.scala:135) 在 com.intuit.karate.gatling.KarateAction.$bang(KarateAction.scala:26) 在 io.gatling.core.controller.inject.Injector.startUser(Injector.scala:130) 在 io.gatling.core.controller.inject.Injector.injectUser(Injector.scala:140) 在 io.gatling.core.controller.inject.Injector.$anonfun$injectStreams$2(Injector.scala:120) 在 io.gatling.core.controller.inject.Injector.$anonfun$injectStreams$2$adapted(Injector.scala:120) 在 io.gatling.core.controller.inject.UserStream.withStream(Injector.scala:61) 在 io.gatling.core.controller.inject.Injector.$anonfun$injectStreams$1(Injector.scala:120) 在 scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234) 在 scala.collection.Iterator.foreach(Ite​​rator.scala:929) 在 scala.collection.Iterator.foreach$(Iterator.scala:929) 在 scala.collection.AbstractIterator.foreach(Ite​​rator.scala:1417) 在 scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:210) 在 scala.collection.TraversableLike.map(TraversableLike.scala:234) 在 scala.collection.TraversableLike.map$(TraversableLike.scala:227) 在 scala.collection.AbstractTraversable.map(Traversable.scala:104) 在 io.gatling.core.controller.inject.Injector.injectStreams(Injector.scala:120) 在 io.gatling.core.controller.inject.Injector.io$gatling$core$controller$inject$Injector$$inject(Injector.scala:106) 在 io.gatling.core.controller.inject.Injector$$anonfun$1.applyOrElse(Injector.scala:151) 在 io.gatling.core.controller.inject.Injector$$anonfun$1.applyOrElse(Injector.scala:148) 在 scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:34) 在 akka.actor.FSM.processEvent(FSM.scala:665) 在 akka.actor.FSM.processEvent$(FSM.scala:662) 在 io.gatling.core.controller.inject.InjectorFSM.processEvent(InjectorFSM.scala:34) 在 akka.actor.FSM.akka$actor$FSM$$processMsg(FSM.scala:659) 在 akka.actor.FSM$$anonfun$receive$1.applyOrElse(FSM.scala:653) 在 akka.actor.Actor.aroundReceive(Actor.scala:514) 在 akka.actor.Actor.aroundReceive$(Actor.scala:512) 在 io.gatling.core.akka.BaseActor.aroundReceive(BaseActor.scala:23) 在 akka.actor.ActorCell.receiveMessage(ActorCell.scala:527) 在 akka.actor.ActorCell.invoke(ActorCell.scala:496) 在 akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) 在 akka.dispatch.Mailbox.run(Mailbox.scala:224) 在 akka.dispatch.Mailbox.exec(Mailbox.scala:234) 在 akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 在 akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 引起:com.intuit.karate.exception.KarateException:javascript 函数调用失败:ReferenceError:未定义“XMLHttpRequest” 在 com.intuit.karate.Script.evalFunctionCall(Script.java:1636) 在 com.intuit.karate.Script.call(Script.java:1587) 在 com.intuit.karate.Script.callAndUpdateConfigAndAlsoVarsIfMapReturned(Script.java:1709) 在 com.intuit.karate.ScenarioContext.(ScenarioContext.java:206)


我的配置文件代码:

function () {
    var System = Java.type('java.lang.System');
    var env = System.getProperty("profile");
    if (!env) {
        karate.log('env is not defined.')
        env = 'dev';
    }
    var request = new XMLHttpRequest();
    request.open("GET", "http://www.testsite.com",false);
    request.send();
    var result = request.responseText;
    console.log(result);
    return result
}

【问题讨论】:

  • 您是使用 Java 还是 JavaScript 进行编程?这是两种完全不相关(而且不兼容!)的语言,但看起来您已经将它们都放在了一个文件中。
  • 我正在使用空手道和加特林。

标签: javascript java karate


【解决方案1】:
var request = new XMLHttpRequest();

抱歉,这行不通。空手道仅支持 ES2015 和纯 JS。

还有:

request.open("GET", "http://www.testsite.com",false);

这完全没有必要,因为空手道的专长是发出 HTTP 请求!请更仔细地阅读文档。例如,您可以在 *.feature 文件中执行此操作:

Feature:

Scenario:
Given url 'http://www.testsite.com'
When method get
Then status 200
And def result = response
And print result

您确定必须在 karate-config.js 中执行此操作吗?听起来您对空手道完全陌生 - 但如果是这样,您可以这样做:var result = karate.call('my.feature');

【讨论】:

    【解决方案2】:

    我也有同样的问题。 因为我想在场景执行失败时发送通知,像这样:

    Feature:
    
      Background:
        * url baseApi
        * configure afterScenario =
        """
        function() {
          if (karate.info.errorMessage != null) {
            callback();
          }
        }
        """
        * configure retry = { count: 3, interval: 3000 }
    
      Scenario: get it (ERROR)
        * def input =
        """
        {
          'form': {
            'id': '123509638998',
            'td': '5xm6ksy6ty2jqam',
            'nd': '0'
          },
          'query': {
          }
        }
        """
        * path '/rest/n/list'
        * params input.query
        * form fields input.form
        * retry until responseStatus == 200
        * method post
        * match response contains { result: 1 }
    

    karate-config.js 这样:

    function() {
      karate.configure('connectTimeout', 5000);
      karate.configure('readTimeout', 5000);
      var url = 'http://127.0.0.1:8088';
      if (karate.properties['apiServer'] != '') {
        url = karate.properties['apiServer'];
      }
    
      var config = {
        apiBaseUrl: url,
        callback: function() {
          var url = 'https://x.y.z.com/api/send?access_token=257def70cab07fda4e93efeae04c497d';
    
          var data = JSON.stringify({
            'id': '123',
            'msgtype': 'text',
            'text':{
              'content': 'Test message...'
            }
          });
    
          fetch(url, {
            headers: { "Content-Type": "application/json; charset=utf-8" },
            method: 'POST',
            body: data
          })
        }
      };
    
      return config;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多