@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 操作的特征文件。下面我将如何编写功能场景,
- 我将创建新的功能文件来编写场景
- 只需使用 CRUD 文件来测试单个流程。
现在如果我要针对单个操作进行性能测试用例,我觉得有两种方法,
- 创建新的 4 个性能测试功能文件(每个 CRUD 一个
方法)并在各自的测试中调用这些 CRUD 特征文件
特征文件。最后我们只调用测试特征文件
各自的加特林模拟class。
**(在这种情况下,我最终会创建更多测试功能文件以及模拟 classes
性能,我想避免)**
- 只需在相应的 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
让我们考虑一个场景,我们必须 运行 "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 操作的特征文件。下面我将如何编写功能场景,
- 我将创建新的功能文件来编写场景
- 只需使用 CRUD 文件来测试单个流程。
现在如果我要针对单个操作进行性能测试用例,我觉得有两种方法,
- 创建新的 4 个性能测试功能文件(每个 CRUD 一个 方法)并在各自的测试中调用这些 CRUD 特征文件 特征文件。最后我们只调用测试特征文件 各自的加特林模拟class。 **(在这种情况下,我最终会创建更多测试功能文件以及模拟 classes 性能,我想避免)**
- 只需在相应的 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