Amar
Amar

Reputation: 621

Gatling fetching from csv file

I have created a Gatling simulation, by creating a ".har" file from Google Chrome. And I have changed input parameters & trying to fetch data from a ".csv" file. Now when I run the simulation, how can I check if Gatling simulation has fetched data fields from ".csv" file?

Upvotes: 0

Views: 3455

Answers (2)

rkarczmarczyk
rkarczmarczyk

Reputation: 325

Gatling has quite good error handling/logging connected to feeders.

  1. When you provide wrong file name or path of your feeder file you will get following error (java.lang.IllegalArgumentException: Could not locate feeder file). Note that tests will not run.

    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
    at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
    Caused by: java.lang.IllegalArgumentException: Could not locate feeder file: file gatling/src/test/resources/data/wrongFile.csv doesn't exist
    at io.gatling.core.feeder.FeederSupport$class.feederBuilder(FeederSupport.scala:53)
    at io.gatling.core.Predef$.feederBuilder(Predef.scala:22)
    at io.gatling.core.feeder.FeederSupport$class.separatedValues(FeederSupport.scala:44)
    at io.gatling.core.Predef$.separatedValues(Predef.scala:22)
    at io.gatling.core.feeder.FeederSupport$class.separatedValues(FeederSupport.scala:41)
    at io.gatling.core.Predef$.separatedValues(Predef.scala:22)
    at io.gatling.core.feeder.FeederSupport$class.csv(FeederSupport.scala:34)
    at io.gatling.core.Predef$.csv(Predef.scala:22)
    at com.scenario.Scenario.<init>(Scenario.scala:10)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at io.gatling.app.Gatling$.io$gatling$app$Gatling$$$anonfun$1(Gatling.scala:41)
    at io.gatling.app.Gatling.run(Gatling.scala:92)
    at io.gatling.app.Gatling.runIfNecessary(Gatling.scala:75)
    at io.gatling.app.Gatling.start(Gatling.scala:65)
    at io.gatling.app.Gatling$.start(Gatling.scala:57)
    at io.gatling.app.Gatling$.fromArgs(Gatling.scala:49)
    at io.gatling.app.Gatling$.main(Gatling.scala:43)
    at io.gatling.app.Gatling.main(Gatling.scala)
    
  2. When your attribute will not matched column name from feeder you will get following error. All tests will end with error.

    00:10:07.937 [ERROR] i.g.h.a.s.HttpRequestAction - 'httpRequest-1' failed to execute: No attribute named 'wrongAttributeName' is defined
    
  3. When you have empty file with feeder data you will get following error.

    java.lang.reflect.InvocationTargetException
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
       at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
    Caused by: java.lang.IllegalStateException: Feeder is now empty, stopping engine
       at io.gatling.core.action.SingletonFeed$$anonfun$receive$1.applyOrElse(SingletonFeed.scala:61)
       at akka.actor.Actor$class.aroundReceive(Actor.scala:482)
       at io.gatling.core.akka.BaseActor.aroundReceive(BaseActor.scala:23)
       at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
       at akka.actor.ActorCell.invoke(ActorCell.scala:495)
       at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
       at akka.dispatch.Mailbox.run(Mailbox.scala:224)
       at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
       at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
       at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
       at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
       at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
    

When non of this appear you can be almost sure that everything is ok. But to verify parameters send by Gatling you can check

  1. Gatling logs (change logging level to DEBUG) in logback.xml

    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
    </root>
    

    And then you will see log similar to

    00:13:53.233 [DEBUG] i.g.h.a.s.HttpTx$ - Sending request=Action name uri=http://your-rest-service?param1=value1&param2=value2: scenario=com.scenario.Scenario Scenario name, userId=1
    
  2. Access logs on your server. In Tomcat instruction you can get for example here

Upvotes: 1

Stephane Landelle
Stephane Landelle

Reputation: 7038

Temporarily lower logging level to DEBUG in conf/logback.xml, you'll see the requests that are being generated.

Upvotes: 3

Related Questions