当前位置: 首页 > 知识库问答 >
问题:

@KARATE在gatling模拟类中如何向特征文件传递参数?

蒲曦
2023-03-14

让我们考虑一个场景,我们必须运行“Create an account API”的性能测试,该API将输入作为头/路径参数“auth token”,并输入诸如用户帐户名之类的数据。因此对于上面的场景,我们有2个特性文件,

运行POST的性能测试http://baseurl/auth_param/create/input_data1。一个特性(例如:generateauth.feature)文件,它将具有身份验证令牌2。第二个特征(createaccount.feature)文件,以参数作为认证令牌,输入数据。

这是我的模拟课,

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!")
  }
}

这里,我可以从为CreateAccount.Feature文件输入的GenerateAuth.Feature文件读取auth,以便作为参数传递吗?请建议我如何在调用karateFeature方法时将参数传递给CreateAccount.Feature。

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

假设我们有一些针对特定数据的CRUD操作的特性文件。这里是如何编写功能场景的,

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

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

  1. 创建4个新的性能测试特性文件(每个CRUD方法一个),并在相应的测试特性文件中调用这些CRUD特性文件。最后,我们在相应的gatling模拟类中调用测试特性文件。**(在这种情况下,我将创建更多的测试特性文件以及性能模拟类,这是我想避免的)**
  2. 只需在相应的gatling仿真类中调用CRUD文件,并将所需的参数传递给它们。(在本例中,我们只需创建4个仿真类,并在创建、读取、删除等操作的基础上运行它们)

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

总结--我认为它可以通过第三个特性文件(extra)来实现,但是我不想为每个用例制作一个额外的特性文件,这样我就可以避免维护工作,并且可以利用现有特性文件从功能测试到性能测试的可重用性。

共有1个答案

徐兴昌
2023-03-14

只需使用普通的空手道概念,如karate-config.js

通过设置karate.env系统属性,可以轻松切换环境。

例如:

如果您真的需要,请创建一个Java单例并从每个特性访问它。但我完全不建议你这么做。

编辑:在空手道0.9.0以后的版本中,如果一个特性中有一个标记,您可以调用该特性中的单个场景:

classpath:animals/cats/create.feature@sometagname
 类似资料:
  • 任何帮助都将不胜感激。谢谢!

  • 我有一个scala类a,其中有一个方法。 还有一个B类

  • 问题内容: 我必须在6个以上的环境中运行相同的其余api脚本集。因此,我已将所有测试数据和端点/资源路径存储在json文件中。然后,我尝试将此json文件读入我的karate- config.js文件,这是因为我要获取与从命令行(karate.env)传递的环境相对应的数据,该环境正在读入我的空手道-config.js文件 以下是我的json文件示例 下面是我的karate-config.js文件

  • 我有一个设计问题,当使用类似的东西时: 我认为应该有一些更好的方法来实现这种参数化的特性。 我在std中没有找到好的示例(例如,在具有类似的关联类型的traits中没有实现)?

  • 问题内容: 我是一个完整的Java新手。我知道Java将所有参数都视为按值传递,并且还有其他几个线程可以解释这一点。 例如,在C ++中,我可以执行以下操作: 哪个将输出3。我知道在Java中,所有参数都是按值传递的,因此您无法操纵传入的参数。在Java中,有没有一种标准的方法来 模拟 按引用传递?有没有办法调用操作传入变量的函数?对于我来说,很难绕开没有办法做到这一点的想法。 问题答案: 模拟传