如何在Karate Gatling中区分多Feature文件的独立性能测试报告
问题描述
使用Karate Gatling 1.4.1结合Scala类开展性能测试,Scala代码如下:
package Performance import com.intuit.karate.gatling.PreDef._ import io.gatling.core.Predef._ import scala.concurrent.duration._ class Testing extends Simulation { val create = scenario("create").exec(karateFeature("classpath:Performance/Demo.feature")) val create1 = scenario("create1").exec(karateFeature("classpath:Performance/Demo1.feature")) val create2 = scenario("create2").exec(karateFeature("classpath:Performance/Demo2.feature")) setUp( create.inject(rampUsers(10) during (8 seconds)).protocols(protocol), create1.inject(rampUsers(6) during (10 seconds)).protocols(protocol), create2.inject(rampUsers(8) during (10 seconds)).protocols(protocol), ) }
运行Maven命令后,生成的Gatling报告包含3个Feature的测试结果,但无法区分每个Feature的独立性能数据,尝试为每个Feature单独设置setUp未成功,需解决该问题。
解决方案
方法1:为每个karateFeature指定自定义名称
在调用karateFeature时显式指定name参数,该名称会被Gatling用来标识对应Feature的所有请求,报告中可直接按名称筛选数据。修改后的Scala代码如下:
package Performance import com.intuit.karate.gatling.PreDef._ import io.gatling.core.Predef._ import scala.concurrent.duration._ class Testing extends Simulation { // 定义Karate协议(若之前未定义) val protocol = karateProtocol val create = scenario("create").exec( karateFeature(name = "Demo Feature", "classpath:Performance/Demo.feature") ) val create1 = scenario("create1").exec( karateFeature(name = "Demo1 Feature", "classpath:Performance/Demo1.feature") ) val create2 = scenario("create2").exec( karateFeature(name = "Demo2 Feature", "classpath:Performance/Demo2.feature") ) setUp( create.inject(rampUsers(10) during (8 seconds)).protocols(protocol), create1.inject(rampUsers(6) during (10 seconds)).protocols(protocol), create2.inject(rampUsers(8) during (10 seconds)).protocols(protocol), ) }
运行后,Gatling报告的Request Statistics中,每个请求会以指定名称为前缀,可通过报告筛选功能快速定位对应Feature的性能数据。
方法2:为Feature内的请求添加唯一标识
在每个Karate Feature文件中,给所有请求添加name属性,自定义请求名称以区分不同Feature的请求。示例如下:Demo.feature:
Feature: Demo Feature Scenario: Create Resource Given url baseUrl + "/resources" And request { "name": "test" } When method post Then status 201 * name 'Demo - Create Resource'
Demo1.feature:
Feature: Demo1 Feature Scenario: Query Resource Given url baseUrl + "/resources/1" When method get Then status 200 * name 'Demo1 - Query Resource'
这种方式会让每个请求的名称带有明确的Feature标识,在Gatling报告中可直接通过请求名称区分不同Feature的性能数据。
方法3:利用Gatling的Scenario分组筛选
你的代码已为每个Feature创建独立Scenario(create、create1、create2),Gatling报告默认支持按Scenario分组查看数据:
- 打开Gatling报告的Details标签页
- 在页面顶部的Group by下拉菜单中选择Scenario
- 即可分别查看每个Scenario(对应单个Feature)的独立性能指标,包括响应时间、请求成功率等数据
内容的提问来源于stack exchange,提问作者Yarasu Lavanya
相关产品推荐
相关产品推荐

