@karate 如何在加特林模拟 class 中将参数传递给特征文件?

@karate How to pass parameter to a feature file in gatling simulation class?

让我们考虑一个场景,我们必须 运行 "create an account api" 的性能测试,它接受输入作为 header/path 参数 "Auth token" 和输入数据,如用户帐户名。因此,对于上述情况,我们有 2 个特征文件,

到 运行 POST http://baseUrl/auth_param/create/input_data 的性能测试 1. 一个特征文件(例如:generateAuth.feature)将具有授权 令牌 2.以参数为参数的第二个特征(createAccount.feature)文件 授权令牌,输入数据。

这是我的模拟class,

class <MyClass> extends Simulation {

  before {
    println("Simulation is about to start!")
  }
  val generateAuthTest = scenario("generateAuth").exec(karateFeature("classpath:path/generateAuth.feature")) 
  val createAccountTest = scenario("test").exec(karateFeature("classpath:path/createAccount.feature"))
  setUp(
    createAccountTest.inject(rampUsers(1) over (10 seconds))).maxDuration(1 minutes)
  after {
    println("Simulation is finished!")
  }
}

在这里,我可以从 generateAuth.feature 文件中读取身份验证,该文件是 createAccount.feature 文件的输入,以便我可以作为参数传递吗? 请建议我如何在调用 karateFeature 方法时将参数传递给 createAccount.feature。

让我在这里提出一个要求,

假设我们有一些用于对特定数据进行 CRUD 操作的特征文件。下面我将如何编写功能场景,

  1. 我将创建新的功能文件来编写场景
  2. 只需使用 CRUD 文件来测试单个流程。

现在如果我要针对单个操作进行性能测试用例,我觉得有两种方法,

  1. 创建新的 4 个性能测试功能文件(每个 CRUD 一个 方法)并在各自的测试中调用这些 CRUD 特征文件 特征文件。最后我们只调用测试特征文件 各自的加特林模拟class。 **(在这种情况下,我最终会创建更多测试功能文件以及模拟 classes 性能,我想避免)**
  2. 只需在相应的 gatling 模拟中调用 CRUD 文件 class 和 将需要的参数传递给他们。(在这种情况下,我们只需要创建4个模拟 classes 和 运行 它们基于创建、读取、删除等操作)

这里只是想知道第二种性能测试方式,它在空手道中是否可以实现,如果可以,请告诉我如何实现?

Summary- I think its achievable using 3rd feature file (extra) for individual use case but I do not want to make an extra feature file for each case so that I can avoid maintenance work and can take advantage of re-usability of existing feature file from functional test to performance test.

只需使用正常的空手道概念,例如 karate-config.js

你可以很容易地switch environments通过设置karate.env系统属性。

例如:

mvn test -DargLine="-Dkarate.env=e2e"

编辑:编辑问题后,很明显您有一个要测试的单一流程。请使用单一功能。我建议您将 generateAuth 移动到功能的 Background 中。另请参阅 callSingle() 上的文档以了解高级选项。

如果您希望 2 个功能文件神奇地共享数据,如果您正确构建测试,这是不可能的,也不需要。

如果您真的需要这个,请创建一个 Java 单例并从每个功能访问它。不过完全不推荐这个。

编辑:在空手道 0.9.0 之后,您可以 call a single scenario within a feature if it has a tag:

classpath:animals/cats/create.feature@sometagname