title: I get "no simulations to run" error when I try to reuse a karate DSL test for Gatling performance testing
body: <p>At the moment I am creating a POC for Karate-Gatling integration. As we already have many Karate tests it is pretty straightforward to use Gatling for performance testing.</p>
  <p>Unfortunately, I always get the no simulation to run error message.</p>
  <p>I was searching for a solution both here and in the Q&amp;A section of the Karate DSL Udemy course, but the reason was always a typo. I have checked the code multiple times, even asked my colleague to check it, but I did not notice any typo.</p>
  <p>I would really appreciate it if you could help me.</p>
  <p>Here is the code:
  pom.xml</p>
  <pre><code>&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  
      &lt;groupId&gt;com.adamos.tests.common&lt;/groupId&gt;
      &lt;artifactId&gt;karate-api-tests&lt;/artifactId&gt;
      &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
      &lt;packaging&gt;jar&lt;/packaging&gt;
  
      &lt;properties&gt;
          &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
          &lt;maven.compiler.target&gt;17&lt;/maven.compiler.target&gt;
          &lt;maven.compiler.source&gt;17&lt;/maven.compiler.source&gt;
          &lt;java.version&gt;17&lt;/java.version&gt;
          &lt;maven.compiler.version&gt;3.6.0&lt;/maven.compiler.version&gt;
          &lt;karate.version&gt;1.2.0.RC1&lt;/karate.version&gt;
          &lt;gatling.version&gt;1.1.0&lt;/gatling.version&gt;
          &lt;gatling.plugin.version&gt;4.1.5&lt;/gatling.plugin.version&gt;
          &lt;maven.surefire.version&gt;2.22.2&lt;/maven.surefire.version&gt;
      &lt;/properties&gt;
      &lt;dependencies&gt;
          &lt;!--        &lt;dependency&gt;--&gt;
          &lt;!--            &lt;groupId&gt;com.intuit.karate&lt;/groupId&gt;--&gt;
          &lt;!--            &lt;artifactId&gt;karate-apache&lt;/artifactId&gt;--&gt;
          &lt;!--            &lt;version&gt;${karate.version}&lt;/version&gt;--&gt;
          &lt;!--            &lt;scope&gt;test&lt;/scope&gt;--&gt;
          &lt;!--        &lt;/dependency&gt;--&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;com.intuit.karate&lt;/groupId&gt;
              &lt;artifactId&gt;karate-junit5&lt;/artifactId&gt;
              &lt;version&gt;${karate.version}&lt;/version&gt;
              &lt;scope&gt;test&lt;/scope&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;org.jsoup&lt;/groupId&gt;
              &lt;artifactId&gt;jsoup&lt;/artifactId&gt;
              &lt;version&gt;1.14.3&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;!-- https://mvnrepository.com/artifact/net.masterthought/cucumber-reporting --&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;net.masterthought&lt;/groupId&gt;
              &lt;artifactId&gt;cucumber-reporting&lt;/artifactId&gt;
              &lt;version&gt;5.7.0&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;!-- https://mvnrepository.com/artifact/com.intuit.karate/karate-gatling --&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;com.intuit.karate&lt;/groupId&gt;
              &lt;artifactId&gt;karate-gatling&lt;/artifactId&gt;
              &lt;version&gt;${gatling.version}&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;io.gatling&lt;/groupId&gt;
              &lt;artifactId&gt;gatling-maven-plugin&lt;/artifactId&gt;
              &lt;version&gt;${gatling.plugin.version}&lt;/version&gt;
              &lt;type&gt;maven-plugin&lt;/type&gt;
          &lt;/dependency&gt;
  
      &lt;/dependencies&gt;
      &lt;build&gt;
          &lt;testResources&gt;
              &lt;testResource&gt;
                  &lt;directory&gt;src/test/java&lt;/directory&gt;
                  &lt;excludes&gt;
                      &lt;exclude&gt;**/*.java&lt;/exclude&gt;
                  &lt;/excludes&gt;
              &lt;/testResource&gt;
          &lt;/testResources&gt;
          &lt;plugins&gt;
              &lt;plugin&gt;
                  &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                  &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
                  &lt;version&gt;${maven.compiler.version}&lt;/version&gt;
                  &lt;configuration&gt;
                      &lt;encoding&gt;UTF-8&lt;/encoding&gt;
                      &lt;source&gt;${java.version}&lt;/source&gt;
                      &lt;target&gt;${java.version}&lt;/target&gt;
                      &lt;compilerArgument&gt;-Werror&lt;/compilerArgument&gt;
                  &lt;/configuration&gt;
              &lt;/plugin&gt;
              &lt;plugin&gt;
                  &lt;groupId&gt;io.gatling&lt;/groupId&gt;
                  &lt;artifactId&gt;gatling-maven-plugin&lt;/artifactId&gt;
                  &lt;version&gt;${gatling.plugin.version}&lt;/version&gt;
                  &lt;configuration&gt;
                      &lt;simulationsFolder&gt;src/test/java/com/adamos/tests/performance&lt;/simulationsFolder&gt;
                      &lt;configFolder&gt;src/test/java/com/adamos/tests/performance/data&lt;/configFolder&gt;
                  &lt;/configuration&gt;
              &lt;/plugin&gt;
          &lt;/plugins&gt;
      &lt;/build&gt;
  &lt;/project&gt;
  </code></pre>
  <p>SubscriptionsTest.scala</p>
  <pre><code>package com.adamos.tests.performance.permission_service.subscriptions
  
  import com.intuit.karate.gatling.PreDef.{karateFeature, karateProtocol}
  import io.gatling.core.Predef.{Simulation, constantUsersPerSec, scenario}
  
  import scala.concurrent.duration.DurationInt
  
  class PerfTest extends Simulation {
  
  //     val protocol = karateProtocol(
   //           //Merging the DELETE calls in the report
   //           &quot;/permissions/subscriptions/{id}&quot; -&gt; Nil
   //   )
      val protocol = karateProtocol()
  
  
      protocol.nameResolver = (req, ctx) =&gt; req.getHeader(&quot;karate-name&quot;)
      //protocol.runner.karateEnv(&quot;perf&quot;)
  
      //val tokenFeeder = Iterator.continually(Map(&quot;token&quot; -&gt; CreateTokens.getNextToken()))
  
      val create = scenario(&quot;Create, read, update, delete subscriptions&quot;)
          //.feed(tokenFeeder)
          .exec(karateFeature(&quot;classpath:com/adamos/tests/features/permission_service/subscriptions/subscriptions_crud.feature&quot;))
  
      setUp(
          create.inject(
              constantUsersPerSec(10) during (1 seconds),
              constantUsersPerSec(10) during (1 seconds) randomized,
              constantUsersPerSec(10) during (1 seconds)
              // nothingFor(2 seconds),  //Pause for a given duration.
              // atOnceUsers(5), //Injects a given number of users at once.
              // rampUsers(10) during (5 seconds), //Injects a given number of users distributed evenly on a time window of a given duration.
              // constantUsersPerSec(20) during (15 seconds), //Injects users at a constant rate, defined in users per second, during a given duration. Users will be injected at regular intervals.
              // constantUsersPerSec(20) during (15 seconds) randomized, //Injects users at a constant rate, defined in users per second, during a given duration. Users will be injected at randomized intervals.
              // rampUsersPerSec(10) to 20 during (10 minutes),  //Injects users from starting rate to target rate, defined in users per second, during a given duration. Users will be injected at regular intervals.
              // rampUsersPerSec(10) to 20 during (10 minutes) randomized, //Injects users from starting rate to target rate, defined in users per second, during a given duration. Users will be injected at randomized intervals.
  
          ).protocols(protocol)
      )
  
  }
  </code></pre>
  <p>subscriptions_crud.feature:</p>
  <pre><code>Feature: CRUD single subscription
  
  
    Background:
      * url baseUrl + '/permission-service/v0.1/subscriptions'
      * configure headers = ({'Authorization': tokens.adamosAdminToken})
  
      # define valid subscription
      * def subscription =
      &quot;&quot;&quot;
      {
        tenantId: #(credentials.tenantId),
        appId: adamos-client-test,
        enabled: false,
        additionalProvisioningAllowedCallbackUrls: [],
        additionalProvisioningAllowedLogoutUrls: [],
        additionalProvisioningAllowedWebOrigins: []
      }
      &quot;&quot;&quot;
  
    @key=ADMQ-1249
    Scenario: get, create, update, and delete a valid subscription as admin
      # create a subscription
      Given param admin = true
      And request subscription
      When method POST
      Then status 201
      # verify created subscription correctness
      And match $.tenant.id == subscription.tenantId
      And match $.app.id == subscription.appId
      And match $.enabled == subscription.enabled
      Then def createdSub = $
  
      # get created subscription
      Given param admin = true
      And path createdSub.id
      When method GET
      Then status 200
      And match $ contains createdSub
  
      # update subscription
      * set subscription.enabled = true
      Given param admin = true
      And path createdSub.id
      And request subscription
      When method PUT
      Then status 200
      * set createdSub.enabled = true
      And match $ contains createdSub
  
      # delete subscription
      Given param admin = true
      And path createdSub.id
      When method DELETE
      Then status 204
  
      # verify subscription is deleted
      Given param admin = true
      And path createdSub.id
      When method GET
      Then status 404
  
    # bug https://adamos.atlassian.net/browse/CSA-2693
    @ignore
    @key=ADMQ-1250
    Scenario: Get update and delete non existing subscriptions as admin
      # get subscription
      Given param admin = true
      And path &quot;error&quot;
      When method GET
      Then status 404
  
      # put subscription
      Given param admin = true
      Given path &quot;error&quot;
      Given request subscription
      When method PUT
      Then status 404
  
      # delete subscription
      Given param admin = true
      And path &quot;error&quot;
      When method DELETE
      Then status 404
  
    @key=ADMQ-1251
    Scenario: get, create, update, and delete are disabled for users
      # get subscription
      Given path &quot;irrelevant&quot;
      When method GET
      Then status 403
  
      # post subscription
      Given request subscription
      When method POST
      Then status 403
  
      # put subscription
      Given path &quot;irrelevant&quot;
      Given request subscription
      When method PUT
      Then status 403
  
      # delete subscription
      Given path &quot;irrelevant&quot;
      When method DELETE
      Then status 403
  
    @ignore
    @delete #called by other feature
    Scenario: delete a subscription by {id}
      # delete subscription
      Given param admin = true
      And path id
      When method DELETE
      Then status 204
  </code></pre>
  <p>Thanks in advance,
  Miki</p>